版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/cx243698/article/details/80579108
介绍
邮件的发送是我们在开发项目时经常使用到的,比如用来做验证、推送消息等等。而邮件的发送也是遵循特定的协议的。常用的电子邮件协议包括 SMTP,POP3,IMAP。
SMTP
SMTP称为简单邮件传输协议(Simple Mail Transfer Protocal),目标是向用户提供高效、可靠的邮件传输。它的一个重要特点是它能够在传送中接力传送邮件,即邮件可以通过不同网络上的主机接力式传送。通常它工作在两种情况下:一是邮件从客户机传输到服务器;二是从某一个服务器传输到另一个服务器。SMTP是一个请求/响应协议,它监听25号端口,用于接收用户的Mail请求,并与远端Mail服务器建立SMTP连接。
过程
- 建立TCP连接
- 客户端发送HELO命令以标识发件人自己的身份,然后客户端发送MAIL命令,服务器端正希望以OK作为响应,表明准备接收
- 客户端发送RCPT命令,以标识该电子邮件的计划接收人,可以有多个RCPT行,服务器端则表示是否愿意为收件人接收邮件
- 协商结束,发送邮件,用命令DATA发送
- 以.表示结束输入内容一起发送出去
- 结束此次发送,用QUIT命令退出
实现
首先我们使用网易邮箱,其他邮箱也可以,在设置中开启SMTP服务。
Maven依赖
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<version>1.6.1</version>
</dependency>
代码
import java.util.Properties;
import javax.mail.Authenticator;
import javax.mail.Message.RecipientType;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class JavaMailTest {
public static void main(String[] args) throws MessagingException {
// 配置发送邮件的环境属性
final Properties props = new Properties();
// 表示SMTP发送邮件,需要进行身份验证
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.host", "smtp.163.com");
// 发件人的账号
props.put("mail.user", "[email protected]");
// 访问SMTP服务时需要提供的密码
props.put("mail.password", "XXXXXXXX");
// 构建授权信息,用于进行SMTP进行身份验证
Authenticator authenticator = new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
// 用户名、密码
String userName = props.getProperty("mail.user");
String password = props.getProperty("mail.password");
return new PasswordAuthentication(userName, password);
}
};
// 使用环境属性和授权信息,创建邮件会话
Session mailSession = Session.getInstance(props, authenticator);
// 创建邮件消息
MimeMessage message = new MimeMessage(mailSession);
// 设置发件人
InternetAddress form = new InternetAddress(props.getProperty("mail.user"));
message.setFrom(form);
// 设置收件人
InternetAddress to = new InternetAddress("[email protected]");
message.setRecipient(RecipientType.TO, to);
// 设置邮件标题
message.setSubject("inchlifc");
// 设置邮件的内容体
message.setContent("Hello 小小渔夫", "text/html;charset=UTF-8");
// 发送邮件
Transport.send(message);
}
}