我们平时经常会碰到email邮件发送的场景 如发送验证码,向客户发送邮件等等。
springboot中 整合了mail帮助我们更方便的发送邮件
平时我们发送邮件是通过 邮件的服务器发送出去的 比如qq邮件调用qq的邮件服务器 网易的邮件通过网易的服务器 我们使用邮件服务器发送邮件需要提前配置一些内容
我要以使用qq邮箱服务器发送邮件为例
我们登录qq邮箱 点击设置
进来之后点击账户
下拉 找到开启服务
发送一条短信之后即可开启 然后我们点击黄色框中的生成授权码 会给我们生成一个授权码 一会我们需要使用到这个授权码
复制记录好授权码
我们创建一个springboot工程
导入发送邮件的依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
然后我们编写配置文件 ssl的加密记得要配置 别删除
spring.mail.username=qq账号@qq.com
spring.mail.password=刚刚的授权码
#注解地址
spring.mail.host=smtp.qq.com
# 配置邮件编码
spring.mail.default-encoding=UTF-8
#开启ssl
#spring.mail.properties.mail.smtp.ssl.enable=true
# 配饰 SSL 加密工厂
spring.mail.properties.mail.smtp.socketFactoryClass=javax.net.ssl.SSLSocketFactory
# 表示开启 DEBUG 模式
spring.mail.properties.mail.debug=true
编写一个测试类
注入发送邮件的对象 这个是MailAutoConfiguration中配置好的
@SpringBootTest
class Springboot04TaskApplicationTests {
@Autowired
JavaMailSenderImpl javaMailSender;
}
发送普通邮件 编写一个测试方法
@Test
void contextLoads() {
SimpleMailMessage message = new SimpleMailMessage();
//邮件设置 设置标题
message.setSubject("通知--放假七天");
//设置内容
message.setText("今天开始放假放七天");
//发给谁
message.setTo("对方的qq@qq.com");
//谁发的
message.setFrom("你的qq要和配置文件中的一致@qq.com");
//发送
javaMailSender.send(message);
}
发送测试
我们看到很多文件带有附件 图片或者文档等等 我们测试如何发送带附件的邮件
发送带附件的邮件 需要使用MimeMessage对象 但这个对象无法直接操作消息
我们需要另一个类帮助
MimeMessageHelper
@Test
public void test02(){
//创建复杂的消息
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
//参数 参数一是 mimeMessage 参数二是 是否上传文件 布尔值
try {
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage,true);
helper.setSubject("今天开学");
//Text兼容html片段 参数二 表示当前是否是html标签
helper.setText("<b style='color:red'>今天开学啦!!</b>",true);
//上传文件 参数文件名 参数二 文件位置 或一个流
helper.addAttachment("bird.jpg",new File("C:\\Users\\Desktop\\v2-ae4216ed7f423bee2cc037198639dfda_r.jpg"));
helper.setTo("对方@qq.com");
helper.setFrom("你的qq@qq.com");
javaMailSender.send(mimeMessage);
} catch (MessagingException e) {
e.printStackTrace();
}
}
测试发送