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