From 0ace6bfd9cad3df2b3413009cff9664c1b0e388a Mon Sep 17 00:00:00 2001 From: "Yangkai.Shen" <237497819@qq.com> Date: Tue, 23 Aug 2022 13:32:35 +0800 Subject: [PATCH] =?UTF-8?q?:sparkles:=20=E5=9F=BA=E7=A1=80=E6=A8=A1?= =?UTF-8?q?=E5=9D=97=E4=B9=8B=20=E9=82=AE=E4=BB=B6=20=E6=A1=88=E4=BE=8B?= =?UTF-8?q?=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- demo-base/demo-base-email/README.md | 255 ++++++++++++ {demo-email => demo-base/demo-base-email}/pom.xml | 35 +- .../java/com/xkcoding/email/EmailApplication.java | 4 +- .../com/xkcoding/email/service/MailService.java | 4 +- .../email/service/impl/MailServiceImpl.java | 56 ++- .../src/main/resources/application.yml | 5 +- .../src/main/resources/email/test.html | 0 .../src/main/resources/static/xkcoding.png | Bin 0 -> 94984 bytes .../src/main/resources/templates/welcome.html | 0 .../com/xkcoding/email/EmailApplicationTests.java | 13 + .../test/java/com/xkcoding/email/PasswordTest.java | 8 +- .../xkcoding/email/service/MailServiceTest.java | 46 ++- demo-base/pom.xml | 1 + demo-email/.gitignore | 25 -- demo-email/README.md | 441 --------------------- demo-email/src/main/resources/static/xkcoding.png | Bin 7310 -> 0 bytes .../email/SpringBootDemoEmailApplicationTests.java | 16 - pom.xml | 1 - 18 files changed, 349 insertions(+), 561 deletions(-) create mode 100644 demo-base/demo-base-email/README.md rename {demo-email => demo-base/demo-base-email}/pom.xml (75%) rename demo-email/src/main/java/com/xkcoding/email/SpringBootDemoEmailApplication.java => demo-base/demo-base-email/src/main/java/com/xkcoding/email/EmailApplication.java (72%) rename {demo-email => demo-base/demo-base-email}/src/main/java/com/xkcoding/email/service/MailService.java (94%) rename {demo-email => demo-base/demo-base-email}/src/main/java/com/xkcoding/email/service/impl/MailServiceImpl.java (75%) rename {demo-email => demo-base/demo-base-email}/src/main/resources/application.yml (76%) rename {demo-email => demo-base/demo-base-email}/src/main/resources/email/test.html (100%) create mode 100644 demo-base/demo-base-email/src/main/resources/static/xkcoding.png rename {demo-email => demo-base/demo-base-email}/src/main/resources/templates/welcome.html (100%) create mode 100644 demo-base/demo-base-email/src/test/java/com/xkcoding/email/EmailApplicationTests.java rename {demo-email => demo-base/demo-base-email}/src/test/java/com/xkcoding/email/PasswordTest.java (83%) rename {demo-email => demo-base/demo-base-email}/src/test/java/com/xkcoding/email/service/MailServiceTest.java (64%) delete mode 100644 demo-email/.gitignore delete mode 100644 demo-email/README.md delete mode 100644 demo-email/src/main/resources/static/xkcoding.png delete mode 100644 demo-email/src/test/java/com/xkcoding/email/SpringBootDemoEmailApplicationTests.java diff --git a/demo-base/demo-base-email/README.md b/demo-base/demo-base-email/README.md new file mode 100644 index 0000000..2b1b8fb --- /dev/null +++ b/demo-base/demo-base-email/README.md @@ -0,0 +1,255 @@ +## spring-boot-demo-email + +> 此 demo 主要演示了 Spring Boot 如何整合邮件功能,包括发送简单文本邮件、HTML邮件(包括模板HTML邮件)、附件邮件、静态资源邮件。 + +### 1.开发步骤 + +#### 1.1.添加依赖 + +```xml + + + + com.xkcoding + common-tools + + + + + org.springframework.boot + spring-boot-starter-mail + + + + + com.github.ulisesbocchio + jasypt-spring-boot-starter + ${jasypt.version} + + + + org.springframework.boot + spring-boot-starter-test + test + + + + + org.springframework.boot + spring-boot-starter-thymeleaf + + +``` + +#### 1.2.添加邮件相关配置 + +```yaml +spring: + mail: + host: smtp.mxhichina.com + port: 465 + from: "SpringBootDemo测试<${spring.mail.username}>" + username: spring-boot-demo@xkcoding.com + # 使用 jasypt 加密密码,使用com.xkcoding.email.PasswordTest.testGeneratePassword 生成加密密码,替换 ENC(加密密码) + password: ENC(aef0+nM5440HO7YFAo7iUz8ZHpkjZVlR0hNw3OI/QOPSkNhYRImE/Oy1LBgFKoB1OjqW0v4ZdM0xNS0eKxELfA==) + protocol: smtp + test-connection: true + default-encoding: UTF-8 + properties: + mail.smtp.auth: true + mail.smtp.starttls.enable: true + mail.smtp.starttls.required: true + mail.smtp.ssl.enable: true + mail.display.sendmail: spring-boot-demo +# 为 jasypt 配置解密秘钥 +jasypt: + encryptor: + password: spring-boot-demo +``` + +#### 1.3.编写发送邮件代码 + +- **抽象邮件服务接口**,方便后期替换不同的客户端实现 + +```java +public interface MailService { + /** + * 发送文本邮件 + * + * @param to 收件人地址 + * @param subject 邮件主题 + * @param content 邮件内容 + * @param cc 抄送地址 + */ + void sendSimpleMail(String to, String subject, String content, String... cc); + + /** + * 发送HTML邮件 + * + * @param to 收件人地址 + * @param subject 邮件主题 + * @param content 邮件内容 + * @param cc 抄送地址 + * @throws MessagingException 邮件发送异常 + */ + void sendHtmlMail(String to, String subject, String content, String... cc) + throws MessagingException, MessagingException; + + /** + * 发送带附件的邮件 + * + * @param to 收件人地址 + * @param subject 邮件主题 + * @param content 邮件内容 + * @param filePath 附件地址 + * @param cc 抄送地址 + * @throws MessagingException 邮件发送异常 + */ + void sendAttachmentsMail(String to, String subject, String content, String filePath, String... cc) + throws MessagingException; + + /** + * 发送正文中有静态资源的邮件 + * + * @param to 收件人地址 + * @param subject 邮件主题 + * @param content 邮件内容 + * @param rscPath 静态资源地址 + * @param rscId 静态资源id + * @param cc 抄送地址 + * @throws MessagingException 邮件发送异常 + */ + void sendResourceMail(String to, String subject, String content, String rscPath, String rscId, String... cc) + throws MessagingException; +``` + +- 接口实现 + +```java + +@Service +public class MailServiceImpl implements MailService { + @Autowired + private JavaMailSender mailSender; + @Value("${spring.mail.from}") + private String from; + + /** + * 发送文本邮件 + * + * @param to 收件人地址 + * @param subject 邮件主题 + * @param content 邮件内容 + * @param cc 抄送地址 + */ + @Override + public void sendSimpleMail(String to, String subject, String content, String... cc) { + SimpleMailMessage message = new SimpleMailMessage(); + message.setFrom(from); + message.setTo(to); + message.setSubject(subject); + message.setText(content); + if (ArrayUtil.isNotEmpty(cc)) { + message.setCc(cc); + } + mailSender.send(message); + } + + /** + * 发送HTML邮件 + * + * @param to 收件人地址 + * @param subject 邮件主题 + * @param content 邮件内容 + * @param cc 抄送地址 + */ + @Override + public void sendHtmlMail(String to, String subject, String content, String... cc) throws MessagingException { + MimeEmail mimeEmail = basicMimeEmailBuilder(to, subject, content, cc); + mailSender.send(mimeEmail.message()); + } + + /** + * 发送带附件的邮件 + * + * @param to 收件人地址 + * @param subject 邮件主题 + * @param content 邮件内容 + * @param filePath 附件地址 + * @param cc 抄送地址 + * @throws MessagingException 邮件发送异常 + */ + @Override + public void sendAttachmentsMail(String to, String subject, String content, String filePath, String... cc) + throws MessagingException { + MimeEmail mimeEmail = basicMimeEmailBuilder(to, subject, content, cc); + + MimeMessageHelper helper = mimeEmail.helper(); + FileSystemResource file = new FileSystemResource(new File(filePath)); + String fileName = filePath.substring(filePath.lastIndexOf(File.separator)); + helper.addAttachment(fileName, file); + + mailSender.send(mimeEmail.message()); + } + + /** + * 发送正文中有静态资源的邮件 + * + * @param to 收件人地址 + * @param subject 邮件主题 + * @param content 邮件内容 + * @param rscPath 静态资源地址 + * @param rscId 静态资源id + * @param cc 抄送地址 + * @throws MessagingException 邮件发送异常 + */ + @Override + public void sendResourceMail(String to, String subject, String content, String rscPath, String rscId, String... cc) + throws MessagingException { + MimeEmail mimeEmail = basicMimeEmailBuilder(to, subject, content, cc); + + MimeMessageHelper helper = mimeEmail.helper(); + FileSystemResource res = new FileSystemResource(new File(rscPath)); + helper.addInline(rscId, res); + + mailSender.send(mimeEmail.message()); + } + + /** + * 富文本邮件构造器,抽取重复代码,返回一个 MimeEmail record + */ + private MimeEmail basicMimeEmailBuilder(String to, String subject, String content, String... cc) + throws MessagingException { + MimeMessage message = mailSender.createMimeMessage(); + MimeMessageHelper helper = new MimeMessageHelper(message, true); + helper.setFrom(from); + helper.setTo(to); + helper.setSubject(subject); + helper.setText(content, true); + if (ArrayUtil.isNotEmpty(cc)) { + helper.setCc(cc); + } + return new MimeEmail(message, helper); + } + + private record MimeEmail(MimeMessage message, MimeMessageHelper helper) { + + } +} +``` + +- 其他资源文件参考 `classpath://resources` 目录 + +### 2.测试 + +参考 `MailServiceTest` 测试用例,分别运行各个方法,进行邮件测试 +> 注意: +> 1. 最好是每个方法分别运行,不要直接在测试类上一下跑所有测试用例,因为 Spring 的 `templateResolver` 一旦初始化是不允许修改的 +> 2. **强烈建议各位同学测试的时候,把邮箱改成自己的邮箱进行测试,这样才能实际体会到收到的邮件内容** +> 3. 请勿将 `spring-boot-demo@xkcoding.com` 的邮箱用于发送违法内容,否则作者将收回邮箱权限,同时提交给公安依法追究 + +### 3.参考 + +- Spring Boot 官方文档:https://docs.spring.io/spring-boot/docs/3.0.0-M4/reference/htmlsingle/#io.email +- Spring 官方文档:https://docs.spring.io/spring-framework/docs/6.0.0-M5/reference/html/integration.html#mail +- jasypt 加解密文档:https://github.com/ulisesbocchio/jasypt-spring-boot#what-to-do-first diff --git a/demo-email/pom.xml b/demo-base/demo-base-email/pom.xml similarity index 75% rename from demo-email/pom.xml rename to demo-base/demo-base-email/pom.xml index 2c7b9f4..4f69d37 100644 --- a/demo-email/pom.xml +++ b/demo-base/demo-base-email/pom.xml @@ -1,36 +1,40 @@ + + com.xkcoding + demo-base + 1.0.0-SNAPSHOT + + 4.0.0 - demo-email + demo-base-email 1.0.0-SNAPSHOT jar - demo-email + demo-base-email Demo project for Spring Boot - - com.xkcoding - spring-boot-demo - 1.0.0-SNAPSHOT - - UTF-8 - UTF-8 - 1.8 - 2.1.1 + 17 + 3.0.4 + + com.xkcoding + common-tools + + org.springframework.boot spring-boot-starter-mail - + com.github.ulisesbocchio jasypt-spring-boot-starter @@ -43,11 +47,6 @@ test - - cn.hutool - hutool-all - - org.springframework.boot @@ -56,7 +55,7 @@ - demo-email + demo-base-email org.springframework.boot diff --git a/demo-email/src/main/java/com/xkcoding/email/SpringBootDemoEmailApplication.java b/demo-base/demo-base-email/src/main/java/com/xkcoding/email/EmailApplication.java similarity index 72% rename from demo-email/src/main/java/com/xkcoding/email/SpringBootDemoEmailApplication.java rename to demo-base/demo-base-email/src/main/java/com/xkcoding/email/EmailApplication.java index 9e054fa..24389ad 100644 --- a/demo-email/src/main/java/com/xkcoding/email/SpringBootDemoEmailApplication.java +++ b/demo-base/demo-base-email/src/main/java/com/xkcoding/email/EmailApplication.java @@ -12,9 +12,9 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; * @date Created in 2018-11-04 22:38 */ @SpringBootApplication -public class SpringBootDemoEmailApplication { +public class EmailApplication { public static void main(String[] args) { - SpringApplication.run(SpringBootDemoEmailApplication.class, args); + SpringApplication.run(EmailApplication.class, args); } } diff --git a/demo-email/src/main/java/com/xkcoding/email/service/MailService.java b/demo-base/demo-base-email/src/main/java/com/xkcoding/email/service/MailService.java similarity index 94% rename from demo-email/src/main/java/com/xkcoding/email/service/MailService.java rename to demo-base/demo-base-email/src/main/java/com/xkcoding/email/service/MailService.java index b7e5764..a6c16dc 100644 --- a/demo-email/src/main/java/com/xkcoding/email/service/MailService.java +++ b/demo-base/demo-base-email/src/main/java/com/xkcoding/email/service/MailService.java @@ -1,6 +1,6 @@ package com.xkcoding.email.service; -import javax.mail.MessagingException; +import jakarta.mail.MessagingException; /** *

@@ -30,7 +30,7 @@ public interface MailService { * @param cc 抄送地址 * @throws MessagingException 邮件发送异常 */ - void sendHtmlMail(String to, String subject, String content, String... cc) throws MessagingException; + void sendHtmlMail(String to, String subject, String content, String... cc) throws MessagingException, MessagingException; /** * 发送带附件的邮件 diff --git a/demo-email/src/main/java/com/xkcoding/email/service/impl/MailServiceImpl.java b/demo-base/demo-base-email/src/main/java/com/xkcoding/email/service/impl/MailServiceImpl.java similarity index 75% rename from demo-email/src/main/java/com/xkcoding/email/service/impl/MailServiceImpl.java rename to demo-base/demo-base-email/src/main/java/com/xkcoding/email/service/impl/MailServiceImpl.java index 59a8e13..ea343e9 100644 --- a/demo-email/src/main/java/com/xkcoding/email/service/impl/MailServiceImpl.java +++ b/demo-base/demo-base-email/src/main/java/com/xkcoding/email/service/impl/MailServiceImpl.java @@ -2,6 +2,8 @@ package com.xkcoding.email.service.impl; import cn.hutool.core.util.ArrayUtil; import com.xkcoding.email.service.MailService; +import jakarta.mail.MessagingException; +import jakarta.mail.internet.MimeMessage; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.core.io.FileSystemResource; @@ -10,8 +12,6 @@ import org.springframework.mail.javamail.JavaMailSender; import org.springframework.mail.javamail.MimeMessageHelper; import org.springframework.stereotype.Service; -import javax.mail.MessagingException; -import javax.mail.internet.MimeMessage; import java.io.File; /** @@ -26,7 +26,7 @@ import java.io.File; public class MailServiceImpl implements MailService { @Autowired private JavaMailSender mailSender; - @Value("${spring.mail.username}") + @Value("${spring.mail.from}") private String from; /** @@ -57,20 +57,11 @@ public class MailServiceImpl implements MailService { * @param subject 邮件主题 * @param content 邮件内容 * @param cc 抄送地址 - * @throws MessagingException 邮件发送异常 */ @Override public void sendHtmlMail(String to, String subject, String content, String... cc) throws MessagingException { - MimeMessage message = mailSender.createMimeMessage(); - MimeMessageHelper helper = new MimeMessageHelper(message, true); - helper.setFrom(from); - helper.setTo(to); - helper.setSubject(subject); - helper.setText(content, true); - if (ArrayUtil.isNotEmpty(cc)) { - helper.setCc(cc); - } - mailSender.send(message); + MimeEmail mimeEmail = basicMimeEmailBuilder(to, subject, content, cc); + mailSender.send(mimeEmail.message()); } /** @@ -85,21 +76,14 @@ public class MailServiceImpl implements MailService { */ @Override public void sendAttachmentsMail(String to, String subject, String content, String filePath, String... cc) throws MessagingException { - MimeMessage message = mailSender.createMimeMessage(); + MimeEmail mimeEmail = basicMimeEmailBuilder(to, subject, content, cc); - MimeMessageHelper helper = new MimeMessageHelper(message, true); - helper.setFrom(from); - helper.setTo(to); - helper.setSubject(subject); - helper.setText(content, true); - if (ArrayUtil.isNotEmpty(cc)) { - helper.setCc(cc); - } + MimeMessageHelper helper = mimeEmail.helper(); FileSystemResource file = new FileSystemResource(new File(filePath)); String fileName = filePath.substring(filePath.lastIndexOf(File.separator)); helper.addAttachment(fileName, file); - mailSender.send(message); + mailSender.send(mimeEmail.message()); } /** @@ -114,9 +98,22 @@ public class MailServiceImpl implements MailService { * @throws MessagingException 邮件发送异常 */ @Override - public void sendResourceMail(String to, String subject, String content, String rscPath, String rscId, String... cc) throws MessagingException { - MimeMessage message = mailSender.createMimeMessage(); + public void sendResourceMail(String to, String subject, String content, String rscPath, String rscId, String... cc) + throws MessagingException { + MimeEmail mimeEmail = basicMimeEmailBuilder(to, subject, content, cc); + + MimeMessageHelper helper = mimeEmail.helper(); + FileSystemResource res = new FileSystemResource(new File(rscPath)); + helper.addInline(rscId, res); + + mailSender.send(mimeEmail.message()); + } + /** + * 富文本邮件构造器,抽取重复代码,返回一个 MimeEmail record + */ + private MimeEmail basicMimeEmailBuilder(String to, String subject, String content, String... cc) throws MessagingException { + MimeMessage message = mailSender.createMimeMessage(); MimeMessageHelper helper = new MimeMessageHelper(message, true); helper.setFrom(from); helper.setTo(to); @@ -125,9 +122,10 @@ public class MailServiceImpl implements MailService { if (ArrayUtil.isNotEmpty(cc)) { helper.setCc(cc); } - FileSystemResource res = new FileSystemResource(new File(rscPath)); - helper.addInline(rscId, res); + return new MimeEmail(message, helper); + } + + private record MimeEmail(MimeMessage message, MimeMessageHelper helper) { - mailSender.send(message); } } diff --git a/demo-email/src/main/resources/application.yml b/demo-base/demo-base-email/src/main/resources/application.yml similarity index 76% rename from demo-email/src/main/resources/application.yml rename to demo-base/demo-base-email/src/main/resources/application.yml index 719815b..1c730b8 100644 --- a/demo-email/src/main/resources/application.yml +++ b/demo-base/demo-base-email/src/main/resources/application.yml @@ -2,9 +2,10 @@ spring: mail: host: smtp.mxhichina.com port: 465 + from: "SpringBootDemo测试<${spring.mail.username}>" username: spring-boot-demo@xkcoding.com - # 使用 jasypt 加密密码,使用com.xkcoding.email.PasswordTest.testGeneratePassword 生成加密密码,替换 ENC(加密密码) - password: ENC(OT0qGOpXrr1Iog1W+fjOiIDCJdBjHyhy) + # 使用 jasypt 加密密码,使用com.xkcoding.email.PasswordTest.testGeneratePassword 生成加密密码,替换 ENC(加密密码) + password: ENC(aef0+nM5440HO7YFAo7iUz8ZHpkjZVlR0hNw3OI/QOPSkNhYRImE/Oy1LBgFKoB1OjqW0v4ZdM0xNS0eKxELfA==) protocol: smtp test-connection: true default-encoding: UTF-8 diff --git a/demo-email/src/main/resources/email/test.html b/demo-base/demo-base-email/src/main/resources/email/test.html similarity index 100% rename from demo-email/src/main/resources/email/test.html rename to demo-base/demo-base-email/src/main/resources/email/test.html diff --git a/demo-base/demo-base-email/src/main/resources/static/xkcoding.png b/demo-base/demo-base-email/src/main/resources/static/xkcoding.png new file mode 100644 index 0000000000000000000000000000000000000000..b1e9d30ae4f075bc964bce45d2f14ee532b00191 GIT binary patch literal 94984 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 literal 0 KcmV+b0RR6000031 diff --git a/demo-email/src/main/resources/templates/welcome.html b/demo-base/demo-base-email/src/main/resources/templates/welcome.html similarity index 100% rename from demo-email/src/main/resources/templates/welcome.html rename to demo-base/demo-base-email/src/main/resources/templates/welcome.html diff --git a/demo-base/demo-base-email/src/test/java/com/xkcoding/email/EmailApplicationTests.java b/demo-base/demo-base-email/src/test/java/com/xkcoding/email/EmailApplicationTests.java new file mode 100644 index 0000000..75d643c --- /dev/null +++ b/demo-base/demo-base-email/src/test/java/com/xkcoding/email/EmailApplicationTests.java @@ -0,0 +1,13 @@ +package com.xkcoding.email; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class EmailApplicationTests { + + @Test + void contextLoads() { + } + +} diff --git a/demo-email/src/test/java/com/xkcoding/email/PasswordTest.java b/demo-base/demo-base-email/src/test/java/com/xkcoding/email/PasswordTest.java similarity index 83% rename from demo-email/src/test/java/com/xkcoding/email/PasswordTest.java rename to demo-base/demo-base-email/src/test/java/com/xkcoding/email/PasswordTest.java index 3f119e9..9bd0957 100644 --- a/demo-email/src/test/java/com/xkcoding/email/PasswordTest.java +++ b/demo-base/demo-base-email/src/test/java/com/xkcoding/email/PasswordTest.java @@ -1,8 +1,9 @@ package com.xkcoding.email; import org.jasypt.encryption.StringEncryptor; -import org.junit.Test; +import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; /** *

@@ -12,7 +13,8 @@ import org.springframework.beans.factory.annotation.Autowired; * @author yangkai.shen * @date Created in 2019-08-27 16:15 */ -public class PasswordTest extends SpringBootDemoEmailApplicationTests { +@SpringBootTest +class PasswordTest { @Autowired private StringEncryptor encryptor; @@ -20,7 +22,7 @@ public class PasswordTest extends SpringBootDemoEmailApplicationTests { * 生成加密密码 */ @Test - public void testGeneratePassword() { + void testGeneratePassword() { // 你的邮箱密码 String password = "Just4Test!"; // 加密后的密码(注意:配置上去的时候需要加 ENC(加密密码)) diff --git a/demo-email/src/test/java/com/xkcoding/email/service/MailServiceTest.java b/demo-base/demo-base-email/src/test/java/com/xkcoding/email/service/MailServiceTest.java similarity index 64% rename from demo-email/src/test/java/com/xkcoding/email/service/MailServiceTest.java rename to demo-base/demo-base-email/src/test/java/com/xkcoding/email/service/MailServiceTest.java index b23d352..fba9a88 100644 --- a/demo-email/src/test/java/com/xkcoding/email/service/MailServiceTest.java +++ b/demo-base/demo-base-email/src/test/java/com/xkcoding/email/service/MailServiceTest.java @@ -1,15 +1,16 @@ package com.xkcoding.email.service; import cn.hutool.core.io.resource.ResourceUtil; -import com.xkcoding.email.SpringBootDemoEmailApplicationTests; -import org.junit.Test; +import com.xkcoding.email.EmailApplication; +import jakarta.mail.MessagingException; +import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; import org.springframework.context.ApplicationContext; import org.thymeleaf.TemplateEngine; import org.thymeleaf.context.Context; -import org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver; +import org.thymeleaf.spring6.templateresolver.SpringResourceTemplateResolver; -import javax.mail.MessagingException; import java.net.URL; /** @@ -20,7 +21,8 @@ import java.net.URL; * @author yangkai.shen * @date Created in 2018-11-21 13:49 */ -public class MailServiceTest extends SpringBootDemoEmailApplicationTests { +@SpringBootTest(classes = EmailApplication.class) +class MailServiceTest { @Autowired private MailService mailService; @Autowired @@ -37,19 +39,19 @@ public class MailServiceTest extends SpringBootDemoEmailApplicationTests { } /** - * 测试HTML邮件 + * 测试HTML邮件(使用 classpath://templates/ 下的模板) * * @throws MessagingException 邮件异常 */ @Test - public void sendHtmlMail() throws MessagingException { - Context context = new Context(); - context.setVariable("project", "Spring Boot Demo"); - context.setVariable("author", "Yangkai.Shen"); - context.setVariable("url", "https://github.com/xkcoding/spring-boot-demo"); + void sendHtmlMail1() throws MessagingException { + Context varContext = new Context(); + varContext.setVariable("project", "Spring Boot Demo"); + varContext.setVariable("author", "Yangkai.Shen"); + varContext.setVariable("url", "https://github.com/xkcoding/spring-boot-demo"); - String emailTemplate = templateEngine.process("welcome", context); - mailService.sendHtmlMail("237497819@qq.com", "这是一封模板HTML邮件", emailTemplate); + String emailTemplate = templateEngine.process("welcome", varContext); + mailService.sendHtmlMail("237497819@qq.com", "这是一封模板HTML邮件(templates目录)", emailTemplate); } /** @@ -58,7 +60,7 @@ public class MailServiceTest extends SpringBootDemoEmailApplicationTests { * @throws MessagingException 邮件异常 */ @Test - public void sendHtmlMail2() throws MessagingException { + void sendHtmlMail2() throws MessagingException { SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver(); templateResolver.setApplicationContext(context); @@ -68,13 +70,13 @@ public class MailServiceTest extends SpringBootDemoEmailApplicationTests { templateEngine.setTemplateResolver(templateResolver); - Context context = new Context(); - context.setVariable("project", "Spring Boot Demo"); - context.setVariable("author", "Yangkai.Shen"); - context.setVariable("url", "https://github.com/xkcoding/spring-boot-demo"); + Context varContext = new Context(); + varContext.setVariable("project", "Spring Boot Demo"); + varContext.setVariable("author", "Yangkai.Shen"); + varContext.setVariable("url", "https://github.com/xkcoding/spring-boot-demo"); - String emailTemplate = templateEngine.process("test", context); - mailService.sendHtmlMail("237497819@qq.com", "这是一封模板HTML邮件", emailTemplate); + String emailTemplate = templateEngine.process("test", varContext); + mailService.sendHtmlMail("237497819@qq.com", "这是一封模板HTML邮件(自定义目录)", emailTemplate); } /** @@ -83,7 +85,7 @@ public class MailServiceTest extends SpringBootDemoEmailApplicationTests { * @throws MessagingException 邮件异常 */ @Test - public void sendAttachmentsMail() throws MessagingException { + void sendAttachmentsMail() throws MessagingException { URL resource = ResourceUtil.getResource("static/xkcoding.png"); mailService.sendAttachmentsMail("237497819@qq.com", "这是一封带附件的邮件", "邮件中有附件,请注意查收!", resource.getPath()); } @@ -94,7 +96,7 @@ public class MailServiceTest extends SpringBootDemoEmailApplicationTests { * @throws MessagingException 邮件异常 */ @Test - public void sendResourceMail() throws MessagingException { + void sendResourceMail() throws MessagingException { String rscId = "xkcoding"; String content = "这是带静态资源的邮件
"; URL resource = ResourceUtil.getResource("static/xkcoding.png"); diff --git a/demo-base/pom.xml b/demo-base/pom.xml index 4df90f9..3b5fa19 100644 --- a/demo-base/pom.xml +++ b/demo-base/pom.xml @@ -23,6 +23,7 @@ demo-base-properties demo-base-async demo-base-exception + demo-base-email diff --git a/demo-email/.gitignore b/demo-email/.gitignore deleted file mode 100644 index 82eca33..0000000 --- a/demo-email/.gitignore +++ /dev/null @@ -1,25 +0,0 @@ -/target/ -!.mvn/wrapper/maven-wrapper.jar - -### STS ### -.apt_generated -.classpath -.factorypath -.project -.settings -.springBeans -.sts4-cache - -### IntelliJ IDEA ### -.idea -*.iws -*.iml -*.ipr - -### NetBeans ### -/nbproject/private/ -/build/ -/nbbuild/ -/dist/ -/nbdist/ -/.nb-gradle/ \ No newline at end of file diff --git a/demo-email/README.md b/demo-email/README.md deleted file mode 100644 index 85d037e..0000000 --- a/demo-email/README.md +++ /dev/null @@ -1,441 +0,0 @@ -# spring-boot-demo-email - -> 此 demo 主要演示了 Spring Boot 如何整合邮件功能,包括发送简单文本邮件、HTML邮件(包括模板HTML邮件)、附件邮件、静态资源邮件。 - -## pom.xml - -```xml - - - 4.0.0 - - spring-boot-demo-email - 1.0.0-SNAPSHOT - jar - - spring-boot-demo-email - Demo project for Spring Boot - - - com.xkcoding - spring-boot-demo - 1.0.0-SNAPSHOT - - - - UTF-8 - UTF-8 - 1.8 - 2.1.1 - - - - - - org.springframework.boot - spring-boot-starter-mail - - - - - com.github.ulisesbocchio - jasypt-spring-boot-starter - ${jasypt.version} - - - - org.springframework.boot - spring-boot-starter-test - test - - - - cn.hutool - hutool-all - - - - - org.springframework.boot - spring-boot-starter-thymeleaf - - - - - spring-boot-demo-email - - - org.springframework.boot - spring-boot-maven-plugin - - - - - -``` - -## application.yml - -```yaml -spring: - mail: - host: smtp.mxhichina.com - port: 465 - username: spring-boot-demo@xkcoding.com - # 使用 jasypt 加密密码,使用com.xkcoding.email.PasswordTest.testGeneratePassword 生成加密密码,替换 ENC(加密密码) - password: ENC(OT0qGOpXrr1Iog1W+fjOiIDCJdBjHyhy) - protocol: smtp - test-connection: true - default-encoding: UTF-8 - properties: - mail.smtp.auth: true - mail.smtp.starttls.enable: true - mail.smtp.starttls.required: true - mail.smtp.ssl.enable: true - mail.display.sendmail: spring-boot-demo -# 为 jasypt 配置解密秘钥 -jasypt: - encryptor: - password: spring-boot-demo - -``` - -## MailService.java - -```java -/** - *

- * 邮件接口 - *

- * - * @author yangkai.shen - * @date Created in 2018-11-21 11:16 - */ -public interface MailService { - /** - * 发送文本邮件 - * - * @param to 收件人地址 - * @param subject 邮件主题 - * @param content 邮件内容 - * @param cc 抄送地址 - */ - void sendSimpleMail(String to, String subject, String content, String... cc); - - /** - * 发送HTML邮件 - * - * @param to 收件人地址 - * @param subject 邮件主题 - * @param content 邮件内容 - * @param cc 抄送地址 - * @throws MessagingException 邮件发送异常 - */ - void sendHtmlMail(String to, String subject, String content, String... cc) throws MessagingException; - - /** - * 发送带附件的邮件 - * - * @param to 收件人地址 - * @param subject 邮件主题 - * @param content 邮件内容 - * @param filePath 附件地址 - * @param cc 抄送地址 - * @throws MessagingException 邮件发送异常 - */ - void sendAttachmentsMail(String to, String subject, String content, String filePath, String... cc) throws MessagingException; - - /** - * 发送正文中有静态资源的邮件 - * - * @param to 收件人地址 - * @param subject 邮件主题 - * @param content 邮件内容 - * @param rscPath 静态资源地址 - * @param rscId 静态资源id - * @param cc 抄送地址 - * @throws MessagingException 邮件发送异常 - */ - void sendResourceMail(String to, String subject, String content, String rscPath, String rscId, String... cc) throws MessagingException; - -} -``` - -## MailServiceImpl.java - -```java -/** - *

- * 邮件接口 - *

- * - * @author yangkai.shen - * @date Created in 2018-11-21 13:49 - */ -@Service -public class MailServiceImpl implements MailService { - @Autowired - private JavaMailSender mailSender; - @Value("${spring.mail.username}") - private String from; - - /** - * 发送文本邮件 - * - * @param to 收件人地址 - * @param subject 邮件主题 - * @param content 邮件内容 - * @param cc 抄送地址 - */ - @Override - public void sendSimpleMail(String to, String subject, String content, String... cc) { - SimpleMailMessage message = new SimpleMailMessage(); - message.setFrom(from); - message.setTo(to); - message.setSubject(subject); - message.setText(content); - if (ArrayUtil.isNotEmpty(cc)) { - message.setCc(cc); - } - mailSender.send(message); - } - - /** - * 发送HTML邮件 - * - * @param to 收件人地址 - * @param subject 邮件主题 - * @param content 邮件内容 - * @param cc 抄送地址 - * @throws MessagingException 邮件发送异常 - */ - @Override - public void sendHtmlMail(String to, String subject, String content, String... cc) throws MessagingException { - MimeMessage message = mailSender.createMimeMessage(); - MimeMessageHelper helper = new MimeMessageHelper(message, true); - helper.setFrom(from); - helper.setTo(to); - helper.setSubject(subject); - helper.setText(content, true); - if (ArrayUtil.isNotEmpty(cc)) { - helper.setCc(cc); - } - mailSender.send(message); - } - - /** - * 发送带附件的邮件 - * - * @param to 收件人地址 - * @param subject 邮件主题 - * @param content 邮件内容 - * @param filePath 附件地址 - * @param cc 抄送地址 - * @throws MessagingException 邮件发送异常 - */ - @Override - public void sendAttachmentsMail(String to, String subject, String content, String filePath, String... cc) throws MessagingException { - MimeMessage message = mailSender.createMimeMessage(); - - MimeMessageHelper helper = new MimeMessageHelper(message, true); - helper.setFrom(from); - helper.setTo(to); - helper.setSubject(subject); - helper.setText(content, true); - if (ArrayUtil.isNotEmpty(cc)) { - helper.setCc(cc); - } - FileSystemResource file = new FileSystemResource(new File(filePath)); - String fileName = filePath.substring(filePath.lastIndexOf(File.separator)); - helper.addAttachment(fileName, file); - - mailSender.send(message); - } - - /** - * 发送正文中有静态资源的邮件 - * - * @param to 收件人地址 - * @param subject 邮件主题 - * @param content 邮件内容 - * @param rscPath 静态资源地址 - * @param rscId 静态资源id - * @param cc 抄送地址 - * @throws MessagingException 邮件发送异常 - */ - @Override - public void sendResourceMail(String to, String subject, String content, String rscPath, String rscId, String... cc) throws MessagingException { - MimeMessage message = mailSender.createMimeMessage(); - - MimeMessageHelper helper = new MimeMessageHelper(message, true); - helper.setFrom(from); - helper.setTo(to); - helper.setSubject(subject); - helper.setText(content, true); - if (ArrayUtil.isNotEmpty(cc)) { - helper.setCc(cc); - } - FileSystemResource res = new FileSystemResource(new File(rscPath)); - helper.addInline(rscId, res); - - mailSender.send(message); - } -} -``` - -## MailServiceTest.java - -```java -/** - *

- * 邮件测试 - *

- * - * @author yangkai.shen - * @date Created in 2018-11-21 13:49 - */ -public class MailServiceTest extends SpringBootDemoEmailApplicationTests { - @Autowired - private MailService mailService; - @Autowired - private TemplateEngine templateEngine; - @Autowired - private ApplicationContext context; - - /** - * 测试简单邮件 - */ - @Test - public void sendSimpleMail() { - mailService.sendSimpleMail("237497819@qq.com", "这是一封简单邮件", "这是一封普通的SpringBoot测试邮件"); - } - - /** - * 测试HTML邮件 - * - * @throws MessagingException 邮件异常 - */ - @Test - public void sendHtmlMail() throws MessagingException { - Context context = new Context(); - context.setVariable("project", "Spring Boot Demo"); - context.setVariable("author", "Yangkai.Shen"); - context.setVariable("url", "https://github.com/xkcoding/spring-boot-demo"); - - String emailTemplate = templateEngine.process("welcome", context); - mailService.sendHtmlMail("237497819@qq.com", "这是一封模板HTML邮件", emailTemplate); - } - - /** - * 测试HTML邮件,自定义模板目录 - * - * @throws MessagingException 邮件异常 - */ - @Test - public void sendHtmlMail2() throws MessagingException { - - SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver(); - templateResolver.setApplicationContext(context); - templateResolver.setCacheable(false); - templateResolver.setPrefix("classpath:/email/"); - templateResolver.setSuffix(".html"); - - templateEngine.setTemplateResolver(templateResolver); - - Context context = new Context(); - context.setVariable("project", "Spring Boot Demo"); - context.setVariable("author", "Yangkai.Shen"); - context.setVariable("url", "https://github.com/xkcoding/spring-boot-demo"); - - String emailTemplate = templateEngine.process("test", context); - mailService.sendHtmlMail("237497819@qq.com", "这是一封模板HTML邮件", emailTemplate); - } - - /** - * 测试附件邮件 - * - * @throws MessagingException 邮件异常 - */ - @Test - public void sendAttachmentsMail() throws MessagingException { - URL resource = ResourceUtil.getResource("static/xkcoding.png"); - mailService.sendAttachmentsMail("237497819@qq.com", "这是一封带附件的邮件", "邮件中有附件,请注意查收!", resource.getPath()); - } - - /** - * 测试静态资源邮件 - * - * @throws MessagingException 邮件异常 - */ - @Test - public void sendResourceMail() throws MessagingException { - String rscId = "xkcoding"; - String content = "这是带静态资源的邮件
"; - URL resource = ResourceUtil.getResource("static/xkcoding.png"); - mailService.sendResourceMail("237497819@qq.com", "这是一封带静态资源的邮件", content, resource.getPath(), rscId); - } -} -``` - -## welcome.html - -> 此文件为邮件模板,位于 resources/templates 目录下 - -```html - - - - - SpringBootDemo(入门SpringBoot的首选Demo) - - - -
-

欢迎使用 - Powered By

- -
-
- 如果对你有帮助,请任意打赏 -
-
-
-
-
-
- -
-
微信打赏
-
-
-
-
-
支付宝打赏
-
-
-
-
- -
- - -``` - -## 参考 - -- Spring Boot 官方文档:https://docs.spring.io/spring-boot/docs/2.1.0.RELEASE/reference/htmlsingle/#boot-features-email -- Spring Boot 官方文档:https://docs.spring.io/spring/docs/5.1.2.RELEASE/spring-framework-reference/integration.html#mail diff --git a/demo-email/src/main/resources/static/xkcoding.png b/demo-email/src/main/resources/static/xkcoding.png deleted file mode 100644 index da90425dbbb6e3d166e76c2d7cea526b699a781b..0000000000000000000000000000000000000000 GIT binary patch literal 0 KcmV+b0RR6000031 literal 7310 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 oZC4x8UO$Q diff --git a/demo-email/src/test/java/com/xkcoding/email/SpringBootDemoEmailApplicationTests.java b/demo-email/src/test/java/com/xkcoding/email/SpringBootDemoEmailApplicationTests.java deleted file mode 100644 index 2b74a39..0000000 --- a/demo-email/src/test/java/com/xkcoding/email/SpringBootDemoEmailApplicationTests.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.xkcoding.email; - -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; - -@RunWith(SpringRunner.class) -@SpringBootTest -public class SpringBootDemoEmailApplicationTests { - - @Test - public void contextLoads() { - } - -} diff --git a/pom.xml b/pom.xml index c0fa61a..18fa06e 100644 --- a/pom.xml +++ b/pom.xml @@ -43,7 +43,6 @@ -