注册发送激活码电子邮件

需要的工具:

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, 表示已经激活.

 

posted @ 2017-05-20 20:23  半生戎马,共话桑麻、  阅读(607)  评论(0)    收藏  举报
levels of contents