阿里云企业邮箱基于Spring Boot快速实现发送邮件功能

邮件在项目中经常会被用到,比如用邮件发送通知。比如,通过邮件注册、认证、找回密码、系统报警通知、报表信息等。本篇文章带大家通过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类提供了强大的邮件发送能力,支持各种类型的邮件发送。

Spring依赖配置

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

复制代码
<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-mail</artifactId>
    </dependency>

Spring配置项

复制代码
spring:
  mail:
    host: smtp.qiye.aliyun.com
    password: 阿里云邮箱登陆密码
    username: xxx@企业.com
    port:
    default-encoding: UTF-8
    protocol: smtp
    properties:
      mail.smtp.auth: true
      mail.smtp.starttls.enable: true
      mail.smtp.starttls.required: true
      mail.smtp.socketFactory.port: 465
      mail.smtp.socketFactory.class: javax.net.ssl.SSLSocketFactory
      mail.smtp.socketFactory.fallback: false


email_address_list: 用户1@企业.com,用户2@企业.com

发送邮件代码如下:

复制代码
    @Autowired
    private JavaMailSenderImpl mailSender;
    @Value("${email_address_list}")
    private String emailAddressList;

private void sendEmail(String subject, String text) {
        String[] emailList = emailAddressList.split(",");

        if (emailList.length > 0) {
            SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
            simpleMailMessage.setFrom("用户1@企业.com");
            simpleMailMessage.setTo(emailList);
            simpleMailMessage.setSubject(subject);
            simpleMailMessage.setText(text);
            try {
                mailSender.send(simpleMailMessage);
            } catch (MailException e) {
                log.info("邮件发送失败:",e);
            }
        }
    }

测试结果:

参考阿里云官方文档:阿里云文档

相关推荐
weixin_307779133 小时前
Azure Data Factory ETL设计与调度最佳实践
数据仓库·性能优化·云计算·azure·etl
李白的粉3 小时前
基于springboot的在线教育系统
java·spring boot·毕业设计·课程设计·在线教育系统·源代码
小马爱打代码4 小时前
SpringBoot原生实现分布式MapReduce计算
spring boot·分布式·mapreduce
iuyou️4 小时前
Spring Boot知识点详解
java·spring boot·后端
一弓虽4 小时前
SpringBoot 学习
java·spring boot·后端·学习
来自星星的猫教授6 小时前
spring,spring boot, spring cloud三者区别
spring boot·spring·spring cloud
Leon-zy6 小时前
【云计算】云计算中IaaS、PaaS、SaaS介绍
云原生·云计算·paas
乌夷7 小时前
使用spring boot vue 上传mp4转码为dash并播放
vue.js·spring boot·dash
A阳俊yi9 小时前
Spring Boot日志配置
java·spring boot·后端
苹果酱05679 小时前
2020-06-23 暑期学习日更计划(机器学习入门之路(资源汇总)+概率论)
java·vue.js·spring boot·mysql·课程设计