Spring配置邮件发送

SpringBoot使用SMTP协议邮件发送。

协议分类

SMTP协议

SMTP的全称是“Simple Mail Transfer Protocol”,即”简单邮件传输协议”。它是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式

POP协议

POP全称是 Post Office Protocol,邮局协议。它定义了邮件客户端软件和POP3邮件服务器的通信规则

IMAP

IMAP全称是 Internet Message Access Protocol,Internet消息访问协议,它是对POP3协议的一种扩展,也是定义了邮件客户端软件和IMAP邮件服务器的通信规则

依赖

1
2
3
4
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>

配置文件

1
2
3
4
5
6
7
8
9
10
11
spring.mail.host=smtp.qq.com
spring.mail.port=25
spring.mail.username=xxxqq.com
spring.mail.from=xxx@qq.com
spring.mail.password=xxxx //授权密码
spring.mail.default-encoding=UTF-8
spring.mail.protocol=smtp
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true
spring.mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory

测试

全局变量
1
2
3
4
5
6
//邮件发送接口
@Resource
private JavaMailSender mailSender;
//发送人昵称
@Value("${spring.mail.username}")
private String nick;
简单邮件
1
2
3
4
5
6
7
8
9
10
11
12
//简单邮件
SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
// 发件人邮箱
simpleMailMessage.setFrom(String.valueOf(new InternetAddress(nick + "<" + "xxx@qq.com" + ">")));
// 收件人
simpleMailMessage.setTo("xxxx@163.com");
simpleMailMessage.setSubject("这是一封测试邮件!!!");
//4.设置邮件内容
String stringBuilder = "SpirngBoot测试邮件HTML";
simpleMailMessage.setText(stringBuilder);
mailSender.send(simpleMailMessage);
System.out.println("邮件发送成功....");

邮件参数

1
2
3
4
5
6
7
8
9
10
11
12
/**
* The "To" (primary) recipients.收件人
*/
public static final RecipientType TO = new RecipientType("To");
/**
* The "Cc" (carbon copy) recipients.抄送人
*/
public static final RecipientType CC = new RecipientType("Cc");
/**
* The "Bcc" (blind carbon copy) recipients.密送人
*/
public static final RecipientType BCC = new RecipientType("Bcc");
HTML格式邮件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
MimeMessage mimeMailMessage = null;
try {
mimeMailMessage = mailSender.createMimeMessage();
//收件人
mimeMailMessage.addRecipients(Message.RecipientType.TO,String.valueOf(new InternetAddress("xxx@163.com")));
//抄送人
mimeMailMessage.addRecipients(Message.RecipientType.CC,String.valueOf(new InternetAddress("xxx@163.com")));
MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMailMessage, true);
//发送人
mimeMessageHelper.setFrom("xxx@qq.com");
//收件人
mimeMessageHelper.setTo("xxx@163.com");
mimeMessageHelper.setSubject("邮件测试");
String sb = "<h1>SpirngBoot测试邮件HTML</h1>" +
"<p style='color:#F00'>你是真的太棒了!</p>" +
"<p style='text-align:right'>右对齐</p>";
mimeMessageHelper.setText(sb, true);
mailSender.send(mimeMailMessage);
} catch (Exception e) {
logger.error("邮件发送失败", e.getMessage());
}
带附件邮件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
MimeMessage mimeMailMessage = null;
try {
mimeMailMessage = javaMailSender.createMimeMessage();
MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMailMessage, true);
mimeMessageHelper.setFrom("xxx@qq.com");
mimeMessageHelper.setTo("xxx@163.com");
mimeMessageHelper.setSubject("邮件测试");
mimeMessageHelper.setText("");
//文件路径
FileSystemResource file = new FileSystemResource(new File("src/main/resources/static/image/mail.png"));
mimeMessageHelper.addAttachment("mail.png", file);
javaMailSender.send(mimeMailMessage);
} catch (Exception e) {
logger.error("邮件发送失败", e.getMessage());
}
带有图片邮件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
MimeMessage mimeMailMessage = null;
try {
mimeMailMessage = mailSender.createMimeMessage();
MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMailMessage, true);
mimeMailMessage.addRecipients(Message.RecipientType.TO,String.valueOf(new InternetAddress("xxx@163.com")));
mimeMailMessage.addRecipients(Message.RecipientType.CC,String.valueOf(new InternetAddress("xxx@163.com")));
mimeMessageHelper.setFrom("xxx@qq.com");
mimeMessageHelper.setTo("xxx@163.com");
mimeMessageHelper.setSubject("邮件测试");
String sb = "<html><body><img src='cid:picture' /></body></html>";
mimeMessageHelper.setText(sb, true);
//文件路径
FileSystemResource file = new FileSystemResource(new File("F:/图片/75afd5dff626dcc229afcf0ca33cc378.jpg"));
mimeMessageHelper.addInline("picture", file);
mailSender.send(mimeMailMessage);
} catch (Exception e) {
log.error("邮件发送失败{}", e.getMessage());
}

多人邮件

1
2
//多次调用此方法
mimeMailMessage.addRecipients(Message.RecipientType.TO,String.valueOf(new InternetAddress("xxx@163.com")));