,最近发现书店项目中没有忘记密码的找回功能,于是决定学习相关知识,但是今天一下午也只会在本地邮件服务器上通过某一账号给本地另一个账号发送邮件,并不能发送到QQ邮箱或者是163邮箱里面,原因目前还不太清楚,后面再去慢慢了解吧。
对于目前的需求我是希望点击忘记密码之后跳出填写邮箱账号的页面,在页面中输入自己的邮箱账号,确定后系统判断数据库中是否存在该邮箱,如果存在则发送6位随机数组成的验证码给该账号,跳转到输入验证码的页面,否则提示邮箱不存在,若验证码正确则跳转到重置密码的页面,否则给出提示,留在输入邮箱的页面。
首先安装邮箱服务器,和Foxmail邮箱管理软件,最后一个jar包是放到项目下面的,只需要把里面的jar文件拷过去了行了。
这两个软件在网上都很容易下载到的,安装的过程都是直接下一步,首先需要在工具里面的服务器设置设置一下域名,选择单域名meetbookstore.com,然后在本地服务器上添加两个账号user01@meetbookstore.com和system@meetbookstore.com,完了之后邮箱服务器不能关闭就像tomcat服务器一样要处于打开状态,然后在Foxmail的账号管理中添加这两个账号,服务器地址都填localhost其它默认。可以尝试用一个账号给另一个账号发送邮件。
然后就可以编写发送邮件的方法了
//发送邮件
/**
*
* @param to:目的邮箱地址
* @param code:邮件的验证码
* @throws MessagingException
* @throws AddressException
*/
public static void send(String to,int code) throws Exception {
//1、创建连接对象,连接到邮件服务器
Properties props=new Properties();
Session session=Session.getInstance(props, new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
// TODO Auto-generated method stub
return new PasswordAuthentication("system@meetbookstore.com", "111");
}
});
//2、创建邮件对象
Message message=new MimeMessage(session);
//设置发件人
message.setFrom(new InternetAddress("system@meetbookstore.com"));
//设置收件人
message.setRecipient(RecipientType.TO,new InternetAddress(to));
//设置邮件的主题
message.setSubject("来自遇见书屋的验证邮件");
//设置邮件正文,内容,文件类型
message.setContent("<h1>来自遇见书屋的验证邮件</h1><h3>您找回遇见书屋密码的验证码为:"+code+",如非本人操作,请忽略此邮件。--遇见书屋团队</h3>", "text/html;charset=UTF-8");
//3、发送一封带验证码的邮件
Transport.send(message);
}
注意引入的类出现相同类名的都选择下面的Mail那一个
import java.util.Properties;
import java.util.Random;
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 static void main(String[] args) throws Exception {
Random random=new Random();
int num=Math.abs(random.nextInt());
num=num%900000+100000;
send("user01@meetbookstore.com",num);
}
num变量是随机生成的6位数的验证码,system@meetbookstore.com是发送方,密码为111,接收方是user01@meetbookstore.com