相关概念
1. 邮箱服务器
就想web要有web服务器一样(tomcat等),邮件也有对应的邮件服务器
2. SMTP协议
用户发送邮件到邮件服务器的协议,处理该请求的服务器称之为SMTP服务器。和POP3协议都属于TCP/IP协议的一员。
3. POP3协议
该协议是用户从邮件服务器接收邮件要遵循的协议,当然处理该请求的服务器称之为POP3服务器。
4. 邮件收发过程
现有场景如下:我要用qq邮箱给小明的163邮箱发一封邮件,首先我要先登录我的邮箱发一封邮件,此时我qq邮箱对应的SMTP服务器接收到我的邮件之后,发送给163邮箱对应的SMTP服务器。这时,小明登录连接163邮箱的POP3服务器就可以接受到邮件了。
环境搭建
安装邮件服务器
这里使用的易邮邮件服务器,安装完成之后,点击工具,选择系统设置进行邮箱域名配置。
image.png然后新建两个用来测试的账号,账号处填user
,默认就会在后面自动添加刚才设置的邮箱域名@junwei.com
邮箱客户端安装
这里使用的是Foxmail
,安装完成之后,把我们刚才新建的用户添加进入。
然后需要注意一点,要填写服务器的地址,如果是线上正式的邮箱服务器(163等)就要填它们对应的服务器地址。这里我们是本地的服务器所以填localhost
。
代码实现发送邮件
// 要连接的服务器,因为是本地所以不用设置主机名
Properties properties = new Properties();
// 创建连接对象,连接邮箱服务器
Session session = Session.getInstance(properties, new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
// 设置用于发送邮件的账号和密码
return new PasswordAuthentication("user1@junwei.com","123456");
}
});
// 创建邮件对象
Message message = new MimeMessage(session);
try {
// 设置发件人,这里需要传入一个地址对象,而不是地址的字符串,所有用InternetAddress转一下
message.setFrom(new InternetAddress("user1@junwei.com"));
// 设置收件人,TO:收件人,CC:抄送人,BCC:秘密抄送人
message.setRecipient(Message.RecipientType.TO, new InternetAddress("user2@junwei.com"));
// 设置邮件主题
message.setSubject("我是测试邮件的主题");
// 设置正文
message.setContent("<h1>我是正文</h1>", "text/html; charset=UTF-8");
Transport.send(message);
} catch (MessagingException e) {
e.printStackTrace();
}
用户激活邮件实现步骤
-
用户点击注册,服务端向服务器存一个用户对象,该对象包含用户填写的信息和是否激活的状态(初始设为0未激活),还应该有一个用户对应的激活码(服务端生成)
-
通过上面的代码想用户填写的邮箱发送一封激活邮件。该邮件包含一个激活链接(带有激活码参数的)。
-
用户点击激活链接,服务端接收到这个激活码,然后取数据库查找。如果查到了该用户,就把该用户的激活状态修改为(1已激活)。
-
修改完激活状态之后,说明该用户可以登录了,服务端进行页面跳转,跳转到登录页面。
网友评论