SpringBoot實現郵件功能是很是的方便快捷的,由於SpringBoot默認有starter實現了Mail。
發送郵件應該是網站的必備功能之一,什麼註冊驗證,忘記密碼或者是給用戶發送營銷信息。
最先期的時候咱們會使用JavaMail相關api來寫發送郵件的相關代碼,後來spring退出了
JavaMailSender更加簡化了郵件發送的過程,在以後springboot對此進行了封裝就有了
如今的spring-boot-starter-mail。html
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-freemarker</artifactId> </dependency>
QQ郵箱->設置->帳戶->POP3/SMTP服務:開啓服務後會得到QQ的受權碼.java
1)qq郵箱的配置git
# JavaMailSender 郵件發送的配置 spring.mail.host=smtp.qq.com spring.mail.username=用戶qq郵箱 #QQ郵箱的受權碼 spring.mail.password=受權碼 spring.mail.properties.mail.smtp.auth=true spring.mail.properties.mail.smtp.starttls.enable=true spring.mail.properties.mail.smtp.starttls.required=true spring.mail.default-encoding=UTF-8
2)163郵箱配置github
spring.mail.host=smtp.163.com spring.mail.username=用戶163郵箱 spring.mail.password=郵箱密碼 spring.mail.properties.mail.smtp.auth=true spring.mail.properties.mail.smtp.starttls.enable=true spring.mail.properties.mail.smtp.starttls.required=true spring.mail.default-encoding=UTF-8
spring: #郵箱配置 mail: host: smtp.qq.com username: 917484312@qq.com #QQ郵箱的受權碼 password: 本身申請 default-encoding: UTF-8 properties: mail: smtp: auth: true starttls: enable: true required: true freemarker: content-type: text/html #後綴名 suffix: .ftl template-loader-path: classpath:/templates charset: UTF-8 check-template-location: true #freemarker配置 #設置一個郵件發送人 lance: mail: sender: 917484312@qq.com
/** * @author lance(ZYH) * @function 發送郵件-封裝接受者信息 * @date 2018-07-07 13:11 */ @Data public class MailBean implements Serializable { private String recipient; //郵件接收人 private String subject; //郵件主題 private String content; //郵件內容 }
public void sendSimpleMail(MailBean mailBean) { try { SimpleMailMessage simpleMailMessage = new SimpleMailMessage(); //郵件發送人 simpleMailMessage.setFrom(MAIL_SENDER); //郵件接收人 simpleMailMessage.setTo(mailBean.getRecipient()); //郵件主題 simpleMailMessage.setSubject(mailBean.getSubject()); //郵件內容 simpleMailMessage.setText(mailBean.getContent()); javaMailSender.send(simpleMailMessage); } catch (Exception e) { logger.error("郵件發送失敗", e.getMessage()); } }
public void sendHTMLMail(MailBean mailBean) { MimeMessage mimeMailMessage = null; try { mimeMailMessage = javaMailSender.createMimeMessage(); MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMailMessage, true); mimeMessageHelper.setFrom(MAIL_SENDER); mimeMessageHelper.setTo(mailBean.getRecipient()); mimeMessageHelper.setSubject(mailBean.getSubject()); StringBuilder sb = new StringBuilder(); sb.append("<h1>SpirngBoot測試郵件HTML</h1>") .append("\"<p style='color:#F00'>你是真的太棒了!</p>") .append("<p style='text-align:right'>右對齊</p>"); mimeMessageHelper.setText(sb.toString(), true); javaMailSender.send(mimeMailMessage); } catch (Exception e) { logger.error("郵件發送失敗", e.getMessage()); } }
public void sendAttachmentMail(MailBean mailBean) { MimeMessage mimeMailMessage = null; try { mimeMailMessage = javaMailSender.createMimeMessage(); MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMailMessage, true); mimeMessageHelper.setFrom(MAIL_SENDER); mimeMessageHelper.setTo(mailBean.getRecipient()); mimeMessageHelper.setSubject(mailBean.getSubject()); mimeMessageHelper.setText(mailBean.getContent()); //文件路徑 FileSystemResource file = new FileSystemResource(new File("src/main/resources/static/image/mail.png")); mimeMessageHelper.addAttachment("mail.png", file); javaMailSender.send(mimeMailMessage); } catch (Exception e) { logger.error("郵件發送失敗", e.getMessage()); } }
效果:
spring
public void sendInlineMail(MailBean mailBean) { MimeMessage mimeMailMessage = null; try { mimeMailMessage = javaMailSender.createMimeMessage(); MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMailMessage, true); mimeMessageHelper.setFrom(MAIL_SENDER); mimeMessageHelper.setTo(mailBean.getRecipient()); mimeMessageHelper.setSubject(mailBean.getSubject()); mimeMessageHelper.setText("<html><body>帶靜態資源的郵件內容,這個一張IDEA配置的照片:<img src='cid:picture' /></body></html>", true); //文件路徑 FileSystemResource file = new FileSystemResource(new File("src/main/resources/static/image/mail.png")); mimeMessageHelper.addInline("picture", file); javaMailSender.send(mimeMailMessage); } catch (Exception e) { logger.error("郵件發送失敗", e.getMessage()); } }
public void sendTemplateMail(MailBean mailBean) { MimeMessage mimeMailMessage = null; try { mimeMailMessage = javaMailSender.createMimeMessage(); MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMailMessage, true); mimeMessageHelper.setFrom(MAIL_SENDER); mimeMessageHelper.setTo(mailBean.getRecipient()); mimeMessageHelper.setSubject(mailBean.getSubject()); Map<String, Object> model = new HashMap<String, Object>(); model.put("content", mailBean.getContent()); model.put("title", "標題Mail中使用了FreeMarker"); Template template = configuration.getTemplate("mail.ftl"); String text = FreeMarkerTemplateUtils.processTemplateIntoString(template, model); mimeMessageHelper.setText(text, true); javaMailSender.send(mimeMailMessage); } catch (Exception e) { logger.error("郵件發送失敗", e.getMessage()); } }
效果:
api
1)pom中導入thymeleaf的包springboot
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency>
2)在resorces/templates下建立emailTemplate.html網絡
<!DOCTYPE html> <html lang="zh" xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"/> <title>Title</title> </head> <body> 您好,這是驗證郵件,請點擊下面的連接完成驗證,<br/> <a href="#" th:href="@{ http://www.ityouknow.com/neo/{id}(id=${id}) }">激活帳號</a> </body> </html>
3)解析模板併發送併發
@Test public void sendTemplateMail() { //建立郵件正文 Context context = new Context(); context.setVariable("id", "006"); String emailContent = templateEngine.process("emailTemplate", context); mailService.sendHtmlMail("ityouknow@126.com","主題:這是模板郵件",emailContent); }
由於各類緣由,總會有郵件發送失敗的狀況,好比:郵件發送過於頻繁、網絡異常等。在出現這種狀況的時候,
咱們通常會考慮從新重試發送郵件,會分爲如下幾個步驟來實現:app
不少時候郵件發送並非咱們主業務必須關注的結果,好比通知類、提醒類的業務能夠容許延時或者失敗。
這個時候能夠採用異步的方式來發送郵件,加快主交易執行速度,在實際項目中能夠採用MQ發送郵件相關
參數,監聽到消息隊列以後啓動發送郵件。
https://github.com/LanceToBigData/SpringBootLearning/tree/develop/SpringBoot-Mail