当前位置: 首页 > news >正文

阿里云企业邮箱基于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.compassword: 阿里云邮箱登陆密码username: xxx@企业.comport:default-encoding: UTF-8protocol: smtpproperties:mail.smtp.auth: truemail.smtp.starttls.enable: truemail.smtp.starttls.required: truemail.smtp.socketFactory.port: 465mail.smtp.socketFactory.class: javax.net.ssl.SSLSocketFactorymail.smtp.socketFactory.fallback: falseemail_address_list: 用户1@企业.com,用户2@企业.com

发送邮件代码如下:

@Autowiredprivate 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);}}}

测试结果:

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

http://www.lryc.cn/news/210335.html

相关文章:

  • 大数据Doris(十三):创建用户和创建数据库并赋予权限
  • 【Unity小技巧】可靠的相机抖动及如何同时处理多个震动
  • Megatron-LM GPT 源码分析(四) Virtual Pipeline Parallel分析
  • IOC课程整理-8 Spring Bean作用域
  • 本地websocket服务端暴露至公网访问【内网穿透】
  • C/C++跨平台构建工具CMake-----灵活添加库并实现开发和生产环境的分离
  • javascript判断对象中是否存在某个字段
  • 网络基础-2
  • 【MySQL索引与优化篇】索引的分类与设计原则
  • 基于Java的民航售票管理系统设计与实现(源码+lw+部署文档+讲解等)
  • 应用案例|基于三维机器视觉的机器人引导电动汽车充电头自动插拔应用方案
  • 基于Java的流浪动物救助管理系统设计与实现(源码+lw+部署文档+讲解等)
  • 关于错误javax.net.ssl.SSLException: Received close_notify during handshake
  • JAVA实现校园失物招领管理系统 开源
  • 基于Java的体育竞赛成绩管理系统设计与实现(源码+lw+部署文档+讲解等)
  • 网络设备远程登录和管理-双厂商
  • 深度学习使用Keras进行多分类
  • Node模块化开发
  • 震惊!原来BUG是这么理解的!什么是BUG?软件错误(BUG)的概念
  • JEnv使用初体验
  • CCF CSP认证历年题目自练 Day39
  • 【用户登录】模块之登录认证+鉴权业务逻辑
  • 开启CETOS 裸奔了一年的服务器开启firewall防火墙
  • eslint识别不了别名解决方法
  • 【windows 脚本】netsh命令
  • 二叉树三种遍历的递归与非递归写法
  • 虹科 | 解决方案 | 汽车示波器 远程诊断方案
  • Unity ScrollView最底展示
  • linux常用基本命令大全的使用(三)
  • Qt 实现软件启动界面动画