1.前言
1.我们在开发中经常会碰到Email邮件发送的场景,如注册,找回密码,发送验证码向客户发送邮件、通过邮件发送系统情况,通过邮件发送报表信息等,实际应用场景很多。
2.发送和接收邮件的协议
(1)发送邮件:SMPT 、MIME,是一种基于“推”的协议,通过SMPT协议将邮件发送至邮件服务器,MIME协议是对SMPT协议的一种补充,如发送图片附件等;
(2)接受邮件:POP、IMAP,是一种基于“拉”的协议,收件人通过POP协议从邮件服务器拉去邮件。
3.发送邮件的配置
我们已QQ邮件为例
打开QQ邮箱
点击设置
点击账户
单击“开启”按钮会进入验证过程,根据引导步骤发送短信,验证成功后即可以得到自己QQ邮箱的客户端授权码了
获取授权码之后我们需要在YML或者application里面配置
4.创建一个springBoot项目
4.1导入依赖
spring-boot-starter-mail也是springboot官方的依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
4.2在配置文件里面配置邮箱信息
spring:
mail:
host: smtp.qq.com #发送邮件服务器
username: 2379744205@qq.com #发送邮件的邮箱地址
password: 刚才邮箱客户端给你的授权码,而不是邮箱密码
from: 2379744205@qq.com #发邮件的邮箱
5.发送普通邮件
5.1创建一个MailService类来封装邮件的发送
//SpringBoot 提供了应该发邮件的简单抽象,
// 使用的是下面这个接口,这里直接注入即可使用
@Autowired
private JavaMailSender javaMailSender;
//根据配置文件中自己的QQ邮箱
@Value("${spring.mail.from}")
private String from;
/*
@Param to 收件人
@Param subject 主题
@Param content
*/
//发送普通邮件
public void sendSimpleMail(String to,String subject,String content){
//创建SimpleMailMessage对象
SimpleMailMessage message=new SimpleMailMessage();
//邮件发送
message.setFrom(from);
//邮件接收人,可以同时发给很多人
//message.setTo(string1,string2,string3,string4,);
message.setTo(to);
//邮件主体
message.setSubject(subject);
//邮件内容
message.setText(content);
//通过JavaMailSender类把邮件发送出去
javaMailSender.send(message);
}
我们调用一下这个方法
@Autowired
private MailService mailService;
@Test
public void mail(){
String to="260433540@qq.com";
String subject="主题:普通的邮件 ";
String content="内容:这是一个普通的邮件,祝您生活愉快!";
mailService.sendSimpleMail(to,subject,content);
}
这样就发送成功了
5.2发送HTML样式的邮件
很多时候邮件需要美观的样式,这时候可以使用HTML格式
那么我们就需要使用
JavaMailSender的createMimeMessage();方法了
顾名思义mime:
多用途的网际邮件扩充协议
所以不止于发送HTML类型的邮件
@Autowired
private JavaMailSender javaMailSender;
//根据配置文件中自己的QQ邮箱
@Value("${spring.mail.from}")
private String from;
/*
@Param to 收件人
@Param subject 主题
@Param content
*/
//发送HTML邮件
public void sendHtmlMail(String to,String subject,String content){
//获取MimeMessage
//面向对象的多态,javaMailSender.createMimeMessage(),多用途的网际邮件扩充协议
MimeMessage message=javaMailSender.createMimeMessage();
MimeMessageHelper mimeMessageHelper;
try {
mimeMessageHelper=new MimeMessageHelper(message,true);
//邮件发送人
mimeMessageHelper.setFrom(from);
//邮件接收人
mimeMessageHelper.setTo(to);
//邮件主题
mimeMessageHelper.setSubject(subject);
//邮件内容,HTML格式
mimeMessageHelper.setText(content);
javaMailSender.send(message);
}catch (Exception e){
e.printStackTrace();
}
}
@Test
public void sendMailHtml(){
String to="260433540@qq.com";
String subject="主题:HTML的邮件 ";
String content="<h1>这是一个HTML类型的邮件</h1>";
mailService.sendHtmlMail(to,subject,content);
}
我们测试一下
变成h1格式