1.POP3(Post Office Protocol 3) POP3是Post Office Protocol 3的简称,即邮局协议的第3个版本,它规定怎样将个人计算机连接到Internet的邮件服务器和下载电子邮件的电子协议。它是因特网电子邮件的第一个离线协议标准,POP3允许用户从服务器上把邮件存储到本地主机(即自己的计算机)上,同时删除保存在邮件服务器上的邮件,而POP3服务器则是遵循POP3协议的接收邮件服务器,用来接收电子邮件的。
2.SMTP(Simple Mail Transfer Protocol, SMTP) SMTP 的全称是“Simple Mail Transfer Protocol”,即简单邮件传输协议。它是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式。SMTP 协议属于 TCP/IP 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。SMTP 服务器就是遵循 SMTP 协议的发送邮件服务器。 SMTP 认证,简单地说就是要求必须在提供了账户名和密码之后才可以登录 SMTP 服务器,这就使得那些垃圾邮件的散播者无可乘之机。 增加 SMTP 认证的目的是为了使用户避免受到垃圾邮件的侵扰。
3.IMAP(Internet Mail Access Protocol) 即交互式邮件存取协议,它是跟POP3类似邮件访问标准协议之一。不同的是,开启了IMAP后,您在电子邮件客户端收取的邮件仍然保留在服务器上,同时在客户端上的操作都会反馈到服务器上,如:删除邮件,标记已读等,服务器上的邮件也会做相应的动作。所以无论从浏览器登录邮箱或者客户端软件登录邮箱,看到的邮件以及状态都是一致的。
我这里是通过SMTP协议去发送邮件,那么接下来就开始吧,项目创建完毕之后在pom中引入发送邮件的依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
引入完毕之后,进行配置:
host 就是对应的邮件服务器地址,不同邮件有不同的地址 username,password 就是你所发送邮件的账号 default-encoding:UTF-8 默认MimeMessage编码
配置完毕之后,创建一个类来进行编写发送邮件的方法,这里就使用JavaMailSender工具来进行发送邮件
1.首先是发送文本邮件
to 表示发送的地址 subject 发送邮件的主题 content 发送内容 from 由谁发送的,我这里就是获取配置文件中配置的地址
@Test
public void sendSimpleEmail() {
sendMailUtil.sendSimpleEmail("2420221622@qq.com", "springboot邮件主题", "Springboot邮件内容");
}
2.HTML格式邮件
HTML格式的邮件跟文本的区别就在于在setText的时候,第二个参数要true,这样就会以html标签去解析发送。
@Test
public void sendHtmlMail() throws MessagingException {
sendMailUtil.sendHtmlMail("2420221622@qq.com", "springboot-HTML邮件主题", "<h1>内容:第一封html邮件</h1>");
}
3.附件邮件
附件邮件多了一个filePath参数,就是要知道附件的路径然后进行发送,如果要发送多个附件就跟图中代码所示的,再加入一个addAttachment,实际的开发中就通过数组来遍历。
@Test
public void sendAttachmentsMail() throws MessagingException {
String filePath = "C:/Users/CSea/Desktop/新建文本文档.zip";
sendMailUtil.sendAttachmentsMail("2420221622@qq.com", "springboot-附件邮件", "这是带附件的邮件", filePath);
}
5.图片邮件
图片邮件跟附件邮件类似,只是把addAttachment变成了addInline,如果要多张图片也是再加入一个addInline。
@Test
public void sendInlineResourceMail() throws MessagingException {
String srcPath = "C:/Users/CSea/Desktop/icon.jpg";
String srcId = "icon";
String content = "<h1 style='color:red'>helloWorld</h1><img src='cid:" + srcId + "'/><img src='cid:" + srcId + "'/>";
sendMailUtil.sendInlineResourceMail("2420221622@qq.com", "springboot-图片邮件", content, srcPath, srcId);
}
6.模板邮件
我这里使用的是freemaker作为模板引擎,在template下新建一个email.ftl
<html>
<head>
<meta charset="UTF-8">
<title>模板邮件</title>
</head>
<body>
<div class="container">
<h2>尊敬的${user}您好:</h2>
<p>欢迎来到此!</p>
</div>
</body>
</html>
模板写完之后就是要获取到模板然后进行传参赋值,最后解析为html来发送出去
@Test
public void testTemplate() throws IOException, TemplateException, MessagingException {
sendMailUtil.sendHtmlMail("2420221622@qq.com", "springboot-图片邮件", sendMailUtil.testTemplate("张三"));
}
其他一些邮箱服务器地址:
126邮箱:
QQ邮箱:
163邮箱:
有关一些其他内容建议还是去看一下各邮箱自己的一些说明文档
在发送时候的常见错误:
421:IP同时并发连接数目过大,个人邮箱是有这个限制的,企业邮箱可以申请(HL:ICC)
451:登录失败多次,被临时禁止登陆(Requested mail action not taken:too much fail)
553:认证失败(authentication is required)
这里只是一个简单的发送Demo,在生产环境时候还是有许多情况需要考虑