300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > SpringBoot 实现发送邮件

SpringBoot 实现发送邮件

时间:2020-11-25 02:47:33

相关推荐

SpringBoot 实现发送邮件

作者平台:

| CSDN:/qq\_4115394…

| 掘金:/user/651387…

| 知乎:/people/1024…

| GitHub:/JiangXia-10…

| 微信公众号:1024笔记

本文大约3865字,预计阅读时长10分钟

前言

发送邮件是很多公司必须的业务场景之一。常见的比如预警邮件、入职邮件、报告邮件等等。我们公司就有很多场景需要使用到邮件功能,今天就一起来学习如何使用springboot实现邮件业务场景,掌握邮件业务类的核心逻辑。

邮件的基本发送流程是这样的:

邮件发送方通过用户名密码登录自己的邮箱服务器,这里直接调用接口的方式登录;

发送方准备好要发送的邮件,将邮件从邮件发送发的邮箱服务器发送至接收方的邮件服务器

接收方在登录自己的邮箱后从邮箱服务器将邮件拉取过来进行查看,因此后面需要配置邮件发送方的用户名、密码和邮箱服务器地址

实战

和其他的场景一样,邮件首先也需要引入starter,这里相关的starter依赖如下:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId></dependency>复制代码

引入上述依赖之后其实就可以使用邮件了的,但是前面说了需要配置邮件发送方的用户名、 密码和邮箱服务器地址,这里邮件服务方的配置邮箱属性如下:

spring:mail: # 邮箱账号 username: 11111111@ # 邮箱客户端授权码 password: sqbnsqstthyshghi # 邮箱服务器地址 host: properties: mail:smtp: ssl:enable: true复制代码

这里的密码并不是在网页上登录使用的密码,而是在邮箱的设置-账户中开通服务时获取到的授权码,需要通过以下方式进行获取:比如QQ邮箱的话就进入设置-账户-POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务,将POP3/SMTP服务开启,然后手机号发送验证获取授权码:

host地址的值也是在设置中开启邮箱服务之后通过点击进去看到的:同样的邮箱通常是一样的,表示邮箱服务器的地址,但是在使用QQ邮箱发送邮件的时候,如果只配置账号、密码、host,会提示需要一个安全的连接,所以还需要进行如下配置:

spring properties: mail:smtp: ssl:enable: true复制代码

接下来就可以正式进行邮件的测试了,在测试类中方法如下:

@Autowired JavaMailSenderImpl javaMailSender; @Test public void sendmailtest(){ SimpleMailMessage mailMessage = new SimpleMailMessage(); mailMessage.setSubject("测试springboot发送邮件");//主题 mailMessage.setText("这是springboot发送邮件的内容,你看看怎么样呢?是不是成功了?");//内容 mailMessage.setTo("xxxx@"); mailMessage.setFrom("xxxx@"); javaMailSender.send(mailMessage); }复制代码

执行测试方法,运行成功之后,打开接受方的邮件收集箱,我这里是163邮箱,即可看到已经成功收取到了刚刚发送的邮件:

通过上述代码我们可以看到核心就是JavaMailSenderImpl,查看源码发现它又是实现了JavaMailSender接口 什么是JavaMailSender和JavaMailSenderImpl? JavaMailSender和JavaMailSenderImpl 是Spring官方提供的集成邮件服务的接口和实现类,目前是Java后端发送邮件和集成邮件服务的主流工具。 它们的原理其实非常简单,如果上面的测试代码,只需要直接在业务类注入JavaMailSenderImpl并调用send方法发送邮件即可。其中简单邮件可以通过SimpleMailMessage来发送邮件,而复杂的邮件可以借助MimeMessageHelper来构建MimeMessage发送邮件。例如,可以配置一个邮件相关的模板,每次给不同的人发送不同的邮件直接调用模板即可,还可以上传附件发送,比如以入职邮件为场景: 邮件模版html文件如下:

<html lang="en" xmlns:th=""><head><meta charset="UTF-8"><title>这是欢迎一个邮件</title></head><body>欢迎 加入我们公司<table border="1"><tr><td>姓名</td><td th:text="${name}"></td></tr><tr><td>职位</td><td th:text="${posName}"></td></tr><tr><td>职称</td><td th:text="${joblevelName}"></td></tr><tr><td>部门</td><td th:text="${departmentName}"></td></tr></table><p>希望在未来的日子里,携手共进!</p></body></html>复制代码

测试方法如下:

@Autowired JavaMailSenderImpl javaMailSender; @Autowired TemplateEngine templateEngine; @Autowired MailProperties mailProperties; @Test public void sendmailtemp() throws MessagingException { //复杂邮件 MimeMessage msg = javaMailSender.createMimeMessage(); MimeMessageHelper helper = new MimeMessageHelper(msg,true); try { helper.setTo("11111@"); helper.setFrom("1111@"); helper.setSubject("入职欢迎"); helper.setSentDate(new Date()); //附件 helper.addAttachment("配置说明.docx", new File("C:/Users/Administrator/Desktop/配置说明.docx")); Context context = new Context(); context.setVariable("name", "江夏"); context.setVariable("posName", "java开发工程师"); context.setVariable("joblevelName", "高级工程师"); context.setVariable("departmentName", "研发部"); String mail = templateEngine.process("mailtemp", context); helper.setText(mail, true); javaMailSender.send(msg); System.out.println(System.currentTimeMillis() + ":邮件发送成功"); } catch (MessagingException e) { e.printStackTrace(); System.out.println(System.currentTimeMillis() + ":邮件发送失败"+ e.getMessage()); } }复制代码

执行测试方法:

javaMailSenderImpl提供了创建复杂邮件的方法createMimeMessage。 MimeMessageHelper则提供了创建邮件内容方法,比如发送方、接收方、附件、邮件内容等等等。而实际的邮件的发送还是JavaMailSenderImpl的send方法。

总结

以上就是springboot构建一个邮件业务的大致内容和基本逻辑,实际应用中可以根据具体的业务场景实现更加复杂的逻辑,比如消息队列、自动触发等等。

如有任何问题或者不对的地方欢迎一起交流讨论学习!

本项目源码在:

/JiangXia-10…

欢迎下载、Star!

相关推荐

Springboot处理请求参数的注解

Spring常用注解大全,值得你的收藏!!!

SpringBoot集成slf4j日志系统

SpringBoot开发Restful风格的接口实现CRUD功能

SpringBoot实现文件上传接口

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。