JaveWeb实现网站注册发送邮箱

pom.xml导入的包

**<!--发送邮箱需要的包-->**
<!-- https://mvnrepository.com/artifact/javax.mail/mail -->
<dependency>
	<groupId>javax.mail</groupId>
	<artifactId>mail</artifactId>
	<version>1.4.7</version> //版本号
</dependency>

<!-- https://mvnrepository.com/artifact/javax.activation/activation -->
<dependency>
	<groupId>javax.activation</groupId>
	<artifactId>activation</artifactId>
	<version>1.1.1</version>
</dependency>

实体类User

package top.yqqk.pojo;

import java.io.Serializable;  //序列化

public class User implements Serializable {
    private String username;
    private String password;
    private String email;

    public User() {
    }

    public User(String username, String password, String email) {
        this.username = username;
        this.password = password;
        this.email = email;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    @Override
    public String toString() {
        return "User{" +
                "username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", email='" + email + '\'' +
                '}';
    }
}

工具类SendMail:实现发送邮箱的方法(使用多线程)

package top.yqqk.utils;

import com.sun.mail.util.MailSSLSocketFactory;
import top.yqqk.pojo.User;

import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Properties;

public class SendMail extends Thread{
    private User user;
    public SendMail(User user) {
        this.user = user;
    }
    @Override
    public void run() {
        try {
            Properties prop = new Properties();
            prop.setProperty("mail.host","smtp.qq.com");//设置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对象

            //QQ才有
            Session session = Session.getDefaultInstance(prop, new Authenticator() {
                @Override
                protected PasswordAuthentication getPasswordAuthentication() {
                    //发件人邮件名,授权码
                    return new PasswordAuthentication("1214659897@qq.com", "xcdsqlvrgplubaai");
                }
            });
            //开启Session的Debug模式,可以看到发送邮件的运行状态 (可以不开)
            session.setDebug(true);

            //2.通过session得到transport对象
            Transport ts = session.getTransport();
            //3.使用邮箱的用户名和授权码连上邮件服务器
            ts.connect("smtp.qq.com","1214659897@qq.com","xcdsqlvrgplubaai");
            //4.创建邮件
            //创建邮箱对象 需要传递session
            MimeMessage message = new MimeMessage(session);
            message.setFrom(new InternetAddress("1214659897@qq.com")); //指明邮件的发件人
            message.setRecipient(Message.RecipientType.TO,new InternetAddress(user.getEmail()));
            message.setSubject("用户邮件注册");//邮件的主题
            String info = "恭喜你注册成功,你的用户名是:"+user.getUsername()+";你的密码是:"+user.getPassword()+"请妥善保管";
            /*准备正文数据*/
            message.setContent(info,"text/html;charset=UTF-8");
            message.saveChanges();//保存修改
            /*=============================================================================*/
            //5.发送邮件
            ts.sendMessage(message,message.getAllRecipients());
            //关闭连接
            ts.close();
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

Servlet:接收处理请求

package top.yqqk.servlet;

import top.yqqk.pojo.User;
import top.yqqk.utils.SendMail;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.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("password");
        String email = req.getParameter("email");

        User user = new User(username, password, email);
        System.out.println(username);
        System.out.println(password);
        System.out.println(email);
        //用户注册成功后,发送邮件,使用线程来发送邮件,防止出现耗时,和网站注册人数过多的情况
        SendMail sendMail = new SendMail(user);
        sendMail.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);
    }
}

posted @ 2020-09-21 21:00  晚雾  阅读(76)  评论(0)    收藏  举报