最近在做毕设中实现注册功能时使用到了邮箱激活验证,在此总结下。
简介
JavaMail 是提供给开发者处理电子邮件相关的编程接口,它是 SUN 发布的用来处理 email 的 API ,它可以方便地执行一些常用的邮件传输,我们可以基于 JavaMail 开发出类似于 Microsoft Outlook 的应用程序
基本术语
(1)电子邮箱
- 电子邮箱(E-mail 地址)需要在邮件服务器上申请,确切地说,电子邮箱其实就是用户在邮件服务器上申请的一个账户。
- 用户在邮件服务器上申请了一个账户后,邮件服务器就会为这个账户分配一定的空间,用户从而可以使用这个账户以及空间发送电子邮件和保存别人发送过来的电子邮件
(2)邮箱服务器
- 要在 Internet 上提供电子邮件功能,必须有专门的电子邮件服务器,例如现在网络上有很多提供邮件服务的厂商:新浪、搜狐、网易等等他们都有自己的邮件服务器
- 这些服务器类似于现实生活中的邮局,它主要负责接收用户投递过来的邮件,并把邮件投递到邮件接收者的电子邮箱中
(3)SMTP 协议
- SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式
- SMTP 协议属于 TCP/IP 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地
- SMTP 服务器则是遵循 SMTP 协议的发送邮件服务器,用来发送或中转发出的电子邮件
- 通常把处理用户 SMTP 请求(邮件发送请求)的邮件服务器称之为 SMTP 服务器
(4)POP3 协议
- POP3,全名为 “Post Office Protocol - Version 3”,即“邮局协议版本3”
- 本协议主要用于支持使用客户端远程管理在服务器上的电子邮件
- POP 协议支持“离线”邮件处理,其具体过程是:邮件发送到服务器上,电子邮件客户端调用客户程序以连接服务器,并下载所有来阅读的电子邮件,这种离线访问模式是一种存储转发服务,将邮件从邮件服务器端送到个人终端机器上,一般是 PC 机或 MAC。一旦邮件发送到 PC 机或 MAC 上。邮件服务器上的邮件将会被删除,但目前的 POP 邮件服务器大都可以“只下载邮件,服务器并不删除”,也就是改进的 POP3 协议
- 同样,用户若想从邮件服务器管理的电子邮箱中接收一封电子邮件的话,他连上邮件服务器后,也需要遵循一定的通讯格式,POP3 协议用于定义这种通讯格式
- 因而,通常我们也把处理用户 POP3 请求(邮件接收请求)的邮件服务器称之为 POP3 服务器
邮件收发过程
邮件发送代码
public class MailUtils {
/**
* 发送邮件的方法
* @param to : 发送对象
* @param code : 邮件的激活码
* @throws MessagingException
* @throws AddressException
*/
public static void sendMail(String to,String code) throws AddressException, MessagingException {
// 1.创建连接对象,连接到邮箱服务器
Properties props = new Properties();
props.setProperty("mail.smtp.host", "smtp.163.com");// 设置邮件服务器 这里使用 163 邮箱
props.setProperty("mail.smtp.auth", "true");// 打开认证
Session session = Session.getInstance(props, new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication(){
return new PasswordAuthentication("/发件人邮箱地址/","/密码/");
}
});
// 2.创建邮件对象
Message message = new MimeMessage(session);
// 2.1设置发件人
message.setFrom(new InternetAddress("/发件人邮箱地址/"));
// 2.2设置接收人
message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
// 2.3设置邮件主题
message.setSubject("账号激活");
// 2.4设置邮件内容
String content = "<html><head></head><body><h1>这是一封激活邮件,激活请点击以下链接</h1>"
+"<h3><a href='http://localhost:8080/MailRegisterDemo/service/ActiveServlet?code="
+ code + "'>http://localhost:8080/MailRegisterDemo/service/ActiveServlet?code="
+ code + "</href></h3></body></html>";
message.setContent(content, "text/html;charset=UTF-8");
// 3.发送邮件
Transport.send(message);
System.out.println("邮件成功发送!");
}
}