一、pom.xml导入相关依赖
二、实体类
首先需要创建实体类。其中的get,set方法省略。唯一需要注意的一点是password不是登录密码,是开启POP3之后设置的客户端授权码 。下面的配置邮箱会提到。
三、相关邮箱配置
163邮箱配置
spring.mail.host=smtp.163.com #邮箱服务器地址
spring.mail.username=xxx.163.com #用户名
spring.mail.password=ooo #开启POP3之后设置的客户端授权码
spring.mail.default-encoding=UTF-8 #编码
QQ邮箱配置
spring.mail.host=smtp.qq.com
spring.mail.username=xxx@qq.com
spring.mail.password=ooo #开启POP3之后设置的客户端授权码
spring.mail.default-encoding=UTF-8
注意点:
1、这里的password不是登录密码,是开启POP3之后设置的客户端授权码
2、 默认端口25,使用465端口时,需要添加配置:
spring.mail.port=465
spring.mail.properties.mail.smtp.ssl.enable=true
四、Controller层
五、工具类
通过包装一个邮件工具类来测试发送邮件是否成功操作。
解释:
1、ISysNoticeEmailConfigService
这个是通过mybatis-plus实体生成工具生成的service层,通过@Autowired注解注入属性值。
2、用getone()方法来获取对象数据。
以下是简单的工具类代码实现:
@Slf4j
@Component
public class EmailUtil {
private static JavaMailSenderImpl mailSender;
@Autowired
private ISysNoticeEmailConfigService sysNoticeEmailConfigService;
/**
* 初始化java工具发送类
*/
public void init() {
SysNoticeEmailConfig sysNoticeEmailConfig = sysNoticeEmailConfigService.getOne(null);
if (sysNoticeEmailConfig == null) {
log.error("init 没有找到对应的邮件配置");
}
mailSender = new JavaMailSenderImpl();
mailSender.setHost(sysNoticeEmailConfig.getHost());
mailSender.setPort(465);
mailSender.setUsername(sysNoticeEmailConfig.getUsername());
mailSender.setPassword(sysNoticeEmailConfig.getPassword());
//加认证机制
Properties javaMailProperties = new Properties();
javaMailProperties.put("mail.smtp.auth", true);
javaMailProperties.put("mail.smtp.starttls.enable", true);
javaMailProperties.put("mail.smtp.timeout", 5000);
javaMailProperties.put("mail.smtp.socketFactory.port", 465);
javaMailProperties.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
javaMailProperties.put("mail.smtp.socketFactory.fallback", false);
javaMailProperties.put("mail.smtp.starttls.required", true);
mailSender.setJavaMailProperties(javaMailProperties);
log.info("初始化邮件发送信息完成");
}
public boolean testMailSend(SysNoticeEmailConfig sysNoticeEmailConfig) {
try {
mailSender = new JavaMailSenderImpl();
mailSender.setHost(sysNoticeEmailConfig.getHost());
mailSender.setPort(465);
mailSender.setUsername(sysNoticeEmailConfig.getUsername());
mailSender.setPassword(sysNoticeEmailConfig.getPassword());
//加认证机制
Properties javaMailProperties = new Properties();
javaMailProperties.put("mail.smtp.auth", true);
javaMailProperties.put("mail.smtp.starttls.enable", true);
javaMailProperties.put("mail.smtp.timeout", 5000);
javaMailProperties.put("mail.smtp.socketFactory.port", 465);
javaMailProperties.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
javaMailProperties.put("mail.smtp.socketFactory.fallback", false);
javaMailProperties.put("mail.smtp.starttls.required", true);
mailSender.setJavaMailProperties(javaMailProperties);
if (mailSender == null) {
init();
}
simpleMailSend(sysNoticeEmailConfig.getTestEmail(), "邮件测试", "邮件测试");
} catch (Exception e) {
e.printStackTrace();
return false;
}
return true;
}
/**
* 发送普通文本
*
* @param email 对方邮箱地址
* @param subject 主题
* @param text 邮件内容
*/
public void simpleMailSend(String email, String subject, String text) {
//创建邮件内容
SimpleMailMessage message = new SimpleMailMessage();
message.setFrom(mailSender.getUsername());
message.setTo(email);
message.setSubject(subject);
message.setText(text);
//发送邮件
mailSender.send(message);
log.info("邮件发送成功");
}
/**
* @param template 模版
* @param noticeForm 接收人信息
* @param sysNoticeAnnexList 附件信息
* @throws MessagingException
*/
public boolean attachedSend(SysNoticeTemplate template, NoticeForm noticeForm, List<SysNoticeAnnex> sysNoticeAnnexList) {
try {
SysNoticeTaskRecipient recipient = noticeForm.getSysNoticeTaskRecipient();
MimeMessage message = mailSender.createMimeMessage();
//创建MimeMessageHelper对象,处理MimeMessage的辅助类
MimeMessageHelper helper = new MimeMessageHelper(message, true);
//使用辅助类MimeMessage设定参数
helper.setFrom(mailSender.getUsername());
helper.setTo(recipient.getUserEmail());
helper.setSubject(template.getNoticeTitle());
helper.setText(template.getNoticeContent());
//查看邮件是否有文件附件
if (!CollectionUtils.isEmpty(sysNoticeAnnexList)) {
for (SysNoticeAnnex sysNoticeAnnex : sysNoticeAnnexList) {
FileSystemResource file = new FileSystemResource(sysNoticeAnnex.getAnnexPath());
helper.addAttachment(sysNoticeAnnex.getAnnexName(), file);
}
}
//发送邮件
if (mailSender == null) {
this.init();
}
mailSender.send(message);
return true;
} catch (Exception e) {
e.printStackTrace();
log.info("邮件发送失败,请检查");
return false;
}
}
}