一、SMTP、IMAP、POP3
什么是SMTP?
SMTP全称为Simple Mail Transfer Protocol(简单邮件传输协议),它是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式。SMTP认证要求必须提供账号和密码才能登陆服务器,其设计目的在于避免用户受到垃圾邮件的侵扰。
什么是IMAP?
IMAP全称为Internet Message Access Protocol(互联网邮件访问协议),IMAP允许从邮件服务器上获取邮件的信息、下载邮件等。IMAP与POP类似,都是一种邮件获取协议。
什么是POP3?
POP3全称为Post Office Protocol 3(邮局协议),POP3支持客户端远程管理服务器端的邮件。POP3常用于“离线”邮件处理,即允许客户端下载服务器邮件,然后服务器上的邮件将会被删除。目前很多POP3的邮件服务器只提供下载邮件功能,服务器本身并不删除邮件,这种属于改进版的POP3协议。
举例来解释一下:
xxx@163.com 发一个邮件给 xxx@qq.com
xxx@163.com 用户要发送邮件,首先 xxx@163.com 这个用户将邮件投递到 163 的 SMTP 服务器,在这个过程中,就使用了 SMTP 这个协议;接着,163 的 SMTP 服务器再将邮件投递到腾讯的SMTP服务器,这个过程也用了 SMTP 协议。
然后再来说 POP3 协议
当这个邮件到达 腾讯 服务器之后,xxx@qq.com 这个用户需要登录服务器查看邮件,这个时候,这个 POP3 协议就被用上了。邮件服务器商都会为每一个用户专门提供邮件存储空间,SMTP 服务器收到邮件之后,就会存到对应用户的邮件存储空间中,如果用户现在要读取邮件,就需要通过邮件服务商的 POP3 邮件服务器来完成。
二、准备工作(以 163 邮箱为例)
首先打开 163 邮箱(没有的话自己去注册一个~),登录后,在最上方可以找到一个设置,设置里面有一个 POP3/IMAP/SMTP 的设置。
然后把服务开了
它会让你设置一个授权码,这个要自己保存一下,别弄丢了。。
然后打开我们的项目,在 pom 文件中加入 SpringBoot-mail 的依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
最后一个准备工作,打开 yml 配置文件
自己配置一下这个东西,接下来开始学习如何发送邮件~
三、SpringBoot 发送文本邮件
我们在 Test 类中引入一个对象:JavaMailSender,他是最后用来发送邮件的时候用到的类。
开始写代码~~~
@Test
public void commonEmail() {
//创建简单邮件消息
SimpleMailMessage message = new SimpleMailMessage();
//谁发的
message.setFrom("185....06@163.com");
//谁要接收
message.setTo("....@qq.com");
//邮件标题
message.setSubject("大风歌");
//邮件内容
message.setText("大风起兮云飞扬,威加海内兮归故乡。安得猛士兮守四方!");
try {
mailSender.send(message);
System.out.println("发送成功");
} catch (MailException e) {
e.printStackTrace();
}
}
写好之后我们来测试一下。
可以看到哈,是没有问题的。
四、SpringBoot 发送 HTML 格式的文件
有的时候直接发送文本可能觉得太丑了,我们也可以发送 HTML 到对方邮箱,来看一下代码
@Test
public void htmlEmail() throws MessagingException, MessagingException {
//创建一个MINE消息
MimeMessage message = mailSender.createMimeMessage();
MimeMessageHelper minehelper = new MimeMessageHelper(message, true);
//谁发的
minehelper.setFrom("185.....@163.com");
//谁要接收
minehelper.setTo("xxx....@qq.com");
//邮件标题
minehelper.setSubject("大风歌");
//邮件内容
String content = "<html>\n" +
"<body>\n" +
" <h1>大风起兮云飞扬,威加海内兮归故乡。安得猛士兮守四方!</h1>\n" +
"</body>\n" +
"</html>";
//邮件内容 true 表示带有附件或html
minehelper.setText(content, true);
try {
mailSender.send(message);
} catch (MailException e) {
e.printStackTrace();
}
}
然后我们再来进行发送~~~
可以看到哈,和上面的纯文本的还是有很大的差别的~
五、!!!一定要看
我们在将这个邮件功能集成到我们项目之后,不要直接同步进行调用发送,这样可能会导致超时!!!
最好的方式是单独开一个线程进行发送操作,这样可以避免很多麻烦
这一篇东西不多,自己练习一下
有问题可以联系我:QQ 2100363119,欢迎大家访问我的个人自愿网站:https://www.lemon1234.com
最近网站在改造中,欢迎各位提出意见。