注册发送激活码电子邮件
需要的工具:
1. 邮箱服务器
2. 邮件协议: smtp(发送邮件协议), pop(接收邮件协议)
安装邮箱服务器: (安装在C盘, 其他盘可能会有问题)
1. 安装eyoumailserversetup.exe, 安装完成会显示错误, 直接点击确定就好, 工具-->服务器设置, 单域名改成shop.com, Admin用户是默认生成的
这样以后注册用户的时候都会默认带上shop.com后缀, 比如aaa@shop.com, bbb@shop.com
2. 注册两个测试用户aaa@shop.com(密码111), bbb@shop.com(密码111)
3. 注册一个模拟官方发送激活码的用户service@shop.com(密码111)

安装客户端软件:foxmail65.exe
因为如果使用网页版会有session过期的问题(默认30分钟), 而客户端没有这个问题, 避免由于session过期导致接收不到邮件的问题,
常用的客户端软件有outlook(微软的, 收费的) 和 foxmail(已经被腾讯收购, 免费的), 这里使用foxmail作为示例, 可以安装到其他盘符:
在安装的过程中需要需要配置一个用户, 这样这个客户端就和这个用户绑定了, 别人给他发邮件客户端就会收到, 在配置的时候要选用pop(或pop3)和smtp
具体看这个用户有没有开通这两个协议, 如果不开通, 就要去开通, 具体问度娘.

但是, 这个客户端软件不仅仅可以配置一个用户, 这里配置两个测试用户aaa@shop.com和bbb@shop.com, 模拟用service@shop.com给
这两个用户发送激活码, 邮箱-->新建邮箱账户

下一步, 如果配置的是网络邮箱(联网才能发送,接收邮件), 发送邮件服务器写上smtp.shop.com, 接收邮件服务器写上pop3.shop.com,
如果配置的是本地邮箱(不能联网, 只能本机发送,接收邮件), 发送邮件服务器和接收邮件服务器都写上localhost
编写发送邮件的代码:
jar包:activation.jar,mail.jar
MailUtils.java:
package cn.itcast.shop.utils;
import java.util.Properties;
import javax.mail.Authenticator;
import javax.mail.Message;
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.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
/**
* 邮件发送工具类
*/
public class MailUtils {
/**
* 发送邮件的方法
* @param to :收件人
* @param code :激活码
*/
public static void sendMail(String to,String code){
/**
* 1.获得一个Session对象.
* 2.创建一个代表邮件的对象Message.
* 3.发送邮件Transport
*/
// 1.获得连接对象
Properties props = new Properties();
props.setProperty("mail.host", "localhost");
Session session = Session.getInstance(props, new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("service@shop.com", "111");
}
});
// 2.创建邮件对象:
Message message = new MimeMessage(session);
// 设置发件人:
try {
message.setFrom(new InternetAddress("service@shop.com"));
// 设置收件人:
message.addRecipient(RecipientType.TO, new InternetAddress(to));
// 抄送 CC 密送BCC
// 设置标题
message.setSubject("来自购物天堂传智商城官方激活邮件");
// 设置邮件正文: 下面的localhost在实际开发中要写成邮箱服务器的主机IP
message.setContent("<h2>购物天堂传智商城官方激活邮件!点下面链接完成激活操作!</h2>"
+ "<h3><a href='http://localhost:8080/shop/user_active.action?code="+code+"'>"
+ "http://localhost:8080/shop/user_active.action?code="+code+"</a></h3>", "text/html;charset=UTF-8");
// 3.发送邮件:
Transport.send(message);
} catch (AddressException e) {
e.printStackTrace();
} catch (MessagingException e) {
e.printStackTrace();
}
}
// 测试邮件是否发送成功
public static void main(String[] args) {
sendMail("aaa@shop.com","11111111111111");
}
}
执行, 查看aaa@shop.com账户, 收到了刚刚发送的一份测试邮件:

这样, aaa用户就收到了注册服务器发送的激活邮件, 在aaa的邮箱中点击激活码, 发送get请求到userAcdtion, 执行其中的active方法,
接收激活码, 调用service的findByCode(String code)方法, 当查询到用户时, 就调用service的update方法更新用户的状态, 改成1, 表示已经激活,
而且激活码只能激活一次,激活以后, code改成null, 查数据库存在刚刚注册的用户信息, 激活码为null, state为1, 表示已经激活.

浙公网安备 33010602011771号