最近项目在做通过邮箱验证找回密码,实现这个功能:首先在注册时就有邮箱账号,但是密码忘记了就开始使用邮箱地址进行验证码重新设置密码。最终实现的效果图如下:
第一步首先开启POP3/SMTP服务:
注意开启完之后,QQ邮箱会生成一个授权码,在代码里连接邮箱使用这个授权码而不是原始的邮箱密码,这样可以避免使用明文密码。
第二步下载依赖的jar包:
解压完之后,通常我们只需要其中的mail.jar
,把它加到我们java工程的依赖包中。
第三步就是代码部分:
import java.util.Properties;
import javax.mail.Address;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import com.sun.mail.util.MailSSLSocketFactory;
public class SendEmail {
public static void main(String[] args) throws Exception {
// 设置发送邮件的配置信息
Properties props = new Properties();
// 开启debug调试
props.setProperty("mail.debug", "true");
// 发送服务器需要身份验证
props.setProperty("mail.smtp.auth", "true");
// 设置邮件服务器主机名
props.setProperty("mail.host", "smtp.qq.com");
// 发送邮件协议名称
props.setProperty("mail.transport.protocol", "smtp");
//开启了 SSL 加密
MailSSLSocketFactory sf = new MailSSLSocketFactory();
sf.setTrustAllHosts(true);
props.put("mail.smtp.ssl.enable", "true");
props.put("mail.smtp.ssl.socketFactory", sf);
Session session = Session.getInstance(props);
//邮件内容部分
Message msg = new MimeMessage(session);
msg.setSubject("设置邮件的主题");
msg.setText("这里是写我们邮件的正文");
//邮件发送者
msg.setFrom(new InternetAddress("发送人的邮箱地址"));
//发送邮件
Transport transport = session.getTransport();
//在邮箱的设置中开启POP3/SMTP服务得到授权码
transport.connect("smtp.qq.com", "发送人的邮箱地址", "发送人的邮箱的授权码");
transport.sendMessage(msg, new Address[] { new InternetAddress("接收人的邮箱地址") });
transport.close();
}
}