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

2、新增邮箱发送工具类
pull/254/head
xjs 3 years ago
parent 8467102c47
commit d752de723e

@ -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>

@ -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;
}

@ -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

@ -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>

@ -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","生哥","这是标题");
}
}
Loading…
Cancel
Save