实现注册信息发送至邮箱的功能
Tomcat10 + JDK1.8
文件结构:
pom.xml
4.0.0 com.yl WebMail 1.0-SNAPSHOT war jakarta.servlet jakarta.servlet-api 5.0.0 org.projectlombok lombok 1.18.24 com.sun.mail jakarta.mail 2.0.1
User
package com.yl.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class User {
private String username;
private String password;
private String email;
}
SendMail
package com.yl.utils;
import com.sun.mail.util.MailSSLSocketFactory;
import com.yl.pojo.User;
import jakarta.mail.*;
import jakarta.mail.internet.InternetAddress;
import jakarta.mail.internet.MimeMessage;
import java.util.Properties;
//多线程实现用户体验 异步处理
public class SendMail extends Thread {
private String from = "邮箱地址"; //你的邮箱地址
private String pwd = "授权码"; //你的授权码
private String host = "smtp.qq.com";
private User user;
public SendMail(User user){
this.user=user;
}
//重写run方法 发送邮件给指定用户
@Override
public void run() {
try {
Properties prop=new Properties();
prop.setProperty("mail.host", host);///设置QQ邮件服务器
prop.setProperty("mail.transport.protocol", "smtp");///邮件发送协议
prop.setProperty("mail.smtp.auth", "true");//需要验证用户密码
//QQ邮箱需要设置SSL加密
MailSSLSocketFactory sf=new MailSSLSocketFactory();
sf.setTrustAllHosts(true);
prop.put("mail.smtp.ssl.enable", "true");
prop.put("mail.smtp.ssl.socketFactory", sf);
//使用javaMail发送邮件的5个步骤
//1.创建定义整个应用程序所需要的环境信息的session对象
Session session= Session.getDefaultInstance(prop, new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(from, pwd);
}
});
//开启session的debug模式,这样可以查看到程序发送Email的运行状态
session.setDebug(true);
//2.通过session得到transport对象
Transport ts=session.getTransport();
//3.使用邮箱的用户名和授权码连上邮件服务器
ts.connect(host,from, pwd);
//4.创建邮件:写文件
//传递session
MimeMessage message=new MimeMessage(session);
//发件人
message.setFrom(new InternetAddress(from));
//收件人
message.setRecipient(Message.RecipientType.TO, new InternetAddress(user.getEmail()));
//邮件标题
message.setSubject("注册通知");
//邮件的文本内容
message.setContent("恭喜你("+user.getUsername()+")成功注册!"+"密码:"+user.getPassword()
,"text/html;charset=UTF-8");
//5.发送邮件
ts.sendMessage(message,message.getAllRecipients());
//6.关闭连接
ts.close();
}catch (Exception e){
System.out.println(e);
}
}
}
RegisterServlet
package com.yl.servlet;
import com.yl.pojo.User;
import com.yl.utils.SendMail;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
public class RegisterServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//接收用户请求,封装成对象
String username = req.getParameter("username");
String password = req.getParameter("pwd");
String email = req.getParameter("email");
System.out.println(username);
System.out.println(password);
System.out.println(email);
User user = new User(username, password, email);
//使用线程发送邮件,避免耗时及注册人数过多情况
SendMail sm = new SendMail(user);
sm.start();
//注册用户
req.setAttribute("message", "注册成功,请注意查收邮件");
req.getRequestDispatcher("info.jsp").forward(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
web.xml
RegisterServlet com.yl.servlet.RegisterServlet RegisterServlet /RegisterServlet.do
index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
注册
info.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
Title
${message}



