加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Spring Boot实现仿博客园发送通知邮件

发布时间:2020-12-15 01:53:11 所属栏目:大数据 来源:网络整理
导读:邮件服务已经是基础性服务了 ,是网站的必备功能之一,当注册了某些网站的时候,邮箱里通常会收到一封注册成功通知邮件或者点击激活账号的邮件,博客园也是如此。本文使用Spring Boot,通过QQ邮箱来模仿博客园发送一封通知邮件。 博客园发送的“欢迎您加入博

邮件服务已经是基础性服务了 ,是网站的必备功能之一,当注册了某些网站的时候,邮箱里通常会收到一封注册成功通知邮件或者点击激活账号的邮件,博客园也是如此。本文使用Spring Boot,通过QQ邮箱来模仿博客园发送一封通知邮件。

博客园发送的“欢迎您加入博客园”的主题邮件如图所示。这种通知邮件,只有登录用户名在变化,其它邮件内容均不变,很适合用邮件模板来处理。

模板可以实现显示与数据分离,将模板文件和数据通过模板引擎生成最终的HTML代码。

Thymeleaf是一个适用于Web和独立环境的现代服务器端Java模板引擎,能够处理HTML,XML,JavaScript,CSS甚至纯文本。Thymeleaf由于使用了标签属性做为语法,模版页面直接用浏览器渲染,与其它模板引擎(比如Freemaker)相比,Thymeleaf最大的特点是能够直接在浏览器中打开并正确显示模板页面,而不需要启动整个Web应用。

Thymeleaf作为Spring官方推荐的模板引擎,Spring boot对Thymeleaf支持比较友好,配置简单,这里使用Thymeleaf作为模板引擎。

下面正式开始实现仿博客园发送通知邮件。

1. pom.xml添加邮件和模板相关依赖

org.springframework.boot spring-boot-starter-mail
    <dependency>
        <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency></pre>

2. application.property配置邮箱和thymelea模板

我使用的是QQ邮箱,需要获得QQ邮箱的授权码。

关于QQ邮箱生成授权码:进入QQ邮箱 --> 邮箱设置 --> 账户 -->? POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务 --> 生成授权码 --> 手机发送验证短信 -->得到授权码
spring.mail.host======thymelea模板配置

spring.thymeleaf.prefix=classpath:/templates/<span style="color: #000000;">
spring.thymeleaf.suffix=<span style="color: #000000;">.html
spring.thymeleaf.mode=<span style="color: #000000;">HTML
spring.thymeleaf.encoding=UTF-8<span style="color: #000000;">
spring.thymeleaf.servlet.content-type:text/<span style="color: #000000;">html

热部署文件,页面不产生缓存,及时更新

spring.thymeleaf.cache=<span style="color: #0000ff;">false<span style="color: #000000;">
spring.resources.chain.strategy.content.enabled=<span style="color: #0000ff;">true<span style="color: #000000;">
spring.resources.chain.strategy.content.paths=<span style="color: #008000;">/**

3. 编写Service及其实现

Service中有两个方法:

sendSimpleMail用于发送简单的文本邮件,是一个比较基础的案例。

sendHtmlMail用于发送HTML邮件,发送通知邮件用的就是这个方法。其实模板邮件也就是HTML邮件中的一个子类。

MailService:

MailServiceImpl:

MailServiceImpl </span><span style="color: #0000ff;"&gt;private</span> <span style="color: #0000ff;"&gt;final</span> Logger logger = LoggerFactory.getLogger(<span style="color: #0000ff;"&gt;this</span><span style="color: #000000;"&gt;.getClass()); @Autowired </span><span style="color: #0000ff;"&gt;private</span><span style="color: #000000;"&gt; JavaMailSender mailSender; @Value(</span>"${spring.mail.username}"<span style="color: #000000;"&gt;) </span><span style="color: #0000ff;"&gt;private</span><span style="color: #000000;"&gt; String from; @Override </span><span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;void</span><span style="color: #000000;"&gt; sendSimpleMail(String to,String content) { SimpleMailMessage message </span>= <span style="color: #0000ff;"&gt;new</span><span style="color: #000000;"&gt; SimpleMailMessage(); message.setFrom(from); message.setTo(to);</span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;邮件接收者</span> message.setSubject(subject);<span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;邮件主题</span> message.setText(content);<span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;邮件内容</span> <span style="color: #0000ff;"&gt;try</span><span style="color: #000000;"&gt; { mailSender.send(message); logger.info(</span>"发送简单邮件成功!"<span style="color: #000000;"&gt;); } </span><span style="color: #0000ff;"&gt;catch</span><span style="color: #000000;"&gt; (Exception e) { logger.error(</span>"发送简单邮件时发生异常!"<span style="color: #000000;"&gt;,e); } } @Override </span><span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;void</span><span style="color: #000000;"&gt; sendHtmlMail(String to,String content) { MimeMessage message </span>=<span style="color: #000000;"&gt; mailSender.createMimeMessage(); </span><span style="color: #0000ff;"&gt;try</span><span style="color: #000000;"&gt; { </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;true表示需要创建一个multipart message</span> MimeMessageHelper helper = <span style="color: #0000ff;"&gt;new</span> MimeMessageHelper(message,<span style="color: #0000ff;"&gt;true</span><span style="color: #000000;"&gt;); helper.setFrom(from); helper.setTo(to); helper.setSubject(subject); helper.setText(content,</span><span style="color: #0000ff;"&gt;true</span><span style="color: #000000;"&gt;); mailSender.send(message); logger.info(</span>"发送HTML邮件成功!"<span style="color: #000000;"&gt;); } </span><span style="color: #0000ff;"&gt;catch</span><span style="color: #000000;"&gt; (MessagingException e) { logger.error(</span>"发送HTML邮件时发生异常!"<span style="color: #000000;"&gt;,e); } }

}

4. 创建模板

在resorces/templates下创建emailTemplate.html模板,与模板配置中的spring.thymeleaf.prefix=classpath:/templates/对应,不然会找不到模板。

关于Thymeleaf的使用这里简单介绍一下:

引入命名空间:

访问数据:#{user.name}

访问变量:${today}??

输出URL:?

更多详情的说明和规则请参见:

emailTemplate.html:

欢迎您加入博客园 您好,您在博客园的帐户激活成功,您的登录用户名是: -- www.cnblogs.com 代码改变世界!

5. JUnit单元测试

使用Junit进行单元测试,pom.xml中已经默认配置好了,需要编写测试类和测试方法。测试类以xxxTest.java命名,测试方法上面加@Test注解就可以使用了。具体代码如下:

@RunWith(SpringRunner. @Autowired </span><span style="color: #0000ff;"&gt;private</span><span style="color: #000000;"&gt; MailService mailService; @Autowired </span><span style="color: #0000ff;"&gt;private</span><span style="color: #000000;"&gt; TemplateEngine templateEngine; @Test </span><span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;void</span> testSendSimpleMail() <span style="color: #0000ff;"&gt;throws</span><span style="color: #000000;"&gt; Exception { mailService.sendSimpleMail(</span>"xxx@qq.com","测试发送简单文本邮件","测试发送简单文本邮件"<span style="color: #000000;"&gt;); } @Test </span><span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;void</span><span style="color: #000000;"&gt; testSendTemplateMail() { Context context </span>= <span style="color: #0000ff;"&gt;new</span><span style="color: #000000;"&gt; Context(); context.setVariable(</span>"username","shangguanhao"<span style="color: #000000;"&gt;); String emailContent </span>= templateEngine.process("emailTemplate"<span style="color: #000000;"&gt;,context); mailService.sendHtmlMail(</span>"xxx@qq.com","欢迎您加入博客园"<span style="color: #000000;"&gt;,emailContent); }

}

进行Junit测试,就可以发送一个简答的文本邮件和一个HTML的模板邮件,几乎和博客园的一模一样(如下图所示):

完整代码:
参考:?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读