From 6f7057ba06b1df8e1a146262c90571f556af9902 Mon Sep 17 00:00:00 2001 From: LingandRX Date: Wed, 4 Jun 2025 21:01:15 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20-=20=E6=B7=BB=E5=8A=A0Email=E6=B5=8B?= =?UTF-8?q?=E8=AF=95=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 5 +- .../workflow/service/MailService.java | 7 +- .../service/impl/MailServiceImpl.java | 51 ++++++++- src/main/resources/email/test.html | 22 ++++ src/main/resources/static/GitHub.ico | Bin 0 -> 174318 bytes src/main/resources/templates/welcome.html | 22 ++++ .../workflow/service/EmailServiceTest.java | 101 ++++++++++++++++++ 7 files changed, 198 insertions(+), 10 deletions(-) create mode 100644 src/main/resources/email/test.html create mode 100644 src/main/resources/static/GitHub.ico create mode 100644 src/main/resources/templates/welcome.html create mode 100644 src/test/java/asia/yulinling/workflow/service/EmailServiceTest.java diff --git a/pom.xml b/pom.xml index 23331c7..a716a96 100644 --- a/pom.xml +++ b/pom.xml @@ -28,7 +28,6 @@ 17 - 1.6.2 @@ -59,8 +58,8 @@ com.sun.mail - javax.mail - ${mail.version} + jakarta.mail + 2.0.1 org.springframework.boot diff --git a/src/main/java/asia/yulinling/workflow/service/MailService.java b/src/main/java/asia/yulinling/workflow/service/MailService.java index 57f8cee..337cc9b 100644 --- a/src/main/java/asia/yulinling/workflow/service/MailService.java +++ b/src/main/java/asia/yulinling/workflow/service/MailService.java @@ -1,6 +1,6 @@ package asia.yulinling.workflow.service; -import javax.mail.MessagingException; +import jakarta.mail.MessagingException; /** *

@@ -46,14 +46,15 @@ public interface MailService { 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... cc) throws MessagingException; + void sendResourceMail(String to, String subject, String content, String rscPath, String rscId, String... cc) throws MessagingException; } diff --git a/src/main/java/asia/yulinling/workflow/service/impl/MailServiceImpl.java b/src/main/java/asia/yulinling/workflow/service/impl/MailServiceImpl.java index 5a3046b..4e34dfa 100644 --- a/src/main/java/asia/yulinling/workflow/service/impl/MailServiceImpl.java +++ b/src/main/java/asia/yulinling/workflow/service/impl/MailServiceImpl.java @@ -4,11 +4,15 @@ import asia.yulinling.workflow.service.MailService; import cn.hutool.core.util.ArrayUtil; import lombok.RequiredArgsConstructor; 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.Service; -import javax.mail.MessagingException; +import jakarta.mail.internet.MimeMessage; +import jakarta.mail.MessagingException; +import java.io.File; /** *

@@ -36,6 +40,7 @@ public class MailServiceImpl implements MailService { @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); @@ -43,6 +48,7 @@ public class MailServiceImpl implements MailService { if (ArrayUtil.isNotEmpty(cc)) { message.setCc(cc); } + mailSender.send(message); } @@ -57,7 +63,18 @@ public class MailServiceImpl implements MailService { */ @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); } /** @@ -72,21 +89,47 @@ 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(); + 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)); + helper.addAttachment(file.getFilename(), 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... cc) throws MessagingException { + 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 file = new FileSystemResource(new File(rscPath)); + helper.addAttachment(rscId, file); + + mailSender.send(message); } } diff --git a/src/main/resources/email/test.html b/src/main/resources/email/test.html new file mode 100644 index 0000000..6d3140b --- /dev/null +++ b/src/main/resources/email/test.html @@ -0,0 +1,22 @@ + + + + + Test Title + + +

+

+ 欢迎使用 TEST HTML + - Powered By +

+ + + + Spring Boot入门首选 + + + +
+ + \ No newline at end of file diff --git a/src/main/resources/static/GitHub.ico b/src/main/resources/static/GitHub.ico new file mode 100644 index 0000000000000000000000000000000000000000..f220ff0680b613a3e0e911e726c2bc931ce2d6d0 GIT binary patch literal 174318 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/templates/welcome.html b/src/main/resources/templates/welcome.html new file mode 100644 index 0000000..8cb8bd9 --- /dev/null +++ b/src/main/resources/templates/welcome.html @@ -0,0 +1,22 @@ + + + + + Title + + + + + \ No newline at end of file diff --git a/src/test/java/asia/yulinling/workflow/service/EmailServiceTest.java b/src/test/java/asia/yulinling/workflow/service/EmailServiceTest.java new file mode 100644 index 0000000..01d5e00 --- /dev/null +++ b/src/test/java/asia/yulinling/workflow/service/EmailServiceTest.java @@ -0,0 +1,101 @@ +package asia.yulinling.workflow.service; + +import asia.yulinling.workflow.WorkFlowMainTests; +import cn.hutool.core.io.resource.ResourceUtil; +import jakarta.mail.MessagingException; +import org.junit.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; +import org.thymeleaf.context.Context; +import org.thymeleaf.TemplateEngine; +import org.thymeleaf.spring6.templateresolver.SpringResourceTemplateResolver; + +import java.net.URL; + +/** + *

+ * 邮件测试 + *

+ * + * @author yulinling + * @date 2025/6/4 + */ +public class EmailServiceTest extends WorkFlowMainTests { + @Autowired + private MailService mailService; + @Autowired + private TemplateEngine templateEngine; + @Autowired + private ApplicationContext applicationContext; + + /** + * 测试简单邮件 + */ + @Test + public void sendSimpleMail() { + mailService.sendSimpleMail("rsgltzyd@hotmail.com", "test", "test content"); + } + + /** + * 测试发送HTML邮件 + * + * @throws MessagingException 邮件异常 + */ + @Test + public void sendHtmlMail() throws MessagingException { + Context context = new Context(); + context.setVariable("project", "mail test"); + context.setVariable("author", "yulinlng"); + context.setVariable("url", "https://github.com/xkcoding/spring-boot-demo"); + + String emailTemplate = templateEngine.process("welcome", context); + + mailService.sendHtmlMail("rsgltzyd@hotmail.com", "test", emailTemplate); + } + + /** + * 测试自定义模板HTML邮件 + * + * @throws MessagingException 邮件异常 + */ + @Test + public void sendHtmlMail2() throws MessagingException { + + SpringResourceTemplateResolver resolver = new SpringResourceTemplateResolver(); + resolver.setApplicationContext(applicationContext); + resolver.setCacheable(false); + resolver.setPrefix("classpath:/email/"); + resolver.setSuffix(".html"); + + templateEngine.setTemplateResolver(resolver); + + Context context = new Context(); + context.setVariable("project", "mail test"); + context.setVariable("author", "yulinlng"); + context.setVariable("url", "https://github.com/xkcoding/spring-boot-demo"); + + String emailTemplate = templateEngine.process("test", context); + + mailService.sendHtmlMail("rsgltzyd@hotmail.com", "test", emailTemplate); + } + + /** + * 测试附件邮件 + * + * @throws MessagingException + */ + @Test + public void sendAttachmentsMail() throws MessagingException { + URL resource = ResourceUtil.getResource("static/GitHub.ico"); + mailService.sendAttachmentsMail("rsgltzyd@hotmail.com", "test", "邮件中有附件,请注意查收", resource.getPath()); + } + + @Test + public void sendResourceMail() throws MessagingException { + String rscId = "rscId"; + String content = ""; + URL resource = ResourceUtil.getResource("static/GitHub.ico"); + + mailService.sendResourceMail("rsgltzyd@hotmail.com", "test", content, resource.getPath(), rscId); + } +}