1、前言
企业中,需要我们对一些数据进行监控,或者将数据导出发给指定的人。简单的通知采用的短信的形式,但是复杂的数据导出给其他人,就会采用邮件的方式。并且这样成本比较低。Spring框架本身提供了Mail的支持,当然目前流行的springboot框架对邮件的支持更加友好。下面以springboot集成Mail为例。
2、引入依赖
<!-- 邮件 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
<scope>provided</scope>
</dependency>
3、yml配置
spring:
# 邮件配置
mail:
host: smtp.163.com
port: 25
username: wsapplyjob@163.com
#邮箱的授权码
password: 自己申请
protocol: smtp #可以不用设置,默认smtp
default-encoding: UTF-8 #可以不用设置,默认UTF-8
properties:
mail:
socketFactory:
class: javax.net.ssl.SSLSocketFactory #https协议认证需要配置
smtp:
#登录服务器是否需要认证
auth: true
# 是对纯文本通信协议的扩展。它提供一种方式将纯文本连接升级为加密连接(TLS或SSL),而不是另外使用一个端口作加密通信。
starttls:
enable: true
required: true
其中protocol和default-encoding可以不配置,因为默认就是smtp和UTF-8,如图:
4、demo
public class ToolController{
@Autowired
JavaMailSenderImpl mailSender;
public void test03() {
SimpleMailMessage message = new SimpleMailMessage();
// 该参数需要设置的与yml中配置的yml一致,否则会报错
message.setFrom("wsapplyjob@163.com");
// 发送到的人,可以直接指定数组,发送多人
message.setTo("wsapplyjob@163.com");
// 邮件主题
message.setSubject("springboot集成Mail");
// 邮件内容
message.setText("测试内容!");
// 发送邮件
mailSender.send(message);
System.out.println("信息发送成功!");
}
}
5、工具类
很多时候我们都是把发送邮件作为一个工具类,不需要注入任何Bean,可以做成以下配置:
@Test
public void test03() {
JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
mailSender.setHost("smtp.autostreets.com");
mailSender.setProtocol("smtp");
mailSender.setPort(25);
mailSender.setUsername("wsapplyjob@163.com");
mailSender.setPassword("****");
Properties properties = new Properties();
properties.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
properties.setProperty("mail.smtp.auth", "true");
properties.setProperty("mail.smtp.starttls.enable", "true");
properties.setProperty("mail.smtp.starttls.required", "true");
mailSender.setJavaMailProperties(properties);
SimpleMailMessage message = new SimpleMailMessage();
message.setFrom("wsapplyjob@163.com");
//String[] toArray = {"123@163.com","456@163.com", "789@163.com","666@163.com"};
//message.setTo(toArray);
message.setTo("wsapplyjob@163.com");
message.setSubject("Springboot集成Mail");
message.setText("邮件内容测试");
mailSender.send(message);
System.out.println("信息发送成功!");
}
方法中有很多常量,封装是可以抽成常量。
6、附件或者模板发送
简单信息的发送是使用 SimpleMailMessage 为载体,附件则需要 MimeMessage 和 MimeMessageHelper这两个类来作为载体。
MimeMessageHelper 用于创建MIME消息的帮助类。它为HTML布局中的图像,典型邮件附件和文本内容提供支持。
发送html模板:
MimeMessage message =mailSender.createMimeMessage();
// 注意构造参数为一个值
MimeMessageHelper helper = new MimeMessageHelper(message);
helper.setFrom("wsapplyjob@163.com");
helper.setTo("wsapplyjob@163.com");
helper.setSubject("发送HTML");
// 第二个参数为支持html
helper.setText(html, true);
mailSender.send(message);
System.out.println("信息发送成功!");
源代码:
发送附件:
MimeMessage message =mailSender.createMimeMessage();
// 第二个参数表示是否添加附件
MimeMessageHelper helper = new MimeMessageHelper(message,true);
helper.setFrom("wsapplyjob@163.com");
helper.setTo("wsapplyjob@163.com");
helper.setSubject("发送附件");
helper.setText("测试附件");
File file = new File("E:\\Sample Pictures\\美图1.jpg");
// 添加附件
helper.addAttachment("图片", file);
mailSender.send(message);
System.out.println("信息发送成功!");
参数说明: