Java Mail
Java EE,Java平台企业版(Java Platform Enterprise Edition),之前称为Java 2 Platform, Enterprise Edition (J2EE),2018年3月更名为Jakarta EE。是Sun公司为企业级应用推出的标准平台。Java平台共分为三个主要版本Java EE、Java SE和Java ME。
Java 8 及以前使用 javax.mail
, Java 9 及以后使用 jakarta.mail
。Java Servlet API 也有这样的变化。
JavaMail API
1
2
|
// https://mvnrepository.com/artifact/javax.mail/javax.mail-api
implementation 'javax.mail:javax.mail-api:1.6.2'
|
Jakarta Mail API 2.1 Specification API
1
2
|
// https://mvnrepository.com/artifact/jakarta.mail/jakarta.mail-api
implementation 'jakarta.mail:jakarta.mail-api:2.1.0'
|
spring-boot-starter-mail
JavaMailSender
1
2
3
4
5
6
7
8
9
10
11
|
plugins {
id "org.springframework.boot.starter"
}
description = "Starter for using Java Mail and Spring Framework's email sending support"
dependencies {
api(project(":spring-boot-project:spring-boot-starters:spring-boot-starter"))
api("org.springframework:spring-context-support")
api("com.sun.mail:jakarta.mail")
}
|
阿里云邮件推送 SDK 方式
1
2
3
4
5
6
7
8
9
10
11
|
<!-- 阿里云产品核心库 -->
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>darabonba-java-core</artifactId>
<version>0.1.5-beta</version>
</dependency><!-- 阿里邮件推送 SDK -->
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>alibabacloud-dm20151123</artifactId>
<version>1.0.5</version>
</dependency>
|
阿里云邮件开启 SMTP 发信功能
您需要先开启 SMTP 发信功能才能通过 SMTP 接口发送邮件。
- 登录 邮件推送控制台。
- 单击左侧导航栏中 发信地址,进入发信地址页面。
- 在发信地址列表中,找到您要开启 SMTP 发信功能的发信地址,在对应的操作栏中单击 设置 SMTP 密码。
- 在弹出对话框中填写 SMTP 密码,然后单击 确定。
1
2
3
4
|
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
|
1
2
3
4
5
6
|
spring:
mail:
host: smtpdm.aliyun.com
port: 80
username: noreply@ynthm.com
password: xxxxxxxx
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
|
@Slf4j
@Component
public class JavaMailUtil {
private final MailProperties mailProperties;
private final JavaMailSender mailSender;
public JavaMailUtil(MailProperties mailProperties, JavaMailSender mailSender) {
this.mailProperties = mailProperties;
this.mailSender = mailSender;
}
/**
* 发送纯文本形式的 email
*
* @param simpleMailMessage 简单邮件消息
*/
public void sendTextMail(SimpleMailMessage simpleMailMessage) {
simpleMailMessage.setFrom(mailProperties.getUsername());
simpleMailMessage.setSentDate(new Date());
mailSender.send(simpleMailMessage);
}
/**
* 发送带有html的内容
*
* @param req 邮件消息
*/
public void sendHtmlMail(SendAttachedMailReq req) {
MimeMessage msg = mailSender.createMimeMessage();
MimeMessageHelper helper;
try {
helper = new MimeMessageHelper(msg, req.isMultipart(), StandardCharsets.UTF_8.name());
// 邮件发件人
helper.setFrom(mailProperties.getUsername());
helper.setTo(req.getTo().toArray(new String[req.getTo().size()]));
helper.setSubject(req.getSubject());
helper.setText(req.getContent(), req.isHtml());
if (req.isMultipart()) {
List<MultipartFile> attachmentFileList = req.getAttachmentFileList();
if (Objects.nonNull(attachmentFileList)) {
for (MultipartFile multipartFile : attachmentFileList) {
String originalFilename = multipartFile.getOriginalFilename();
if (Objects.nonNull(originalFilename)) {
helper.addAttachment(originalFilename, multipartFile);
}
}
}
}
mailSender.send(msg);
} catch (MessagingException e) {
throw new BaseException(InfraResultCode.S_INFRA_ERROR);
}
}
}
@Data
public class SendAttachedMailReq {
/** 收件人地址 */
@NotEmpty private List<@Email String> to;
/** 抄送地址 */
private List<@Email String> cc;
/** 暗送地址 */
private List<@Email String> bcc;
/** 回复地址 */
@Email private String replyTo;
/** 主题 标题 */
@NotBlank private String subject;
@NotNull private boolean html = true;
/** 类容 */
@NotBlank private String content;
@NotNull private boolean multipart = false;
/** 附件列表 */
private List<MultipartFile> attachmentFileList;
}
|
附录