目录
- 一、邮件协议- 在谈谈代码之前,先来了解下邮件的基本协议。  - 电子邮件协议是基于TCP层定义的,主要有下面几个: - SMTP协议
 - SMTP 是 Simple Mail Transfer Protocol 的简称,即简单邮件传输协议,是发送协议。 
 它定义了一组从源地址到目的地址传输邮件的规范,并支持在传送过程中通过不同网络主机实现中转及传送。- POP3协议
 - POP3是 Post Office Protocol 3 的简称,属于接收协议,POP3是即POP(邮局协议)的第3个版本,也是因特网电子邮件的第一个离线协议。 
 它规定了终端如何接入远程的邮件服务器并下载电子邮件。- IMAP协议
 - IMAP的全称是 Internet Mail Access Protocol,即交互式邮件访问协议,是一种支持同步接收的协议。 
 该协议由斯坦福大学在1986年研发,目前是最流行的邮件收取功能协议。
 开启IMAP功能之后,电子邮件客户端可同步接收服务端的邮件,无论在客户端还是服务端上的操作都会反馈到另一方,比如删除、标记等;
 此外IMAP还支持只对选中的部分邮件进行收取,这在POP协议上是做不到的。- 关于数据传输- 大多人都知道,电子邮件的传输采用了Base64编码对邮件内容进行包装,这是一种基于64个可打印字符来表示二进制数据的方法。  - 如上是Base64编码的字符映射表,64个字符可对应6个bit位。 
 一个字节是8个bit位,那么3个字节刚好需要4个Base64的字符来表示,而3个字节(4个字符)也是Base64编码的最小单位,
 在编码过程中对于不足的部分采用"="号来补齐,如下: - 另外一个需要知道的协议是MIME(Multipurpose Internet Mail Extensions),即多用途互联网邮件扩展 
 在前面介绍SpringBoot-MiMe类型处理的文章中提到过,这是一种用来定义文档性质及格式的标准。
 一段内容,是文本、图片、音频,还是二进制,都通过MIME类型来进行声明和解析。- 常见的MIME - 内容 - 后缀 - MIME - 普通文本 - .txt - text/plain - RTF文本 - .rtf - application/rtf - PDF文档 - .pdf - application/pdf - Word文件 - .word - application/msword - PNG图像 - .png - image/png - GIF图形 - .gif - image/gif - JPEG图形 - .jpg - image/jpeg - 二、SpringBoot 与邮件- SpringBoot 是一个脚手架,邮件功能其实是通过 JavaMail来实现的。 
 JavaMail是Java实现邮件收发功能的标准组件,其提供了一组简便的API来实现邮件处理,同时也支持各类认证协议。
 这里不对JavaMail 做展开介绍,由于有了SpringBoot,实现一个邮件发送功能变得非常简单。- 下面将展示几个例子,包括: - 使用springboot 发送文本邮件;
- 如何发送带附件的邮件;
- 如何使用 thymeleaf 发送模板邮件,支持HTML格式。
 - A. 添加依赖- spring-boot-starter-mail是一个封装了邮件功能的组件,依赖如下: - <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> <version>${spring-boot.version}</version> </dependency>- B. 配置文件- 按下面的配置设置SMTP服务器、用户密码、及收发人信息 - //smtp 服务器 spring.mail.host=smtp.qq.com //smtp 端口 spring.mail.port=25 //发送用户名 spring.mail.username=xxx //发送密码 spring.mail.password=xxx //收发人 spring.mail.from=xxx@qq.com spring.mail.to=xxx@qq.com //启用鉴权 spring.mail.properties.mail.smtp.auth=true //不使用tls spring.mail.properties.mail.smtp.starttls.enable=
