1、预警服务引入邮箱功能

2、新增邮箱发送工具类
This commit is contained in:
xjs 2022-04-13 01:49:01 +08:00
parent 8467102c47
commit d752de723e
6 changed files with 268 additions and 1 deletions

View File

@ -28,6 +28,17 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
<!--邮箱发送-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<!--邮箱发送静态模板-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
</dependencies>
</project>
</project>

View File

@ -0,0 +1,36 @@
package com.xjs.domain.mall;
import lombok.Data;
import java.io.Serializable;
/**
* 邮箱发送实体
*
* @author xiejs
* @since 2022-04-13
*/
@Data
public class MailBean implements Serializable {
private static final long serialVersionUID = -2116367492649751914L;
/**
* 邮件接收人
*/
private String recipient;
/**
* 邮件主题
*/
private String subject;
/**
* 邮件内容
*/
private String content;
/**
* 附件地址
*/
private String absolutePath;
}

View File

@ -0,0 +1,167 @@
package com.xjs.server;
import com.xjs.domain.mall.MailBean;
import lombok.extern.log4j.Log4j2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Component;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context;
import javax.annotation.Resource;
import javax.mail.internet.MimeMessage;
import java.io.File;
/**
* 邮箱发送工具
*
* @author xiejs
* @since 2022-04-13
*/
@Component
@Log4j2
public class MailServer {
@Value("${spring.mail.username}")
//邮件发送者
private String MAIL_SENDER;
@Resource
private JavaMailSender javaMailSender;
@Autowired
private TemplateEngine templateEngine;
// todo 优化 邮箱发送失败重试机制防止邮件被识别为垃圾邮件固定时间内发送邮件的限制等
/**
* 发送文本邮件
*
* @param mailBean 邮箱实体
*/
public void sendSimpleMail(MailBean mailBean) {
try {
SimpleMailMessage mailMessage = new SimpleMailMessage();
mailMessage.setFrom(MAIL_SENDER);
mailMessage.setTo(mailBean.getRecipient());
mailMessage.setSubject(mailBean.getSubject());
mailMessage.setText(mailBean.getContent());
javaMailSender.send(mailMessage);
} catch (Exception e) {
log.error("文本邮件发送失败:{}", e.getMessage());
}
}
/**
* 发送HTML格式邮件
*
* @param mailBean 邮箱实体
*/
public void sendHTMLMail(MailBean mailBean) {
MimeMessage mimeMailMessage = null;
try {
mimeMailMessage = javaMailSender.createMimeMessage();
//true 表示需要创建一个multipart message
MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMailMessage, true);
mimeMessageHelper.setFrom(MAIL_SENDER);
mimeMessageHelper.setTo(mailBean.getRecipient());
mimeMessageHelper.setSubject(mailBean.getSubject());
//邮件抄送
//mimeMessageHelper.addCc("抄送人");
mimeMessageHelper.setText(mailBean.getContent(), true);
javaMailSender.send(mimeMailMessage);
} catch (Exception e) {
log.error("HTML格式邮件发送失败:{}", e.getMessage());
}
}
/**
* 附件格式邮件发送
*
* @param mailBean 邮箱实体
*/
public void sendAttachmentMail(MailBean mailBean) {
MimeMessage mimeMailMessage = null;
try {
mimeMailMessage = javaMailSender.createMimeMessage();
//true 表示需要创建一个multipart message
MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMailMessage, true);
mimeMessageHelper.setFrom(MAIL_SENDER);
mimeMessageHelper.setTo(mailBean.getRecipient());
mimeMessageHelper.setSubject(mailBean.getSubject());
mimeMessageHelper.setText(mailBean.getContent());
//文件路径 目前写死在代码中之后可以当参数传过来或者在MailBean中添加属性absolutePath
FileSystemResource file = new FileSystemResource(new File(mailBean.getAbsolutePath()));
//FileSystemResource file = new FileSystemResource(new File("src/main/resources/static/image/email.png"));
String fileName = mailBean.getAbsolutePath().substring(mailBean.getAbsolutePath().lastIndexOf(File.separator));
//添加附件,第一个参数表示添加到 Email 中附件的名称第二个参数是图片资源
mimeMessageHelper.addAttachment(fileName, file);
//多个附件
//mimeMessageHelper.addAttachment(fileName1, file1);
javaMailSender.send(mimeMailMessage);
} catch (Exception e) {
log.error("附件格式邮件发送失败:{}", e.getMessage());
}
}
/**
* 静态资源格式邮件发送
*
* @param mailBean 邮箱实体
*/
public void sendInlineMail(MailBean mailBean) {
MimeMessage mimeMailMessage = null;
try {
mimeMailMessage = javaMailSender.createMimeMessage();
MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMailMessage, true);
mimeMessageHelper.setFrom(MAIL_SENDER);
mimeMessageHelper.setTo(mailBean.getRecipient());
mimeMessageHelper.setSubject(mailBean.getSubject());
mimeMessageHelper.setText(mailBean.getContent(), true);
//文件路径
FileSystemResource file = new FileSystemResource(new File(mailBean.getAbsolutePath()));
//FileSystemResource file = new FileSystemResource(new File("src/main/resources/static/image/email.png"))
//添加多个图片可以使用多条 <img src='cid:" + rscId + "' > mimeMessageHelper.addInline(rscId, res) 来实现
mimeMessageHelper.addInline("picture", file);
javaMailSender.send(mimeMailMessage);
} catch (Exception e) {
log.error("静态资源格式邮件发送失败:{}", e.getMessage());
}
}
/**
* 发送Thymeleaf模版邮件
*
* @param recipient 接受者邮箱
* @param name 用户名称
* @param title 主体
*/
public void sendTempLateMail(String recipient, String name, String title) {
//注意Context 类是在org.thymeleaf.context.Context包下的
Context context = new Context();
//html中填充动态属性值
context.setVariable("username", name);
context.setVariable("url", "#");
//注意process第一个参数名称要和templates下的模板名称一致要不然会报错
//org.thymeleaf.exceptions.TemplateInputException: Error resolving template [email]
String emailContent = templateEngine.process("email", context);
MailBean mailBean = new MailBean();
mailBean.setRecipient(recipient);
mailBean.setSubject(title);
mailBean.setContent(emailContent);
this.sendHTMLMail(mailBean);
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 993 B

View File

@ -0,0 +1,12 @@
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h3 th:text="|尊敬的${username} :|"></h3><br />
<img th:src="@{images/i.png}" /> 您有代金券即将到期,逾期失效,请尽早使用。<a th:href = "${url}" >点此查看</a>
<br />
</body>
</html>

View File

@ -0,0 +1,41 @@
package com.xjs.server;
import com.xjs.XjsWarningApp;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import static org.junit.jupiter.api.Assertions.*;
/**
* @author xiejs
* @since 2022-04-13
*/
@SpringBootTest(classes = XjsWarningApp.class)
class MailServerTest {
@Autowired
private MailServer mailServer;
@Test
void sendSimpleMail() {
}
@Test
void sendHTMLMail() {
}
@Test
void sendAttachmentMail() {
}
@Test
void sendInlineMail() {
}
@Test
void sendTempLateMail() {
mailServer.sendTempLateMail("1294405880@qq.com","生哥","这是标题");
}
}