From d752de723e7a748e5c8c2761df6da15a3a846535 Mon Sep 17 00:00:00 2001 From: xjs <1294405880@qq.com> Date: Wed, 13 Apr 2022 01:49:01 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E9=A2=84=E8=AD=A6=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E5=BC=95=E5=85=A5=E9=82=AE=E7=AE=B1=E5=8A=9F=E8=83=BD=202?= =?UTF-8?q?=E3=80=81=E6=96=B0=E5=A2=9E=E9=82=AE=E7=AE=B1=E5=8F=91=E9=80=81?= =?UTF-8?q?=E5=B7=A5=E5=85=B7=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- xjs-business/xjs-business-warning/pom.xml | 13 +- .../java/com/xjs/domain/mall/MailBean.java | 36 ++++ .../main/java/com/xjs/server/MailServer.java | 167 ++++++++++++++++++ .../src/main/resources/static/images/i.png | Bin 0 -> 993 bytes .../src/main/resources/templates/email.html | 12 ++ .../java/com/xjs/server/MailServerTest.java | 41 +++++ 6 files changed, 268 insertions(+), 1 deletion(-) create mode 100644 xjs-business/xjs-business-warning/src/main/java/com/xjs/domain/mall/MailBean.java create mode 100644 xjs-business/xjs-business-warning/src/main/java/com/xjs/server/MailServer.java create mode 100644 xjs-business/xjs-business-warning/src/main/resources/static/images/i.png create mode 100644 xjs-business/xjs-business-warning/src/main/resources/templates/email.html create mode 100644 xjs-business/xjs-business-warning/src/test/java/com/xjs/server/MailServerTest.java 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 0000000000000000000000000000000000000000..d739ddc4b639ed62566baf67388aa13382091858 GIT binary patch literal 993 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=k0Y$sR$z3=CDO3=9p;3=BX21L>Cx z45bDP46hOx7_4S6Fo@?*ia+WGRLhp+?e4&)Z#R(ZUH95uF?C@|9@J}+CB=CWmm2<@cIjOxIZX#0}Iu@}n3{dP|6Tjie3I&Pq zn21d)a%@V>gN<*_e0kR==KqB=uj{YR{$9U+*Q)s5%xQa-{(31?cT{HI zA@QUiyU*V5+saYHxa_0Awrx{>tKU0doMf@Dj4^c=zy5DkIzu%;M|O9PfIOs#5Nk`9{9dv)3f`> z{S4<=gRAiD#wXUKqZSd=a;d zGj-R6m(}%0r>~TFP`!KA!lhZ)?`5*>pTm25vCr(U$9q;e?^@JuAN4sp?8~Ya*)uZ^ zC(X!b+0!YXU9B9q^7e?6|Vk{W+;`^1be9+-WU0Zf8!qku9QeS$37& z<2$n|19|u-pHJp_|8VP>w}q*<%$ptrmnQjsh`gEpv;NwYu)fzfrj>^$&E-?O>vZj9 z#x>m}S^njBoz9*5_$QuM^L6vr-Z{XW#GqQ@8c~vxSdwa$T$Bo=7>o=IO>_;6b&X6y x3{9*I&8-X!wGAw+3=C#0`K5xQAvZrIGp!Q0hL=B`fccSu!PC{xWt~$(695V+zFq(T literal 0 HcmV?d00001 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","生哥","这是标题"); + } +}