diff --git a/xjs-business/xjs-business-warning/pom.xml b/xjs-business/xjs-business-warning/pom.xml index 041a5de9..77c05298 100644 --- a/xjs-business/xjs-business-warning/pom.xml +++ b/xjs-business/xjs-business-warning/pom.xml @@ -28,6 +28,17 @@ org.springframework.boot spring-boot-starter-websocket + + + + org.springframework.boot + spring-boot-starter-mail + + + + org.springframework.boot + spring-boot-starter-thymeleaf + - \ No newline at end of file + diff --git a/xjs-business/xjs-business-warning/src/main/java/com/xjs/domain/mall/MailBean.java b/xjs-business/xjs-business-warning/src/main/java/com/xjs/domain/mall/MailBean.java new file mode 100644 index 00000000..afaef82a --- /dev/null +++ b/xjs-business/xjs-business-warning/src/main/java/com/xjs/domain/mall/MailBean.java @@ -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; + +} diff --git a/xjs-business/xjs-business-warning/src/main/java/com/xjs/server/MailServer.java b/xjs-business/xjs-business-warning/src/main/java/com/xjs/server/MailServer.java new file mode 100644 index 00000000..1530a7bf --- /dev/null +++ b/xjs-business/xjs-business-warning/src/main/java/com/xjs/server/MailServer.java @@ -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")) + //添加多个图片可以使用多条 和 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); + } + + +} diff --git a/xjs-business/xjs-business-warning/src/main/resources/static/images/i.png b/xjs-business/xjs-business-warning/src/main/resources/static/images/i.png new file mode 100644 index 00000000..d739ddc4 Binary files /dev/null and b/xjs-business/xjs-business-warning/src/main/resources/static/images/i.png differ diff --git a/xjs-business/xjs-business-warning/src/main/resources/templates/email.html b/xjs-business/xjs-business-warning/src/main/resources/templates/email.html new file mode 100644 index 00000000..fe7c03db --- /dev/null +++ b/xjs-business/xjs-business-warning/src/main/resources/templates/email.html @@ -0,0 +1,12 @@ + + + + + Title + + +


+ 您有代金券即将到期,逾期失效,请尽早使用。点此查看 +
+ + diff --git a/xjs-business/xjs-business-warning/src/test/java/com/xjs/server/MailServerTest.java b/xjs-business/xjs-business-warning/src/test/java/com/xjs/server/MailServerTest.java new file mode 100644 index 00000000..d8c6adbd --- /dev/null +++ b/xjs-business/xjs-business-warning/src/test/java/com/xjs/server/MailServerTest.java @@ -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","生哥","这是标题"); + } +}