前言
电子邮件系统(Electronic mail system,E-mail)由用户代理MUA(Mail User Agent)以及邮件传输代理MTA(Mail Transfer Agent),和邮件投递代理MDA(Mail Delivery Agent)组成,MUA指用于收发Mail的程序,MTA指将来自MUA的信件转发给指定用户的程序,MDA就是将MTA接收的信件依照信件的流向(送到哪里)将该信件放置到本机账户下的邮件文件中(收件箱),当用户从 MUA 中发送一份邮件时,该邮件会被发送送到MTA,而后在一系列MTA中转发,直到它到达最终发送目标为止。
SMTP 协议
SMTP 的全称是“Simple Mail Transfer Protocol”,即简单邮件传输协议。它是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式。SMTP 协议属于 TCP/IP 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。SMTP 服务器就是遵循 SMTP 协议的发送邮件服务器。
SMTP 认证,简单地说就是要求必须在提供了账户名和密码之后才可以登录 SMTP 服务器,这就使得那些垃圾邮件的散播者无可乘之机。增加 SMTP 认证的目的是为了使用户避免受到垃圾邮件的侵扰。
POP3 协议
POP3是Post Office Protocol 3的简称,即邮局协议的第3个版本,它规定怎样将个人计算机连接到Internet的邮件服务器和下载电子邮件的电子协议。它是因特网电子邮件的第一个离线协议标准,POP3允许用户从服务器上把邮件存储到本地主机(即自己的计算机)上,同时删除保存在邮件服务器上的邮件,而POP3服务器则是遵循POP3协议的接收邮件服务器,用来接收电子邮件的。但目前的 POP3 邮件服务器大都可以“只下载邮件,服务器端并不删除”,也就是改进的 POP3 协议。SMTP 和 POP3 是最初的两个协议,随着邮件的不断发展后来又增加了两个协议:
IMAP 协议
IMAP全称是Internet Mail Access Protocol,即交互式邮件存取协议,它是跟POP3类似邮件访问标准协议之一。不同的是,开启了IMAP后,您在电子邮件客户端收取的邮件仍然保留在服务器上,同时在客户端上的操作都会反馈到服务器上,如:删除邮件,标记已读等,服务器上的邮件也会做相应的动作。所以无论从浏览器登录邮箱或者客户端软件登录邮箱,看到的邮件以及状态都是一致的。
Mime 协议
MIME的英文全称是"Multipurpose Internet Mail Extensions" 多功能Internet 邮件扩充服务,它是一种多用途网际邮件扩充协议,在1992年最早应用于电子邮件系统,但后来也应用到浏览器。MIME意为多目Internet邮件扩展,它设计的最初目的是为了在发送电子邮件时附加多媒体数据,让邮件客户程序能根据其类型进行处理。然而当它被HTTP协议支持之后,它的意义就更为显著了。它使得HTTP传输的不仅是普通的文本,而变得丰富多彩。
1、QQ邮箱配置步骤,获取授权码
QQ邮箱->设置->账户->POP3/SMTP服务:开启服务后会获得QQ的授权码。注:需要开通POP3和IMAP服务。
2、pom.xml文件
<!--mail-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
3、application.properties配置文件
#系统邮箱配置
spring.mail.host=smtp.qq.com
spring.mail.port=587
spring.mail.username=系统邮箱
#授权码
spring.mail.password = 授权码
spring.mail.protocol = smtp
spring.mail.default-encoding = UTF-8
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true
spring.mail.properties.mail.smtp.socketFactory.class = javax.net.ssl.SSLSocketFactory
spring.mail.properties.mail.smtp.connectiontimeout = 15000
spring.mail.properties.mail.smtp.timeout = 25000
spring.mail.properties.mail.smtp.writetimeout = 15000
4、JavaMailSender
(Spring已经帮我们内置了JavaMailSender,可以直接在项目中引用)
/**
* @ClassName: MailServiceImpl
* @Author: liuyaolong
* @Description: 发送邮件实现类
*/
@Service
public class MailServiceImpl {
@Autowired
private JavaMailSender mailSender;
private static final Logger logger = LoggerFactory.getLogger(MailServiceImpl.class);
@Value("${spring.mail.username}")
String EMAIL_FROM;
public void sendSimpleMail() {
SimpleMailMessage message = new SimpleMailMessage();
try {
message.setTo("接收邮件地址");//多个地址可用String[]
message.setCc("抄送邮件地址");//多个地址可用String[]
message.setFrom(String.valueOf(new InternetAddress(EMAIL_FROM)));//发送邮件地址
message.setSubject("邮件主题");
message.setText("邮件正文内容");
} catch (AddressException e){
logger.error("发送文本邮件异常,错误信息:{}",e.getMessage());
}
mailSender.send(message);
}
public void sendAttachmentsMail() {
MimeMessage mimeMessage = mailSender.createMimeMessage();
try {
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage,true);
helper.setFrom(String.valueOf(new InternetAddress(EMAIL_FROM)));//发送邮件地址
helper.setSubject("邮件主题");
helper.setText("邮件正文内容");
helper.setCc("抄送邮件地址");
helper.addAttachment("附件名",new FileSystemResource("附件"));
helper.setTo("接收邮件地址");
} catch (MessagingException e){
logger.error("发送附件邮件异常,错误信息:{}",e.getMessage());
}
mailSender.send(mimeMessage);
}
public void sendHtmlMail() {
MimeMessage mimeMessage = mailSender.createMimeMessage();
try {
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage,true);
helper.setTo("接收邮件地址");
helper.setCc("抄送邮件地址");
helper.setFrom(String.valueOf(new InternetAddress(EMAIL_FROM)));//发送邮件地址
helper.setSubject("邮件主题");
helper.setText("邮件正文内容");
} catch (MessagingException e){
logger.error("发送富文本邮件异常,错误信息:{}",e.getMessage());
}
mailSender.send(mimeMessage);
}
}