SpringBoot实现发送电子邮件

本文介绍了SpringBoot发送电子邮件的实现过程,从电子邮件的历史、原理到SpringBoot的配置和使用,详细阐述了邮件服务器、邮件协议和邮件客户端等内容。通过准备邮箱账号、配置项目、编写服务端代码和邮件模板,最终完成邮件的发送测试。
摘要由CSDN通过智能技术生成

SpringBoot知识体系

目录


从1969年10月世界上的第一封电子邮件发出,到2019年,已经过去将近半个世纪了。虽然即时通讯和视频会议,甚至全息投影都变得日益普及,但电子邮件依然有着广泛的使用场景和不可撼动的历史地位。

SpringBoot拥有强大的生态链,几乎可以连接所有主流的开源库。

下面我们就从电子邮件发送的历史再到原理,然后如何自己配置邮件服务器并发送邮件,一步步讲解。

本文实现源码可以在这里找到: SpringBoot发送电子邮件源码

电子邮件与Java发送邮件的历史

  1. 1969年10月,世界上的第一封电子邮件

1969年10月世界上的第一封电子邮件是由计算机科学家Leonard K.教授发给他的同事的一条简短消息。第一条网上信息就是‘LO’,意思是‘你好!’。

  1. 1987年9月14日中国的第一封电子邮件

在此之后,1987年9月14日中国的第一封电子邮件,这封邮件是由德国维尔纳·措恩与中国的王运丰在北京计算机应用技术研究所,发往德国一个大学的,邮件内容颇具深意,“Across the Great Wall we can reach every corner in the world.(越过长城,走向世界)”,这是中国通过北京与德国大学之间的网络连接,向全球科学网发出的第一封电子邮件。

  1. 30年代发展历程

接下来中国的电子邮件进入了30年的发展期,虽然在1987年就有了电子邮件,但是,真正的邮件兴起,应该在90年代到2000年之间,因为在1987的时候中国网速特别慢,真正能接触到互联网的用户是非常少的,到了90年代中期,互联网浏览器的诞生,使得全民上网人数激增,电子邮件被广泛使用,此时,中国的部分学生在研究中使用到电子邮件,真正普及的时间是在2000年左右。

  1. Java发送邮件

Java在发明之初,就开始支持发送邮件,通过java mail包方式去操作邮件发送的内容和协议,但是,这种发送方式稍微比较复杂,需要配置各种参数、协议、内容,之后产生了Spring框架。

  1. Spring发送邮件

Spring在java mail的基础上进行了一些封装,使发送邮件的过程的复杂大大减少。

  1. SpringBoot发送邮件

SpringBoot Mail在Spring Mail的基础上,再次进行一次封装,使得发送邮件的便利度上,更为简单。

电子邮件原理

电子邮件服务器

用户要在Internet上提供电子邮件功能,必须有专门的电子邮件服务器。这些邮件服务器就类似于现实生活中的邮局,它主要负责接收用户投递过来的邮件,并把邮件投递到邮件接收者的电子邮箱中。

邮件服务器就好像是互联网世界的邮局。按照功能划分,邮件服务器可以划分为两种类型:

  1. SMTP邮件服务器:用户替用户发送邮件和接收外面发送给本地用户的邮件。
  2. POP3/IMAP邮件服务器:用户帮助用户读取SMTP邮件服务器接收进来的邮件。

电子邮箱

电子邮箱也称为E-mail地址,用户可以通过E-mail地址来标识自己发送的电子邮件,也可以通过这个地址接收别人发来的电子邮件。电子邮箱需要到邮件服务器进行申请,也就是说,电子邮箱其实就是用户在邮件服务器上申请的账户。邮件服务器会把接收到的邮件保存到为该账户所分配的邮箱空间中,用户通过用户名密码登录到邮件服务器查收该地址已经收到的邮件。一般来讲,邮件服务器为用户分配的邮箱空间是有限的。

邮件客户端

我们可以直接在网站上进行邮件收发,也可以使用常见的FoxMail、Outlook等邮件客户端软件接受邮件。邮件客户端软件通常集邮件撰写、发送和收发功能于一体,主要用于帮助用户将邮件发送给SMTP邮件服务器和从POP3/IMAP邮件服务器读取用户的电子邮件。

邮件传输协议

电子邮件需要在邮件客户端和邮件服务器之间,以及两个邮件服务器之间进行邮件传递,那就必须要遵守一定的规则,这个规则就是邮件传输协议。下面我们分别简单介绍几种协议:

  1. SMTP协议:全称为 Simple Mail Transfer Protocol,简单邮件传输协议。它定义了邮件客户端软件和SMTP邮件服务器之间,以及两台SMTP邮件服务器之间的通信规则。
  2. POP3协议:全称为 Post Office Protocol,邮局协议。它定义了邮件客户端软件和POP3邮件服务器的通信规则。
  3. IMAP协议:全称为 Internet Message Access Protocol,Internet消息访问协议,它是对POP3协议的一种扩展,也是定义了邮件客户端软件和IMAP邮件服务器的通信规则。

邮件格式

要想各种邮件处理程序能识别我们所写的电子邮件,能从我们所书写的电子邮件中分析和提取出发件人、收件人、邮件主题和邮件内容以及附件等信息,那么我们所写的电子邮件必须要遵循一定的格式要求,而这种邮件内容的基本格式和具体细节分别是由 RFC822 文档和 MIME 协议定义的。

  1. RFC822 文档中定义的文件格式包括两个部分:邮件头和邮件体。
  2. MIME协议(Multipurpose Internet Mail Extensions )用于定义复杂邮件体的格式,它可以表达多段平行的文本内容和非文本的邮件内容,例如,在邮件体中内嵌的图像数据和邮件附件等。另外,MIME协议的数据格式也可以避免邮件内容在传输过程中发生信息丢失。MIME协议不是对RFC822邮件格式的升级和替代,而是基于RFC822邮件格式的扩展应用。一言以蔽之,RFC822定义了邮件内容的格式和邮件头字段的详细细节,MIME协议则是定义了如何在邮件体部分表达出的丰富多样的数据内容。

电子邮件发送和接收流程

电子邮件发送和接收流程

图示的六个步骤分别进行如下的说明:

①用户A的电子邮箱为:xx@qq.com,通过邮件客户端软件写好一封邮件,交到QQ的邮件服务器,这一步使用的协议是SMTP,对应图示的①;

②QQ邮箱会根据用户A发送的邮件进行解析,也就是根据收件地址判断是否是自己管辖的账户,如果收件地址也是QQ邮箱,那么会直接存放到自己的存储空间。这里我们假设收件地址不是QQ邮箱,而是163邮箱,那么QQ邮箱就会将邮件转发到163邮箱服务器,转发使用的协议也是SMTP,对应图示的②;

③163邮箱服务器接收到QQ邮箱转发过来的邮件,也会判断收件地址是否是自己,发现是自己的账户,那么就会将QQ邮箱转发过来的邮件存放到自己的内部存储空间,对应图示的③;

④用户A将邮件发送了之后,就会通知用户B去指定的邮箱收取邮件。用户B会通过邮件客户端软件先向163邮箱服务器请求,要求收取自己的邮件,对应图示的④;

⑤163邮箱服务器收到用户B的请求后,会从自己的存储空间中取出B未收取的邮件,对应图示⑤;

⑥163邮箱服务器取出用户B未收取的邮件后,将邮件发给用户B,对应图示的⑥;最后三步用户B收取邮件的过程,使用的协议是POP3;

电子邮件的使用场景

在系统中电子邮件的使用场景:

  1. 注册验证

  2. 营销推送

  3. 触发机制

  4. 监控报警

电子邮件是业务和安全的最后一道防线 —— 当系统无法自动处理的时候,通过邮件提醒相关支持人员。

SpringBoot实现发送电子邮件

准备账号

注册发件邮箱并设置客户端授权码,这里以163免费邮箱为例:

163邮箱协议设置-1

163邮箱协议设置-2

构建项目并配置

搭建完项目以后,进行下面的两步配置。

application.properties配置参数:

# 邮箱配置
spring.mail.host=smtp.163.com
# 你的163邮箱
spring.mail.username=ispringboot@163.com
# 注意这里不是邮箱密码,而是SMTP授权密码
spring.mail.password=isb001
spring.mail.port=25
spring.mail.protocol=smtp
spring.mail.default-encoding=UTF-8

pom.xml依赖spring-boot-starter-mail模块:

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

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-thymeleaf<
  • 20
    点赞
  • 68
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
### 回答1: 使用Spring Boot发送电子邮件的实例代码如下:1、首先添加Maven依赖:<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency>2、 在application.properties配置文件中添加如下配置:spring.mail.host=smtp.example.com spring.mail.username=username spring.mail.password=password3、编写发送邮件的类:@Component public class MailService { @Autowired private JavaMailSender mailSender; public void sendMail(String to,String subject,String content){ SimpleMailMessage message = new SimpleMailMessage(); message.setTo(to); message.setSubject(subject); message.setText(content); mailSender.send(message); } }4、编写发送邮件的Controller:@Controller public class MailController { @Autowired private MailService mailService; @RequestMapping("sendmail") public void sendMail(String to,String subject,String content){ mailService.sendMail(to,subject,content); } } ### 回答2: 在Spring Boot发送邮件可以借助JavaMailSender的实现类JavaMailSenderImpl,下面是一个完整的发送邮件的示例代码: ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.mail.SimpleMailMessage; import org.springframework.mail.javamail.JavaMailSender; import org.springframework.stereotype.Component; @Component public class EmailSender { @Autowired private JavaMailSender javaMailSender; public void sendEmail(String to, String subject, String text) { SimpleMailMessage message = new SimpleMailMessage(); // 设置邮件接收人 message.setTo(to); // 设置邮件主题 message.setSubject(subject); // 设置邮件内容 message.setText(text); // 发送邮件 javaMailSender.send(message); } } ``` 在Spring Boot中,我们需要在application.properties或application.yml文件中配置发送邮件所需的SMTP服务器信息,如下所示: application.properties配置文件: ```properties spring.mail.host=smtp.example.com spring.mail.port=587 spring.mail.username=your-email@example.com spring.mail.password=your-password spring.mail.properties.mail.smtp.auth=true spring.mail.properties.mail.smtp.starttls.enable=true ``` application.yml配置文件: ```yaml spring: mail: host: smtp.example.com port: 587 username: your-email@example.com password: your-password properties: mail: smtp: auth: true starttls.enable: true ``` 然后,我们就可以在其他类中注入EmailSender的实例,并使用sendEmail方法发送邮件,如下所示: ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; @Controller public class HomeController { @Autowired private EmailSender emailSender; @GetMapping("/") public String home() { String to = "recipient@example.com"; String subject = "Hello"; String text = "This is a test email."; emailSender.sendEmail(to, subject, text); return "home"; } } ``` 以上就是一个完整的Spring Boot发送邮件的代码示例。通过配置邮件服务器信息,并借助JavaMailSender的实现类JavaMailSenderImpl,我们可以方便地在Spring Boot应用程序中发送邮件。 ### 回答3: 在Spring Boot发送邮件需要引入JavaMailSender依赖。以下是一个使用Spring Boot发送邮件的示例代码。 首先,在pom.xml文件中添加以下依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency> ``` 然后,在application.properties文件中配置SMTP服务器的信息,例如: ```properties spring.mail.host=smtp.example.com spring.mail.port=587 spring.mail.username=your-email@example.com spring.mail.password=your-email-password spring.mail.properties.mail.transport.protocol=smtp spring.mail.properties.mail.smtp.auth=true spring.mail.properties.mail.smtp.starttls.enable=true ``` 最后,编写一个邮件发送服务类(EmailService): ```java @Service public class EmailService { @Autowired private JavaMailSender javaMailSender; public void sendEmail(String to, String subject, String content) { SimpleMailMessage message = new SimpleMailMessage(); message.setTo(to); message.setSubject(subject); message.setText(content); javaMailSender.send(message); } } ``` 在需要发送邮件的地方,可以通过@Autowired注入EmailService,并调用sendEmail方法来发送邮件: ```java @RestController public class MyController { @Autowired private EmailService emailService; @GetMapping("/send-email") public String sendEmail() { emailService.sendEmail("recipient@example.com", "Test Subject", "Test content"); return "Email sent"; } } ``` 以上就是使用Spring Boot发送邮件的完整代码示例。需要注意的是,具体的SMTP服务器配置和邮件内容可以根据实际情况进行修改。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值