SpringBoot邮件发送怎么玩?比官方自带的Mail更好用的三方工具

关注我的公众号:【编程朝花夕拾】,可获取首发内容。

01 引言

官方自带的spring-boot-starter-mail针对普通的文本邮件已经很方便了,但是针对附件、html等还是不太友好的。SpringBoot如果开启了监控spring-boot-starter-actuator,服务器会实时检测邮件服务器是否正常,如果服务器异常,就会反复重试,从而引起服务器的崩溃,不要问我怎么知道的,说多了都是泪。

而今天要介绍的三方库,针对复杂的邮件类型,应对起来游刃有余。

02 Simple Java Mail

2.1 简介

Simple Java Mail 是一个拥有超简洁 API 的邮件库。它是世界上使用起来最简便的(Java)邮件库,可通过 SMTP 发送电子邮件。这个库让你无需处理诸如MimeMessage之类的底层API、繁琐的trycatch结构、内部类以及其他无用的东西。它是一个功能强大、特性完备的邮件库,同时又小巧且轻量。

核心模块:

核心依赖:

  • org.slf4j:slf4j-api
  • com.sun.mail:jakarta.mail
  • com.sun.activation:jakarta.activation
  • jakarta.xml.bind:jakarta.xml.bind-api
  • jakarta.annotation:jakarta.annotation-api
  • com.sanctionco.jmail:jmail (address validation)
  • com.pivovarit:throwing-function (improved Streams api)

GitHub地址:github.com/bbottema/si...

官网地址:www.simplejavamail.org/

2.2 Maven依赖

xml 复制代码
<dependency>
    <groupId>org.simplejavamail</groupId>
    <artifactId>simple-java-mail</artifactId>
    <version>8.12.6</version>
</dependency>

2.3 案例

java 复制代码
@Test
void test01() {
    Mailer mailer = MailerBuilder
            .withSMTPServer("smtp.163.com", 465, 
                    "xxxx@163.com", "授权码"
            )
            .withTransportStrategy(TransportStrategy.SMTPS)
            .buildMailer();


    Email email = EmailBuilder.startingBlank()
            .from( "xxxxx@163.com")
            .to( "xxxx@126.com")
            .withSubject("测试邮件")
            .withHTMLText("<h1>测试邮件123</h1>")
            .buildEmail();


    mailer.sendMail(email);
}

通过MailerBuilder构建发送的客户端,通过EmailBuilder构建发送邮件的具体信息。

内容更是支持丰富:

还有其他的特性,可以自行探索。

2.4 注意事项

如果在项目中正常使用,客户端没有必要每次都创建,只需要注册到Spring容器中,随用随取。

java 复制代码
@Bean
public Mailer inhouseMailer() {
    return MailerBuilder
        .withSMTPServer(...)
        .buildMailer();
}

2.5 避坑指南

小编在使用8.12.6版本时,出现了一些包找不到的问题:

由于又引入两个依赖才解决问题:

xml 复制代码
<dependency>
    <groupId>jakarta.mail</groupId>
    <artifactId>jakarta.mail-api</artifactId>
    <version>2.1.3</version>
</dependency>
<dependency>
    <groupId>jakarta.activation</groupId>
    <artifactId>jakarta.activation-api</artifactId>
    <version>2.1.4</version>
</dependency>

从更新日志来看,v8.11.0已经升级了但部分依赖的版本:

但是,实际发现版本并没有升上去。

也有可能小编本地JDK的问题,这里就不细说了。总之问题通过升级版本可以解决。

03 SMS4J

3.1 简介

SMS4J为短信聚合框架,帮您轻松集成多家短信服务,解决接入多个短信SDK的繁琐流程。 SMS4J着重解决短信发送的问题,但是作者也将邮件的发送也融合了进去。并且拥有独立依赖。

GitHub地址:github.com/dromara/sms...

Gitee地址:gitee.com/dromara/sms...

官方文档:sms4j.com

3.2 Maven依赖

因为小编的本地JDK17,所以使用:

xml 复制代码
<dependency>
    <groupId>org.dromara.sms4j</groupId>
    <artifactId>sms4j-email-jakarta-core</artifactId>
    <version>3.3.5</version>
</dependency>

3.3 案例

java 复制代码
@Test
void test02() {
    MailSmtpConfig config = MailSmtpConfig.builder()
            .fromAddress("xxxx@163.com")
            .smtpServer("smtp.163.com")
            .port("465")
            .username(xxx@163.com")
            .password("授权码")
            .build();

    MailFactory.put("mailClient", config);

    MailMessage message = MailMessage.Builder()
            .mailAddress("xxxxx@126.com")
            .title("测试邮件2")
            .htmlContent("<h1>测试邮件  this is body</h1>")
            .build();

    // 发送邮件:指定黑名单
    MailFactory.createMailClient("mailClient", () -> List.of("")).send(message);
}

MailSmtpConfig构建客户端的配置,通过MailFactory创建客户端。MailMessage构建邮件内容。邮件发送还支持黑名单。邮件内容支持多种模式:

使用的注意事项同上面的案例。

3.4 邮箱监听

邮箱监听可以监听到某个IMAP协议邮箱中收到的邮件,并对其进行一定的处理。小编在测试发现了异常。

java 复制代码
@Test
void test03() throws IOException {
    MailImapConfig config2 = new MailImapConfig();
    config2.setImapServer("imap.163.com");
    config2.setAccessToken("授权码");
    config2.setUsername("xxxx@163.com");

    MonitorFactory.put("ws_Monitor", config2, monitorMessage -> {
        System.out.println(JSON.toJSONString(monitorMessage));
        return true;
    });
    MonitorFactory.start("ws_Monitor");
    // MonitorFactory.stop("ws_Monitor");

    System.in.read();
}

但是执行的时候:

该问题未能解决。查阅资料,是因为邮箱因为安全问题被拒绝了。

04 小结

Spring Boot提供了强大的邮件发送支持,而SMS4jSimple Java Mail则在此基础上提供了更多高级功能和更简洁的API

大家使用的时候,有没有遇到小编的问题呢?评论区留言。

相关推荐
武子康2 小时前
大数据-150 Apache Druid 单机部署实战:架构速览、启动清单与故障速修
大数据·后端·apache
IT_陈寒2 小时前
Redis 高并发实战:我从 5000QPS 优化到 5W+ 的7个核心策略
前端·人工智能·后端
songroom2 小时前
Rust: 量化策略回测与简易线程池构建、子线程执行观测
开发语言·后端·rust
大G的笔记本2 小时前
Java JVM 篇常见面试题
java·开发语言·jvm
绝无仅有2 小时前
某东电商平台的MySQL面试知识点分析
后端·面试·架构
ZHE|张恒2 小时前
深入理解 Java 双亲委派机制:JVM 类加载体系全解析
java·开发语言·jvm
Apifox2 小时前
如何在 Apifox 中使用「模块」合理地组织接口
前端·后端·测试
q_19132846952 小时前
基于SpringBoot+Vue2的美食菜谱美食分享平台
java·spring boot·后端·计算机·毕业设计·美食