源码地址:https://gitee.com/lxc_5952/email-demo.git
1. 邮件介绍
1.1 邮件的作用
邮件在项目中会经常用到,例如:注册,验证,找回密码,登录,信息通知
1.2 邮件协议
- SMTP协议:
SMTP全称为Simple Mail Transfer Protocol(简单邮件传输协议),它是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式。SMTP认证要求必须提供账号和密码才能登陆服务器,其设计目的在于避免用户受到垃圾邮件的侵扰。 - IMAP协议 :
IMAP全称为Internet Message Access Protocol(互联网邮件访问协议),IMAP允许从邮件服务器上获取邮件的信息、下载邮件等。IMAP与POP类似,都是一种邮件获取协议。 - POP3:
POP3全称为Post Office Protocol 3(邮局协议),POP3支持客户端远程管理服务器端的邮件。POP3常用于“离线”邮件处理,即允许客户端下载服务器邮件,然后服务器上的邮件将会被删除。目前很多POP3的邮件服务器只提供下载邮件功能,服务器本身并不删除邮件,这种属于改进版的POP3协议。
2. SpringBoot实现发送邮件
2.1 Spring集成了Mail邮件发送功能
Spring官方推出了一款关于Mail的JavaMailSender类,基于SpringBoot进一步封装,轻松实现邮件发送–开箱即用
而且JavaMailSender类提供了强大的邮件发送功能,支持各种邮件的发送
2.2 集成步骤
2.2.1 添加依赖
SpringBoot集成了Mail功能,只需要添加:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
2.2.2 获取邮箱服务器名,邮箱授权码
这里使用QQ邮箱
1. 获取邮箱服务器
POP3服务器地址为“pop.qq.com”,SMTP服务器地址为“smtp.qq.com”
注:
- SMTP服务器需要身份验证。
- 如果是设置POP3和SMTP的SSL加密方式,则端口如下:
2.1. POP3服务器(端口995);
2.2. SMTP服务器(端口465或587)。
2. 获取邮箱授权码
打开QQ邮箱并登录
- 点击邮箱设置->账户
- 打开POP3服务,或者IMAP服务,得到授权码
2.2.3 编辑配置文件
在application.yml/properties文件中编辑mail配置
spring:
application:
name: email-server
mail:
host: pop.qq.com #pop邮箱服务器地址
username: 872XXX033@qq.com #邮箱登录账户
password: ywaXXXXXXXXXfbi #邮箱密码/邮箱授权码
properties:
from: 872XXX033@qq.com #邮件发信人,真实邮箱地址
2.2.4 编辑邮箱Controller层
1. 注入Service层对象实现业务调用
2. 添加请求方法
可上传附件(MultipartFile),这里使用String对象接收需要发送到的邮箱地址
2.2.5 编辑Service层
1. 注入邮件工具类
@Autowired
private JavaMailSenderImpl mailSender; //邮件工具类
通过mailSender.send(mail对象)发送邮件
2. 编辑简单的Mail对象
public String sendMail(String mail) {
public String sendMail(String mail) {
try {
//简单的邮件信息(复杂邮件信息使用MimeMessageHelper对象)
SimpleMailMessage msg = new SimpleMailMessage();
msg.setFrom("872XXX033@qq.com");//邮件发信人,可从配置文件获取
msg.setTo(mail);//邮件收信人
msg.setSubject("验证码");//邮件主题
//创建一个6位数随机数
String s = String.valueOf((int) ((Math.random() * 9 + 1) * 100000));
msg.setText(s);//邮件内容
mailSender.send(msg);//发送邮件
return "send ok";
} catch(Exception e){
return "send fild";//发送失败
}
}
3. 编辑复杂的mail对象(选1)
private String sendMimeMail(String mail) {
try {
//创建MimeMessageHelper信息对象,true表⽰⽀持复杂类型
MimeMessageHelper messageHelper =
new MimeMessageHelper(mailSender.createMimeMessage(), true);
messageHelper.setFrom("872XXX033@qq.com"); //邮件发信⼈
messageHelper.setTo(mail); //邮件收信⼈
messageHelper.setSubject("验证码"); //邮件主题
String s = String.valueOf((int)((Math.random() * 9 + 1) * 100000));
messageHelper.setText(s); //邮件内容,6位数随机数
mailSender.send(messageHelper.getMimeMessage()); //正式发送邮件
log.info("发送邮件成功");
return "send ok";
} catch (Exception e) {
return "send fail";
//throw new RuntimeException(e); //发送失败
}
}
MimeMessageHelper 常用方法
- setFrom(): 邮件发信人
- setTo(): 邮件收信人
- setSubject(): 邮件主题
- setText(): 邮件内容
- setCc(): 邮件抄送/密送
- addAttachment():邮件附件,参数附件名称,附件File对象
- setSentDate():发信时间,客户端显示的发信时间,参数Data对象