1.添加pom 依赖
<!-- 邮件依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
2.设置配置文件
在spring 配置 标签下添加
# 邮箱配置
mail:
host: smtp.qq.com
#f发送人邮箱
username: 123456@qq.com
#邮箱授权码
password: nvjdjdjkfkd
properties:
mail:
smtp:
socketFactory:
class: javax.net.ssl.SSLSocketFactory
port: 465
ssl:
trust: smtp.qq.com
auth: true
starttls:
enable: true
required: true
form: ${spring.mail.username}
3.邮件 实体类
public class PxEmail extends BaseEntity {
private static final long serialVersionUID = 1L;
/** 主键ID */
private Long id;
/** 发送者ID */
@Excel(name = "发送者ID")
private Long sendId;
/** 收件人ID */
@Excel(name = "收件人ID")
private Long receiverId;
/** 收件人邮箱 */
@Excel(name = "收件人邮箱")
private String receiverEmail;
/** 抄送人id,多个用逗号分隔 */
@Excel(name = "抄送人id,多个用逗号分隔")
private Long ccId;
/** 抄送人邮箱,多个用逗号分隔 */
@Excel(name = "抄送人邮箱,多个用逗号分隔")
private String ccEmail;
/** 邮件主题 */
@Excel(name = "邮件主题")
private String subject;
/** 邮件内容 */
@Excel(name = "邮件内容")
private String content;
/** 版本号 */
@Excel(name = "版本号")
private String version;
}
4.发送邮件 java 代码
/**
* 发送邮件 方法
* @param receiverEmail 收件人邮箱
* @param subject 邮件标题
* @param content 邮件内容
* @throws Exception
*/
public void sendEail(String receiverEmail,String subject,String content) throws Exception {
PxEmail email = new PxEmail();
email.setReceiverEmail(receiverEmail);
email.setSubject(subject);
email.setContent(content);
String[] to = validEmail(email.getReceiverEmail());
if (to != null && to.length > 0) {
try {
SimpleMailMessage message = new SimpleMailMessage();
message.setTo(to);
if (StringUtils.isNotEmpty(email.getCcEmail())) {
message.setCc(Objects.requireNonNull(validEmail(email.getCcEmail())));
}
message.setSubject(email.getSubject());
message.setText(email.getContent());
message.setFrom(from);
javaMailSender.send(message);
} catch (Exception e) {
invalidAddress(email, e);
sendSimpleMail(email);
e.printStackTrace();
}
}
}
5.发送邮件 java 代码 用到的工具方法
public void sendSimpleMail(PxEmail email) throws Exception {
String[] to = validEmail(email.getReceiverEmail());
if (to != null && to.length > 0) {
try {
SimpleMailMessage message = new SimpleMailMessage();
message.setTo(to);
if (StringUtils.isNotEmpty(email.getCcEmail())) {
message.setCc(Objects.requireNonNull(validEmail(email.getCcEmail())));
}
message.setSubject(email.getSubject());
message.setText(email.getContent());
message.setFrom(from);
javaMailSender.send(message);
} catch (Exception e) {
invalidAddress(email, e);
sendSimpleMail(email);
e.printStackTrace();
}
}
}
private String[] validEmail(String emails) {
if (StringUtils.isNotBlank(emails)) {
return Arrays.stream(emails.split(","))
.filter(this::isEmail)
.distinct()
.toArray(String[]::new);
}
return null;
}
private Boolean isEmail(String email) {
String regEx1 = "^([a-z0-9A-Z]+[-|.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$";
return Pattern.compile(regEx1).matcher(email.trim()).matches();
}
private void invalidAddress(PxEmail dto, Throwable e) throws Exception {
String s = getInvalidAddresses(e);
if (StringUtils.isNotBlank(s)) {
List<String> list = Arrays.asList(dto.getReceiverEmail().split(","));
StringBuffer sb = new StringBuffer();
list.stream().forEach(s1 -> {
if (!s.contains(s1)) {
sb.append(s1 + ",");
}
});
dto.setReceiverEmail(sb.toString());
} else {
throw new Exception();
}
}
private static String getInvalidAddresses(Throwable e) {
if (e == null) {
return null;
}
if (e instanceof MailSendException) {
for (Exception exception : ((MailSendException) e).getMessageExceptions()) {
if (exception instanceof SendFailedException) {
return getStringAddress(((SendFailedException) exception).getInvalidAddresses());
}
}
}
if (e instanceof SendFailedException) {
return getStringAddress(((SendFailedException) e).getInvalidAddresses());
}
return null;
}
private static String getStringAddress(Address[] address) {
List<String> invalid = new ArrayList<>();
for (Address a : address) {
String aa = ((InternetAddress) a).getAddress();
if (!StringUtils.isEmpty(aa)) {
invalid.add(aa);
}
}
return invalid.stream().distinct().collect(Collectors.joining(","));
}