SpringBoot(十三):JavaMailSender郵件服務
本作品採用ofollow,noindex" href="http://creativecommons.org/licenses/by/4.0/" target="_blank">知識共享署名 4.0 國際許可協議 進行許可。
本文作者:低調小熊貓
文章連結:https://aodeng.cc/archives/springbootshisans
轉載宣告:自由轉載-非商用-非衍生-保持署名,非商業轉載請註明作者及出處,商業轉載請聯絡作者本人qq:2696284032
簡介
傳送郵件可以實現,註冊驗證,忘記密碼等功能,還可以打廣告,可謂很nice的功能了
使用
新增依賴
<!--mail--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency>
配置檔案
spring: mail: host: *** #//郵箱伺服器地址 username: *** password: *** default-encoding: UTF-8 #以誰來發送郵件 mail.fromMail.addr: ***
封裝介面
public interface EmailService { void sendTextEmail(String to,String subject,String content); void sendHtmlEmali(String to,String subject,String content); void sendAttachmentsEmail(String to,String subject,String content,String filePath); void sendStaticResourcesEmail(String to,String subject,String content,String rscPath,String rscId); }
實現介面,這裡是關鍵程式碼了
/** * @program:hope * @author:aodeng * @create:2018-10-11 13:25 **/ @Service public class EmaliServiceImpl implements EmailService { private static final Logger log= LoggerFactory.getLogger(EmaliServiceImpl.class); @Autowired private JavaMailSender mailSender; @Value("${mail.fromMail.addr}") private String from; /*** * 傳送文字郵件 * @param to * @param subject * @param content */ @Override public void sendTextEmail(String to, String subject, String content) { SimpleMailMessage mailMessage=new SimpleMailMessage(); mailMessage.setFrom(from); mailMessage.setTo(to); mailMessage.setSubject(subject); mailMessage.setText(content); try { mailSender.send(mailMessage); log.info("[文字郵件傳送成功,當前時間]-[{}]",new Date()); }catch (Exception e){ e.printStackTrace(); } } /*** * html郵件 * @param to * @param subject * @param content */ @Override public void sendHtmlEmali(String to, String subject, String content) { MimeMessage message=mailSender.createMimeMessage(); try { MimeMessageHelper helper=new MimeMessageHelper(message,true);//true表示建立一個multipart message helper.setFrom(from); helper.setTo(to); helper.setSubject(subject); helper.setText(content); //傳送郵件 mailSender.send(message); log.info("[html郵件傳送成功,當前時間]-[{}]",new Date()); }catch (MessagingException e){ e.printStackTrace(); } } /*** * 附件郵件 * @param to * @param subject * @param content * @param filePath */ @Override public void sendAttachmentsEmail(String to, String subject, String content, String filePath) { MimeMessage message=mailSender.createMimeMessage(); try { MimeMessageHelper helper=new MimeMessageHelper(message,true);//true表示建立一個multipart message helper.setFrom(from); helper.setTo(to); helper.setSubject(subject); helper.setText(content,true); //上傳附件 FileSystemResource resource=new FileSystemResource(new File(filePath)); String fileName=filePath.substring(filePath.lastIndexOf(File.separator)); helper.addAttachment(fileName,resource); //傳送郵件 mailSender.send(message); log.info("[附件郵件傳送成功,當前時間]-[{}]",new Date()); }catch (MessagingException e){ e.printStackTrace(); } } /*** * 嵌入靜態資源郵件 * @param to * @param subject * @param content * @param rscPath * @param rscId */ @Override public void sendStaticResourcesEmail(String to, String subject, String content, String rscPath, String rscId) { MimeMessage message=mailSender.createMimeMessage(); try { MimeMessageHelper helper=new MimeMessageHelper(message,true);//true表示建立一個multipart message helper.setFrom(from); helper.setTo(to); helper.setSubject(subject); helper.setText(content,true); //嵌入靜態資源 FileSystemResource resource=new FileSystemResource(new File(rscPath)); helper.addInline(rscId,resource); //傳送郵件 mailSender.send(message); log.info("[嵌入靜態資源郵件傳送成功,當前時間]-[{}]",new Date()); }catch (MessagingException e){ e.printStackTrace(); } } }
測試功能
@Test public void test1(){ //for(int i=0;i<=2;i++){ emailService.sendTextEmail("郵件地址","測試","收到請回復,over!"); //} } @Test public void test2(){ String content="<html>\n" + "<body>\n" + "<h3>hello world ! 這是一封html郵件!</h3>\n" + "</body>\n" + "</html>"; emailService.sendHtmlEmali("郵件地址","測試",content); } @Test public void test3(){ emailService.sendAttachmentsEmail("郵件地址","測試","收到請回復,over!","C:\\Users\\ad182\\Pictures\\image3\\a.jpg"); } @Test public void test4(){ String rscId = "neo006"; String content="<html><body>這是有圖片的郵件:<img src=\'cid:" + rscId + "\' ></body></html>"; String imgPath = "C:\\Users\\ad182\\Pictures\\image3\\a.jpg"; emailService.sendStaticResourcesEmail("郵件地址","測試",content,imgPath,rscId); }
還有一個傳送郵件驗證的功能
新增引擎模板
<!-- 模板引擎 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency>
建立一個頁面,注意:頁面名稱和後臺引數名稱要一致
<body> 您好,這是驗證郵件,請點選下面的連結完成驗證,<br/> <a href="#" th:href="@{ https://aodeng.cc/{id}(id=${id}) }">啟用賬號</a> </body>
傳送驗證郵件,其實就是後臺拼接一個引數到頁面,將頁面發個使用者,使用者點選頁面的帶引數的連結,後臺接收引數,然後就實現驗證的功能了
@Test public void test5() { //建立郵件正文 org.thymeleaf.context.Context context = new org.thymeleaf.context.Context(); context.setVariable("id", "006"); String emailContent = templateEngine.process("emailTemplate", context); emailService.sendHtmlEmali("[email protected]","主題:這是模板郵件",emailContent); }