大家现在上网注册账号经常会是让我们填写一下邮箱,然后他就给咱们发送一封邮件,里边是一对乱七八糟的东西,点击就提示我们用户注册成功。本来以为很高大上的东西,弄清楚原理就简单了。
其实就是我们如果注册一个用户的话,我们首先回填写一个邮箱,然后点击注册的时候,系统会用他的邮箱给你发送一个邮件,里边包含了我们注册用户是生成的一个很长的随机数,这样我们点击的时候,他就会获取这个随机数,去数据库查询是否有这个用户,有的话,就把用户状态改成已激活的状态就可以了。
我们上网还有一个http协议,所以收发邮件需要一些协议,常用的协议就是SMTP:发送邮件协议,POP3接收邮件协议。那么邮件是如何传输的呢。
如下图,aaa@sina.com 账号登录客户端,发送邮件连接的是SMTP服务器,然后创建了一个邮件对象将主题、收件人地址、邮件正文等信息保存到本地,点击发送后通过连接接收方的SMTP服务器将邮件保存到硬盘上,然后收件方aaa@163.com 账号登录接收邮件,通过连接POP服务器从硬盘上获取邮件并返回到客户端显示。
那么下边我们就实现一个用户注册的时候的一个邮箱激活用户账号的方法把。
我是自己的电脑,所以服务器和客户端都是一台电脑。
首先我们是搭建服务器,既然是服务器,就需要一个能发送邮件的工具,我用的是MailService这个工具,下载地址:http://www.magicwinmail.com/download.php,安装的时候最好安装在C盘,否则可能出错。
然后就是设置服务器—工具—>服务器设置
设置邮箱账号—账号—>新建账号:如下图
这样我就新建好了一个测试点邮箱,然后我们还需要一个工具来接收邮件,我选用的是Foxmail,为什么是选这个不用outlook呢,因为我喜欢。
接下来我们配置一下Foxmail,把我们刚刚新建的邮箱账号绑定到Foxmail上。
账号设置à系统设置—>账号—>新建,弹出如下对话框
填写我们的邮箱和密码,然后单机创建,弹出如下对话框:
这里因为我是本地,就用的localhost,单机创建,到这里,我们的基本配置就算是都解决了,那么接下来看看我们的代码是怎么实现的。
<span style="font-size:18px;"> /**
* 邮件发送的工具类
* @author 海滨
*
*/
public class MailUtils {
/**
*
* @param to :收件人
* @param code :激活码
*/
public static void sendMail(String to,String code)
{
//1.获取一级Session对象
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 message = new MimeMessage(session);
//3.发送Transport
try {
message.setFrom(new InternetAddress("service@shop.com"));
//设置收件人
message.addRecipient(RecipientType.TO, new InternetAddress(to));
//设置标题
message.setSubject("来自*******的激活邮件");
//设置邮件的正文
message.setContent("<h1>******的激活邮件,点击下面链接来激活啊。</h1><h3><a href='http://192.168.**.***:8080/shop/user_active.action?code="+ code +"'>href='http://192.168.**.***:8080/shop/user_active.action?code="+ code +"</a></h3>", "text/html;charset=UTF-8");
} catch (AddressException e) {
e.printStackTrace();
} catch (MessagingException e) {
e.printStackTrace();
}
//发送邮件
try {
Transport.send(message);
} catch (MessagingException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
sendMail("aaa@shop.com","11111111111");
}
}
</span>
这样我们就可以实现一个邮件的发送功能了。接下来就是用户收取邮件,然后点击我们上边的链接,然后获取Code,查询数据库,如果查询到数据,修改数据库的状态就可以了。
<span style="font-size:18px;">/**
* 用户激活的方法
*/
public String active()
{
//根据激活码查询用户
User existUser = userService.findByCode(user.getCode());
if(existUser == null){
//激活成功
this.addActionMessage("激活失败,激活码错误");
}else
{
//激活成功
existUser.setState(1);
existUser.setCode(null);
userService.update(existUser);
this.addActionMessage("激活成功,请登录");
}
return "msg";
}
</span>
这样我们就成功了,发送邮件就是这么简单,其实我们好多高大上的技术,都没有想想的那么难,一些简单的配置,一个工具类就可以实现了。