最近项目准备进入测试阶段,时间相对充沛些,便对邮箱的信息发送记录下!
邮箱设置-开启smtp协议及获取授权码
以QQ邮箱为例,其他邮箱大同小异!
开启协议
获取授权码
具体代码
基于javax.mail实现
原文可看 前辈帖子
pom.xml
<!-- 邮件 -->
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<version >1.5.4 </version >
</dependency>
EmailVO.java类(前端上送参数)
package com.example.demo.vo;
import lombok.Data;
import java.util.List;
/**
* @Auther: lr
* @Date: 2024/6/12 16:14
* @Description:
*/
@Data
public class EmailVO {
private String content; //正文
private String subject; //主题
private List<String> toEmailPerson; //收件人
private List<String> ccMail; //抄送人
private List<String> bccMail; //密送人
private List<String> fileNames; //附件
}
EmailPropertiesConstant常量信息(一般会在系统设置中配置)
package com.example.demo.constant;
import lombok.Data;
/**
* @Auther: lr
* @Date: 2024/6/12 17:11
* @Description:
*/
@Data
public class EmailPropertiesConstant {
// 发件人smtp邮箱服务地址
private String emailSmtpHost = "smtp.qq.com";
// 发件人smtp端口
private String emailSmtpPort = "25";
// 开启TLS加密
private String emailSmtpIsneedssl = "1";
// 开启验证
private String emailSmtpIsneedauth = "1";
// 发件人邮箱地址
private String userName = "[email protected]";
// smtp邮箱授权码
private String userPassword = "xxx";
// 发件人昵称
private String userNicky = "测试人";
// 邮箱开关状态 0关闭 1开启
private String status = "1";
}
EmailUtil类(发送邮件)
package com.example.demo.util;
import com.example.demo.constant.EmailPropertiesConstant;
import com.example.demo.vo.EmailVO;
import com.sun.mail.util.MailSSLSocketFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.util.CollectionUtils;
import javax.activation.FileDataSource;
import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Date;
import java.util.HashMap;
import java.util.Properties;
/**
* @Auther: lr
* @Date: 2024/6/13 10:38
* @Description:
*/
public class EmailUtil {
private static final Logger logger = LoggerFactory.getLogger(EmailUtil.class);
/**
* 发送邮件
* @param emailPropertiesConstant 系统信息配置
* @param emailVO 邮件信息
* @return
*/
public static HashMap<String, Object> sendEmail(EmailPropertiesConstant emailPropertiesConstant,
EmailVO emailVO) {
HashMap<String, Object> resultMap = new HashMap<>();
if ("0".equals(emailPropertiesConstant.getStatus())) {
logger.error("邮箱未开启");
resultMap.put("code", 500);
resultMap.put("message", "邮箱未开启!");
return resultMap;
}
if (CollectionUtils.isEmpty(emailVO.getToEmailPerson())) {
logger.error("邮件收件人为空");
resultMap.put("code", 500);
resultMap.put("message", "邮件收件人为空!");
return resultMap;
}
try {
// 设置参数
Properties properties = System.getProperties();
// smtp服务地址
properties.put("mail.smtp.host", emai