前言

电子邮件(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邮件相关推荐

  1. Spring Boot 发邮件和附件,超实用!

    Spring Boot集成邮件服务竟如此简单,快速掌握邮件业务类的核心逻辑和企业邮件的日常服务. 什么是SMTP? SMTP全称为Simple Mail Transfer Protocol(简单邮件传 ...

  2. 基于spring boot的邮件微服务消息中间件设计与实现 毕业论文+系统功能图v1.0.vsdx+项目源码

    下载地址:https://download.csdn.net/download/m0_63680064/36065411 项目介绍: 基于spring boot的邮件微服务消息中间件设计与实现 毕业论 ...

  3. Spring Boot 配置邮件发送

    本文目录: 1.前言 2.Spring Boot配置步骤 Ⅰ.添加依赖 Ⅱ.修改配置文件 Ⅲ.POP3/SMTP服务 Ⅳ.封装邮件工具类 1.定义接口IMailService.interface: 2 ...

  4. 邮件发送类_10 分钟实现 Spring Boot 发生邮件功能

    基础知识 什么是SMTP? 什么是IMAP? 什么是POP3? IMAP和POP3协议有什么不同呢? 进阶知识 什么是JavaMailSender和JavaMailSenderImpl? 如何通过Ja ...

  5. spring boot 邮件端口_1 分钟教会你用 Spring Boot 发邮件

    Spring Boot 提供了一个发送邮件的简单抽象,使用的是下面这个接口. org.springframework.mail.javamail.JavaMailSender Spring Boot ...

  6. 1 分钟教会你用 Spring Boot 发邮件

    Spring Boot 提供了一个发送邮件的简单抽象,使用的是下面这个接口. org.springframework.mail.javamail.JavaMailSender Spring Boot ...

  7. 10 分钟实现 Spring Boot 发生邮件功能

    来源:yizhiwazi jianshu.com/p/5eb000544dd7 基础知识 什么是SMTP? 什么是IMAP? 什么是POP3? IMAP和POP3协议有什么不同呢? 进阶知识 什么是J ...

  8. exchange邮件服务器_基于Spring Boot快速实现发送邮件功能

    邮件在项目中经常会被用到,比如用邮件发送通知.比如,通过邮件注册.认证.找回密码.系统报警通知.报表信息等.本篇文章带大家通过SpringBoot快速实现一个发送邮件的功能. 邮件协议 下面先简单了解 ...

  9. Spring Boot 之发送邮件

    目录 Spring Boot 之发送邮件 简介 API 配置 实战 完整示例 引申和引用 Spring Boot 之发送邮件 简介 API 配置 实战 引入依赖 配置邮件属性 Java 代码 完整示例 ...

  10. 通过Java和Spring Boot应用程序将Gmail用作SMTP服务器

    Gmail用户可以使用Gmail的SMTP服务器smtp.gmail.com从其Spring Boot应用程序发送电子邮件. 为此,让我们在应用程序中进行一些设置: 在application.prop ...

最新文章

  1. MFC最小化到系统托盘
  2. 通过cat /proc/cpuinfo看处理器特点
  3. 浏览器支持java_为什么我下载了java并提示浏览器不支持j
  4. [HDU]2098分拆素数和
  5. JavaScript实现省市二级联动
  6. codesys 简单案例_第一章:初识Codesys-1.4从一个示例程序讲起
  7. 如何删除一个VDP服务器
  8. linux文本处理常用指令总结
  9. java对象怎么创建_java对象是怎么创建出来的
  10. 计算机学院李成伟,【迎新专题二】校长李成伟带队视察迎新工作
  11. 斐讯k2p官方固件如何登陆ssh后台
  12. 接入华为推送用API给iOS应用发消息时如何获取access_token?
  13. Android基于百度OCR识别图片中的文字
  14. 论文投稿排版时,Word首页插入连续分节符,后面的内容自动到下一页
  15. 用AlexNet训练MSTAR数据集
  16. 截至9月28日聚合支付牌照知多少,附名单
  17. FlashFXP 便携版,U盘版,真正绿色
  18. [拉格朗日乘数法 二分] BZOJ 2876 [Noi2012]骑行川藏
  19. 财务数据填报怎样做?用这个报表工具轻松搞定!_光点科技
  20. java.util.zip 类 ZipEntry

热门文章

  1. JavaWeb开发分享:WRO
  2. 【数据结构】——二叉树的创建、计算叶子结点个数、递归遍历
  3. 由硫化铅/硒化物和碲化物(PbX:PbS,PbSe和PbTe)制成的QD钙钛矿量子点
  4. pwnable.kr wp leg
  5. 分析程序员为什么单身
  6. 什么是cdn节点和cdn节点服务器?
  7. AUTH权限通用后台管理控制系统、阿里云UI高端大气
  8. Water Flow Optimizer 水流优化器
  9. 解决: This Python interpreter is in a conda environment, but the environment has not been activat
  10. 使用DEM和矢量数据绘制地图