Spring-boot-email邮件
前言
电子邮件(e-mail)属于互联网一种最为典型的应用,虽然伴随着即时通信软件的广泛使用,它的通信功能有所减弱,但是在账号注册、账号安全以及工作对接方面仍然占有很大应用空间。电子邮件系统包含三个重要的组件,即用户代理、邮件服务器,以及邮件发送协议(如SMTP)和邮件读取协议(如POP3)。Spring-boot-email属于用户代理部分,使用SMTP、IMAP、MIME等协议进行邮件发送,它们的底层通信原理都是TCP的连接。
背景知识
电子邮件由信封(envelope)和内容(content)两部分内容构成,在邮件信封上,最重要的就是收件人的地址,TCP/IP体系的邮件系统规定邮件地址(e-mail address)的格式如下:
用户名@邮件服务器的域名
前端界面开发的程序员需要注意的是,这个邮箱标准格式在软件开发中通常用来做格式规则校验,以作为输入有效性的判定,所以很有必要了解一下标准的邮件地址格式要求。
SMTP简单邮件传送协议,SMTP规定了14条命令和21中应答信息。每条命令由几个字母组成,而每一种应答的信息通畅只有一行信息,由一个3位数字的代码(如200 OK)开始,后面带上简单的说明信息。了解邮件底层协议是为了更好应对邮件发送过程中的各种异常,下面是SMTP的一些常用命令:
HELO:由客户端连接SMTP服务器后发送,表明连接开始
AUTH LOGIN:客户端与SMTP服务端认证过程,填写相应的账号密码。
MAIL:邮件传送开始,后面有发件人地址,如MAIL FROM:<xxxx@xxx>
RCPT:可以是一到多个,代表收件人地址,如RCPT TO:<xxxx@xxx>
DATA:为邮件内容,以<CRLF>.<CRLF>结束
SEND:向用户发生邮件
REST:取消客户端与服务端的事务,释放当前的连接
QUIT:终止客户端与SMTP服务器的连接
此外还有To和Subject两个关键字,用来填入一个或多个收件人的电子邮件地址以及邮件主题,下面使用命令行来发送一封邮件,当然也可以编写程序将协议命令封装起来,然后建立TCP连接进行SMTP邮件发送。
1、启用window Telnet客户端功能,控制面板->程序和功能->启用和关闭Windows功能->勾选Telnet客户端选项
2、连接smtp.163.com邮件服务器
telnet smtp.163.com 25
3、登录
Base64加密后的用户名
Base64加密后的密码
4、设置发件人
MAIL FROM:<xxx@163.com>
5、设置收件人
RCPT TO:<xxxxx@xxxx>
6、填写邮件内容
DATA
from:<18578776389@163.com>
to:<15507738841@163.com>
subject:good night
This is an email from command line. just want to learn how to use SMTP command. thank you.
小结:
通过底层的命令来发送邮件可以加深对SMTP协议的理解,但是SMTP协议只支持ASCLL的编码,这显然不能满足我们日益增多的互联网信息需求,于是MIME拓充协议提出,它在邮件首部说明了邮件的数据类型(文本、声音、图像、影像等),它底层仍然是SMTP,只不过是将信息内容增加了编码,和协议功能拓展而已,也即实现了协议的向下兼容。
Spring-boot-email
Spring-boot由于底层框架帮助我们实现了SMTP邮件发送的协议管理,我们只需按照框架编程即可实现邮件发送,大大减轻编程的难度。
在pom.xml中加入spring email的依赖支持
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId>
</dependency>
在application.properties文件中输入配置信息
spring.mail.host=smtp.163.com
spring.mail.username=yourmail address
spring.mail.password=yourpassword
spring.mail.default-encoding=UTF-8
编写smtp邮件发送代码
@Service
public class MailService {@Value("${spring.mail.username}")private String from;private final Logger logger= LoggerFactory.getLogger(this.getClass());@Autowiredprivate JavaMailSender mailSender;/*** 发送简单文本的邮件方法* @param to* @param subject* @param content*/public void sendSimpleMail(String to,String subject,String content){SimpleMailMessage message = new SimpleMailMessage();message.setTo(to);message.setFrom(from);message.setSubject(subject);message.setText(content);mailSender.send(message);}/*** 发送HTML邮件的方法* @param to* @param subjecr* @param content*/public void sendHtmlMail(String to ,String subjecr,String content){MimeMessage message = mailSender.createMimeMessage();try {MimeMessageHelper helper = new MimeMessageHelper(message,true);helper.setTo(to);helper.setFrom(from);helper.setSubject(subjecr);helper.setText(content,true);mailSender.send(message);logger.info("发送静态邮件成功");} catch (MessagingException e) {logger.error("发送静态邮件失败:",e);}}
}
编写smtp邮件发送测试代码
@RunWith(SpringRunner.class)
@SpringBootTest
public class MailServiceTest {@ResourceMailService mailService;@ResourceTemplateEngine templateEngine;@Testpublic void sendSpimpleMailTest(){mailService.sendSimpleMail("15507738841@163.com","这是一封简单文本邮件","明天很美好,今天很重要");}@Testpublic void sendHtmlMailTest() throws MessagingException {String content="<html>\n"+"<body>\n"+"<h3>hello 明天要加油哦!</h3>\n"+"</body>\n"+"</html>";mailService.sendHtmlMail("15507738841@163.com","这是一封html邮件",content);}
}
常见邮件发送错误码
•421 HL:REP 该IP发送行为异常,存在接收者大量不存在情况,被临时禁止连接。请检查是否有用户发送病毒或者垃圾邮件,并核对发送列表有效性;
•450 MI:CEL 发送方出现过多的错误指令。请检查发信程序;
•500 Error: bad syntaxU 发送的smtp命令语法有误;
•550 MI:NHD HELO命令不允许为空;
•550 MI:IMF 发信人电子邮件地址不合规范;
•550 MI:STC 发件人当天的连接数量超出了限定数量,当天不再接受该发件人的邮件。请控制连接次数;
•552 Requested mail action aborted: exceeded mailsize limit 发送的信件大小超过了网易邮箱允许接收的最大限制;
•553 Requested action not taken: NULL sender is not allowed 不允许发件人为空,请使用真实发件人发送;
•553 authentication is required SMTP需要身份验证,请检查客户端设置;
•554 DT:SPM 发送的邮件内容包含了未被许可的信息,或被系统识别为垃圾邮件。请检查是否有用户发送病毒或者垃圾邮件;
•554 IP is rejected, smtp auth error limit exceed 该IP验证失败次数过多,被临时禁止连接。请检查验证信息设置;
总结
电子邮件依赖SMTP、IMAP、POP3等协议,SMTP协议由一些命令和应答信息构成,我们可以根据相关命令协议进行程序开发或者借用springboot等框架来发送邮件。参考:
http://help.163.com/09/1224/17/5RAJ4LMH00753VB8.html
Spring-boot-email邮件相关推荐
- Spring Boot 发邮件和附件,超实用!
Spring Boot集成邮件服务竟如此简单,快速掌握邮件业务类的核心逻辑和企业邮件的日常服务. 什么是SMTP? SMTP全称为Simple Mail Transfer Protocol(简单邮件传 ...
- 基于spring boot的邮件微服务消息中间件设计与实现 毕业论文+系统功能图v1.0.vsdx+项目源码
下载地址:https://download.csdn.net/download/m0_63680064/36065411 项目介绍: 基于spring boot的邮件微服务消息中间件设计与实现 毕业论 ...
- Spring Boot 配置邮件发送
本文目录: 1.前言 2.Spring Boot配置步骤 Ⅰ.添加依赖 Ⅱ.修改配置文件 Ⅲ.POP3/SMTP服务 Ⅳ.封装邮件工具类 1.定义接口IMailService.interface: 2 ...
- 邮件发送类_10 分钟实现 Spring Boot 发生邮件功能
基础知识 什么是SMTP? 什么是IMAP? 什么是POP3? IMAP和POP3协议有什么不同呢? 进阶知识 什么是JavaMailSender和JavaMailSenderImpl? 如何通过Ja ...
- spring boot 邮件端口_1 分钟教会你用 Spring Boot 发邮件
Spring Boot 提供了一个发送邮件的简单抽象,使用的是下面这个接口. org.springframework.mail.javamail.JavaMailSender Spring Boot ...
- 1 分钟教会你用 Spring Boot 发邮件
Spring Boot 提供了一个发送邮件的简单抽象,使用的是下面这个接口. org.springframework.mail.javamail.JavaMailSender Spring Boot ...
- 10 分钟实现 Spring Boot 发生邮件功能
来源:yizhiwazi jianshu.com/p/5eb000544dd7 基础知识 什么是SMTP? 什么是IMAP? 什么是POP3? IMAP和POP3协议有什么不同呢? 进阶知识 什么是J ...
- exchange邮件服务器_基于Spring Boot快速实现发送邮件功能
邮件在项目中经常会被用到,比如用邮件发送通知.比如,通过邮件注册.认证.找回密码.系统报警通知.报表信息等.本篇文章带大家通过SpringBoot快速实现一个发送邮件的功能. 邮件协议 下面先简单了解 ...
- Spring Boot 之发送邮件
目录 Spring Boot 之发送邮件 简介 API 配置 实战 完整示例 引申和引用 Spring Boot 之发送邮件 简介 API 配置 实战 引入依赖 配置邮件属性 Java 代码 完整示例 ...
- 通过Java和Spring Boot应用程序将Gmail用作SMTP服务器
Gmail用户可以使用Gmail的SMTP服务器smtp.gmail.com从其Spring Boot应用程序发送电子邮件. 为此,让我们在应用程序中进行一些设置: 在application.prop ...
最新文章
- MFC最小化到系统托盘
- 通过cat /proc/cpuinfo看处理器特点
- 浏览器支持java_为什么我下载了java并提示浏览器不支持j
- [HDU]2098分拆素数和
- JavaScript实现省市二级联动
- codesys 简单案例_第一章:初识Codesys-1.4从一个示例程序讲起
- 如何删除一个VDP服务器
- linux文本处理常用指令总结
- java对象怎么创建_java对象是怎么创建出来的
- 计算机学院李成伟,【迎新专题二】校长李成伟带队视察迎新工作
- 斐讯k2p官方固件如何登陆ssh后台
- 接入华为推送用API给iOS应用发消息时如何获取access_token?
- Android基于百度OCR识别图片中的文字
- 论文投稿排版时,Word首页插入连续分节符,后面的内容自动到下一页
- 用AlexNet训练MSTAR数据集
- 截至9月28日聚合支付牌照知多少,附名单
- FlashFXP 便携版,U盘版,真正绿色
- [拉格朗日乘数法 二分] BZOJ 2876 [Noi2012]骑行川藏
- 财务数据填报怎样做?用这个报表工具轻松搞定!_光点科技
- java.util.zip 类 ZipEntry
热门文章
- JavaWeb开发分享:WRO
- 【数据结构】——二叉树的创建、计算叶子结点个数、递归遍历
- 由硫化铅/硒化物和碲化物(PbX:PbS,PbSe和PbTe)制成的QD钙钛矿量子点
- pwnable.kr wp leg
- 分析程序员为什么单身
- 什么是cdn节点和cdn节点服务器?
- AUTH权限通用后台管理控制系统、阿里云UI高端大气
- Water Flow Optimizer 水流优化器
- 解决: This Python interpreter is in a conda environment, but the environment has not been activat
- 使用DEM和矢量数据绘制地图