关于java:基于Spring-Boot快速实现发送邮件功能

34次阅读

共计 3630 个字符,预计需要花费 10 分钟才能阅读完成。

邮件在我的项目中常常会被用到,比方用邮件发送告诉。比方,通过邮件注册、认证、找回明码、零碎报警告诉、报表信息等。本篇文章带大家通过 SpringBoot 疾速实现一个发送邮件的性能。

邮件协定

上面先简略理解一下常见的邮件协定。罕用的电子邮件协定有 SMTP、POP3、IMAP4,它们都隶属于 TCP/IP 协定簇,默认状态下,别离通过 TCP 端口 25、110 和 143 建设连贯。

SMTP 协定

SMTP 的全称是“Simple Mail Transfer Protocol”,即简略邮件传输协定。它是一组用于从源地址到目标地址传输邮件的标准,通过它来管制邮件的直达形式。它的一个重要特点是它可能在传送中接力传送邮件,即邮件能够通过不同网络上的主机接力式传送。

SMTP 认证,简略地说就是要求必须在提供了账户名和明码之后才能够登录 SMTP 服务器,这就使得那些垃圾邮件的散播者无可乘之机。减少 SMTP 认证的目标是为了使用户防止受到垃圾邮件的侵扰。SMTP 已是事实上的 E -Mail 传输的规范。

POP 协定

POP 邮局协定负责从邮件服务器中检索电子邮件。它要求邮件服务器实现上面几种工作之一:从邮件服务器中检索邮件并从服务器中删除这个邮件;从邮件服务器中检索邮件但不删除它;不检索邮件,只是询问是否有新邮件达到。

POP 协定反对多用户互联网邮件扩大,后者容许用户在电子邮件上附带二进制文件,如文字处理文件和电子表格文件等,实际上这样就能够传输任何格局的文件了,包含图片和声音文件等。在用户浏览邮件时,POP 命令所有的邮件信息立刻下载到用户的计算机上,不在服务器上保留。

POP3(Post Office Protocol 3) 即邮局协定的第 3 个版本, 是因特网电子邮件的第一个离线协定规范。

IMAP 协定

互联网信息拜访协定(IMAP)是一种优于 POP 的新协定。和 POP 一样,IMAP 也能下载邮件、从服务器中删除邮件或询问是否有新邮件,但 IMAP 克服了 POP 的一些毛病。例如,它能够决定客户机申请邮件服务器提交所收到邮件的形式,申请邮件服务器只下载所选中的邮件而不是全副邮件。客户机可先浏览邮件信息的题目和发送者的名字再决定是否下载这个邮件。

通过用户的客户机电子邮件程序,IMAP 可让用户在服务器上创立并治理邮件文件夹或邮箱、删除邮件、查问某封信的一部分或全部内容,实现所有这些工作时都不须要把邮件从服务器下载到用户的集体计算机上。

反对 IMAP 的罕用邮件客户端有:ThunderMail,Foxmail,Microsoft Outlook 等。

SpringBoot 集成 Mail 性能

如果未应用 SpringBoot,须要本人去封装音讯体等信息,实现起来还是比较复杂的。但基于 Spring Boot 进行邮件发送,简直能够说只用引入 spring-boot-starter-mail 就能够轻松实现邮件的发送。

从实质上来说是因为 Spring 推出了对于 Mail 的 JavaMailSender 类,基于该类 Spring Boot 又进一步封装,从而实现了轻松发送邮件的集成。而且 JavaMailSender 类提供了弱小的邮件发送能力,反对各种类型的邮件发送。

依赖配置

集成步骤非常简单,在我的项目中增加如下依赖:

<dependency> 
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
</dependency>

配置文件

在 application.properties 中增加邮箱配置,对应参数项曾经内置好,依据具体情况进行配置即可。

# 邮箱服务器地址
spring.mail.host=smtp.qq.com
spring.mail.username=admin@choupangxia.com
spring.mail.password=123456
spring.mail.default-encoding=UTF-8

其中第一个 host(邮件服务器地址)参数,不同的邮箱有所不同,下面是 QQ 邮箱的 host。163 邮箱为 smtp.163.com、126 邮箱为 smtp.126.com。

username 和 password 项为邮箱对应的用户名和明码,明码并不是登录明码,而是开启 POP3 之后设置的客户端受权明码。

以 QQ 邮箱为例,进行明码的配置和获取。首先登录 QQ 邮箱,找“设置”,“账户”。

在上面找到“POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV 服务”,抉择第二项中的“IMAP/SMTP 服务”,进行开启。

开启胜利,会显示如下页面:

页面中便蕴含了受权码,也就是咱们我的项目中的明码。此时将该受权码复制到 password 处即可。

发送文本邮件

实现了下面的配置,发送性能的实现便极其简略了,间接在我的项目中注入 JavaMailSender 而后调用其 send 办法便可进行邮件的发送。

以单元测试的模式发送邮件如下:

@RunWith(SpringRunner.class)
@SpringBootTest
public class MailTests {

    @Resource
    private JavaMailSender javaMailSender;

    @Test
    public void sendMail() {SimpleMailMessage msg = new SimpleMailMessage();
        msg.setFrom("123@qq.com");
        msg.setTo("123@qq.com");
        msg.setSubject("程序新视界");
        msg.setText("技术分享");
        javaMailSender.send(msg);
    }
}

程序很简略,创立一个 SimpleMailMessage 对象,设置从哪个(from)账号发送到(to)哪个账号,邮件的题目(subject)和内容(text)别离是什么。

执行单元测试,稍等片刻,邮箱便收到了邮件。如果执行的过程中呈现权限验证相干的异样,则须要检查一下相干的配置是否正确。

如果须要抄送其他人,通过如下格局新增一个或多个收件地址。

// 抄送邮箱
msg.setCc("abc@126.com","def@126.com");

发送富文本邮件

失常来说,咱们的邮件会有不同的格局,应用下面的 SimpleMailMessage 不可能很好的丰盛邮件内容,也不反对 html 的解析。

Spring Boot 反对应用 HTML 发送邮件是通过 MimeMessage 来实现的。看具体的示例代码:

@Test
public void sendHtmlMail() {
    String content="<html>\n" +
            "<body>\n" +
            "<h3>hello world ! 这是一封 html 邮件!</h3>\n" +
            "</body>\n" +
            "</html>";

    MimeMessage message = javaMailSender.createMimeMessage();
    try {
        // 第二个参数 true 示意须要创立一个 multipart message
        MimeMessageHelper helper = new MimeMessageHelper(message, true);
        helper.setFrom("123@qq.com");
        helper.setTo("123@qq.com");
        helper.setSubject("程序新视界");
        helper.setText(content, true);

        javaMailSender.send(message);
    } catch (MessagingException e){System.out.println("发送邮件异样");
    }
}

此处应用了 MimeMessageHelper 来设置对应的参数信息,但在调用 MimeMessageHelper 对应的 setter 办法时会抛出 MessagingException 异样,须要进行非凡解决。

下面的 content 的内容,如果应用 SimpleMailMessage 对象进行发送,邮件的内容是蕴含 html 标签的内容,而不是间接出现 html 标签所须要展现的格局。

MimeMessageHelper 反对发送简单邮件模板,反对文本、附件、HTML、图片等。比方须要发送附件,则在下面的代码中通过调用 helper 的 addAttachment(fileName, file) 办法即可。

咱们这里就不再拓展其余性能,大家可自行进行尝试。

其余扩大

下面只是通过单元测试的模式展现了基于 Spring Boot 发送邮件,当然,在生产环境中的利用场景要比下面的简单的多。比方,要思考邮件模板、对外接口、异样解决、成功率等问题。大家可在此基础上进行拓展。

源码地址:https://github.com/secbr/spri…

<center> 程序新视界 :精彩和成长都不容错过 </center>

正文完
 0