SpringBoot 实现发送邮件

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

前言


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


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


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


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


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


实战


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


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


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


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


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


886947bd7bf640ae9e7a42508b421c75~tplv-k3u1fbpfcp-zoom-in-crop-mark_1304_0_0_0.webp.jpg


631166314b064d3cbb19bba4b8300938~tplv-k3u1fbpfcp-zoom-in-crop-mark_1304_0_0_0.webp.jpg


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@163.com");        
mailMessage.setFrom("xxxx@qq.com");        
javaMailSender.send(mailMessage);    
}
复制代码


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


微信截图_20220521203723.png


265901eb12a34237a983f57cd1dd405d~tplv-k3u1fbpfcp-zoom-in-crop-mark_1304_0_0_0.webp.jpg


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


<html lang="en" xmlns:th="http://www.thymeleaf.org">
    <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@163.com");            
helper.setFrom("1111@qq.com");            
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());        
}   
}
复制代码


执行测试方法:

f3f9d151b43f4885b6081ff4c795c651~tplv-k3u1fbpfcp-zoom-in-crop-mark_1304_0_0_0.webp.jpg

2ff6e5bf7e7543bbafdd77d60d454f8e~tplv-k3u1fbpfcp-zoom-in-crop-mark_1304_0_0_0.webp.jpgjavaMailSenderImpl提供了创建复杂邮件的方法createMimeMessage。 MimeMessageHelper则提供了创建邮件内容方法,比如发送方、接收方、附件、邮件内容等等等。而实际的邮件的发送还是JavaMailSenderImpl的send方法。


总结


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


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

目录
相关文章
|
7月前
|
安全 JavaScript Java
SpringBoot实现定时发送邮件
SpringBoot实现定时发送邮件
82 0
|
7月前
|
Java Spring
Spring boot项目如何发送邮件
Spring boot项目如何发送邮件
53 2
|
7月前
|
Java
Springboot如何发送邮件
Springboot如何发送邮件
|
7月前
|
消息中间件 JSON Java
如何利用springboot + rabbitmq发送邮件?
RabbitMQ相关知识请参考: RabbitMQ消息确认、消息持久化等核心知识总结 - 简书
64 2
|
7月前
|
安全 Java 数据安全/隐私保护
SpringBoot+Email发送邮件
邮件通知是现代应用中常见的一种通信方式,特别是在需要及时反馈、告警或重要事件通知的场景下。Spring Boot提供了简单而强大的邮件发送功能,使得实现邮件通知变得轻而易举。本文将研究如何在Spring Boot中使用JavaMailSender实现邮件发送,以构建一个可靠的通知体系。
253 1
SpringBoot+Email发送邮件
|
7月前
|
Java
【Java专题_03】使用springboot发送邮件
【Java专题_03】使用springboot发送邮件
62 2
|
Java
SpringBoot项目发送邮件
SpringBoot项目发送邮件
82 1
|
Java 测试技术 Maven
Spring Boot发送邮件
Spring Boot发送邮件
|
JavaScript Java Spring
一张思维导图带你学会使用SpringBoot中的Schedule定时发送邮件
一张思维导图带你学会使用SpringBoot中的Schedule定时发送邮件
163 0
|
Java 容器
JavaMailSender发送邮件(整合SpringBoot、解决空指针异常问题)
一、邮箱开启SMTP服务 以qq邮箱为例 进入邮箱设置页面后选择账户