JavaWeb学习——邮件发送之用户注册Web版

JavaWeb学习——邮件发送Web版

首先我们先导入jar包,其中有servlet的包也有mail的包
在这里插入图片描述
编写实体类User。属性有:用户名,密码,邮箱。提供有参构造和无参构造,get,set方法,toString方法:

package com.muhan.pojo;
public class User {
    private String username;
    private String password;
    private String userMail;
    public User() {
    }
    public User(String username, String password, String userMail) {
        this.username = username;
        this.password = password;
        this.userMail = userMail;
    }
    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 getUserMail() {
        return userMail;
    }
    public void setUserMail(String userMail) {
        this.userMail = userMail;
    }
    @Override
    public String toString() {
        return "User{" +
                "username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", userMail='" + userMail + '\'' +
                '}';
    }
}

然后再将邮件发送的代码提取成一个工具类:

package com.muhan.utils;

import com.muhan.pojo.User;
import com.sun.mail.util.MailSSLSocketFactory;

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

public class SendMail extends Thread {
    //发件人邮箱
    private String emilTo = "462447812@qq.com";
    //收件人信息
    private String username = "462447812@qq.com";
    //邮箱密码
    private String password = "euwawaosjlnobhcg";
    //邮件服务器地址
    private String host ="smtp.qq.com";
    //收件人信息
    private User user;
    public SendMail(User user){
        this.user=user;
    }
    @Override
    public void run() {
        Properties properties = new Properties();
        properties.setProperty("mail.host",host);
        properties.setProperty("mail.transport.protocol","smtp");
        properties.setProperty("mail.smtp.auth","true");

        // 关于QQ邮箱,还要设置SSL加密,加上以下代码即可

        try {
            MailSSLSocketFactory sf = new MailSSLSocketFactory();
            sf.setTrustAllHosts(true);
            properties.put("mail.smtp.ssl.enable", "true");
            properties.put("mail.smtp.ssl.socketFactory", sf);
        } catch (GeneralSecurityException e) {
            e.printStackTrace();
        }

        System.out.println("=============准备工作完成===============");

        //1.创建一个session会话对象
        Session session = Session.getDefaultInstance(properties, new Authenticator() {
            @Override
            public PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(username, password);
            }
        });

        //开启Session的debug模式,这样就可以查看到程序发送Email的运行状态
        session.setDebug(true);

        //2.获取连接对象,通过session对象获得transport,需要捕获或者抛出异常
        Transport transport = null;
        try {
            transport = session.getTransport();
        } catch (NoSuchProviderException e) {
            e.printStackTrace();
        }
        //3.连接服务器
        try {
            transport.connect(host,username,password);
            //4.发送邮件
            sendText(session,transport);
            //5.关闭连接
            transport.close();
        } catch (MessagingException e) {
            e.printStackTrace();
        }


    }

    private void sendText(Session session,Transport transport) throws MessagingException {
        //4.1创建邮件对象
        MimeMessage mimeMessage = new MimeMessage(session);
        //4.2邮件发送人
        mimeMessage.setFrom(new InternetAddress(username));
        //4.3邮件收件人,可以发送多人
        mimeMessage.setRecipient(Message.RecipientType.TO,new InternetAddress(user.getUserMail()));
        //4.4邮件标题
        mimeMessage.setSubject("用户注册邮件");
        String info="恭喜您注册成功,您的用户名:"+user.getUsername()+",您的密码为:"+user.getPassword()+",请妥善保管,如有疑问请联系网站客服";

        //4.5邮件内容
        mimeMessage.setContent(info,"text/html;charset=utf-8");
        transport.sendMessage(mimeMessage,mimeMessage.getAllRecipients());
    }
}

为了防止乱码,我们再写个过滤器:

package com.muhan.filter;

import javax.servlet.*;
import java.io.IOException;

public class CharSetFilter  implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain filterChain) throws IOException, ServletException {
        req.setCharacterEncoding("utf-8");
        resp.setCharacterEncoding("utf-8");
        filterChain.doFilter(req,resp);
    }

    @Override
    public void destroy() {

    }
}

编写前端JSP页面
1.首页index.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
  <b><a href="register.jsp" style="font-size: 50px;color: red">点击注册!!</a></b>
  </body>
</html>

2.注册页面register.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>

<form action="${pageContext.request.contextPath}/q" method="post">

    <p>用户名:<input type="text" name="username" required></p>
    <p>密码:<input type="password" name="password" required></p>
    <p>收件人邮箱:<input type="email" name="email" required></p>

    <p><input type="submit" value="提交">
    <input type="reset" value="重置"></p>
</form>

</body>
</html>

3.注册成功跳转页面info.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>提示信息页面</title>
</head>
<body>

<%=request.getAttribute("message")%>
</body>
</html>

配置Web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    
    <servlet>
        <servlet-name>RegisterServlet</servlet-name>
        <servlet-class>com.muhan.servlet.RegisterServlet</servlet-class>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>RegisterServlet</servlet-name>
        <url-pattern>/q</url-pattern>
    </servlet-mapping>

    <filter>
        <filter-name>CharSet</filter-name>
        <filter-class>com.muhan.filter.CharSetFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>CharSet</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>

编写Servlet

package com.muhan.servlet;


import com.muhan.pojo.User;
import com.muhan.utils.SendMail;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class RegisterServlet extends javax.servlet.http.HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req,resp);
    }
    @Override
    protected void doPost(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);

        //用户注册成功后,给用户发送一封邮件
        //使用线程来专门发送邮件,防止出现耗时,和网站注册人数过多的情况
        SendMail send = new SendMail(user);
        //启动线程
        send.start();

        //注册用户
        req.setAttribute("message","注册成功,我们已经发送了一封邮件给您,请查收!如网络不稳定,请稍等!");
        req.getRequestDispatcher("info.jsp").forward(req,resp);

    }
}

最后配置Tomcat
在这里插入图片描述
启动Tomcat测试:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

项目结构展示:
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值