当前位置:首页 > 学习笔记 > 正文内容

javaWeb邮箱验证

廖万里3年前 (2022-09-09)学习笔记42364

我们的日常生活中用到很多用户注册啦之类的,为了提高安全性和用户体验,我们也会遇到邮箱通过邮箱确定验证信息的例子。

首先我们看一下需要哪些jar包,其中activation.jar和mail.jar是邮件发送不可少的,servlet和jstl在程序中也有用到,所以大家先将jar包导入项目中区。

javaWeb邮箱验证


然后就是我们查看邮箱smtp的服务器地址

javaWeb邮箱验证

下面就是我们的代码

RegisterServlet
package com.yuehailin.controller;
 
/**
 * Created by yuehailin on 2017/12/27.
 */
 
import com.yuehailin.domain.User;
 
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 {
 
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        try{
            String username = request.getParameter("username");
            String password = request.getParameter("password");
            String email = request.getParameter("email");
            User user = new User();
            user.setEmail(email);
            user.setPassword(password);
            user.setUsername(username);
 
            System.out.println("把用户信息注册到数据库中");
            //用户注册成功之后就使用用户注册时的邮箱给用户发送一封Email
            //发送邮件是一件非常耗时的事情,因此这里开辟了另一个线程来专门发送邮件
            Sendmail send = new Sendmail(user);
            //启动线程,线程启动之后就会执行run方法来发送邮件
            send.start();
 
            //注册用户
            //new UserService().registerUser(user);
            request.setAttribute("message", "恭喜您,注册成功,我们已经发了一封带了注册信息的电子邮件,请查收,如果没有收到,可能是网络原因,过一会儿就收到了!!");
            request.getRequestDispatcher("/message.jsp").forward(request, response);
        }catch (Exception e) {
            e.printStackTrace();
            request.setAttribute("message", "注册失败!!");
            request.getRequestDispatcher("/message.jsp").forward(request, response);
        }
    }
 
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request, response);
    }
}
 
Sendmail
package com.yuehailin.controller;
/**
 * Created by yuehailin on 2017/12/27.
 */
import com.yuehailin.domain.User;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Properties;
public class Sendmail extends Thread {
    //用于给用户发送邮件的邮箱
    // PS: 某些邮箱服务器为了增加邮箱本身密码的安全性,给 SMTP 客户端设置了独立密码(有的邮箱称为“授权码”),
    //    对于开启了独立密码的邮箱, 这里的邮箱密码必需使用这个独立密码(授权码)。
    private String from = "yuehailin99@163.com";
    //邮箱的用户名
    private String username = "yuehailin99";
    //邮箱的密码
    //    对于开启了独立密码的邮箱, 这里的邮箱密码必需使用这个独立密码(授权码)。// 发件人邮箱的 SMTP 服务器地址, 必须准确,不同邮件服务器地址不同, 一般(只是一般,绝非绝对)格式为: smtp.xxx.com
    // 网易163邮箱的 SMTP 服务器地址为: smtp.163.com
    private String password = "yuehailin99";
    //发送邮件的服务器地址
    private String host = "smtp.163.com";
    private User user;
    public Sendmail(User user){
        this.user = user;
    }
    /* 重写run方法的实现,在run方法中发送邮件给指定的用户
     * @see java.lang.Thread#run()
     */
    @Override
    public void run() {
        try{
            Properties prop = new Properties();
            prop.setProperty("mail.host", host);
            prop.setProperty("mail.transport.protocol", "smtp");
            prop.setProperty("mail.smtp.auth", "true");
            Session session = Session.getInstance(prop);
            session.setDebug(true);
            Transport ts = session.getTransport();
            ts.connect(host, username, password);
            Message message = createEmail(session,user);
            ts.sendMessage(message, message.getAllRecipients());
            ts.close();
        }catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
    /**
     * @Method: createEmail
     * @Description: 创建要发送的邮件
     * @Anthor:孤傲苍狼
     *
     * @param session
     * @param user
     * @return
     * @throws Exception
     */
    public Message createEmail(Session session, User user) throws Exception{
        MimeMessage message = new MimeMessage(session);
        message.setFrom(new InternetAddress(from));
        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();
        return message;
    }
   }

User

package com.yuehailin.domain;
 
/**
 * Created by yuehailin on 2017/12/27.
 */
 
public class User {
    private String username;
    private String password;
    private String 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;
    }
}

register.jsp

<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE HTML>
<html>
<head>
    <title>注册页面</title>
</head>
<body>
<form action="<c:url value='/RegisterServlet'/>" method="post">
    用户名:<input type="text" name="username"><br/>
    密码:<input type="password" name="password"><br/>
    邮箱:<input type="text" name="email"><br/>
    <input type="submit" value="注册">
</form>
</body>
</html>

message.jsp

<%@ page language="java" pageEncoding="UTF-8"%>
<!DOCTYPE HTML>
<html>
<head>
    <title>消息提示页面</title>
</head>
<body>
${message}
</body>
</html>


本文链接:https://www.kkkliao.cn/?id=29 转载需授权!

分享到:

版权声明:本文由廖万里的博客发布,如需转载请注明出处。


“javaWeb邮箱验证” 的相关文章

网站一直被篡改首页文件index以及indax怎么办

网站一直被篡改首页文件index以及indax怎么办

近期发现公司网站首页文件经常被篡改为indax.php或indax.html,导致网站的功能无法正常使用,百度搜索关键词,在显示结果中点击公司网站,打开后跳转到别的网站上去了,尤其我们在百度做的推广,导致客户无法访问到我们公司网站上,给公司带来很大的影响,领导让尽快解决这个问题。这样的问题已经连续出...

万策云网络工作室旗下高性能服务器,保证用户数据安全

万策云网络工作室旗下高性能服务器,保证用户数据安全

万策云工作室旗下所有业务均使用1T高防高性能服务器,数据定时备份,多台服务器实时同步数据,保障用户数据安全!多台服务器定时备份,企业级安全,50m独享,大带宽抗cc文件实时同步备份,数据库定时备份。主服务器采用T级群防,150G单机防御的国内高性能服务器。秒解机器!真实可测客户数据丢了都可以找回来...

如何在程序中实现多进程,多进程概述

如何在程序中实现多进程,多进程概述

 多进程:在一个程序中实现多任务处理,可以使用多线程和多进程两种方式。多进程创建:使用Process、类,每次实例化这个类的时候,就创建一个进程对象。编辑 多进程:一个程序运行中,产生了多个进程。N个正在运行的程序----至少N个程序1个程序------可能只有一个进程/也可能有...

Python如何实现多线程,多线程概述

Python如何实现多线程,多线程概述

 线程:线程是CPU调度的基本单位,是进程中具体的执行单元。进程包含线程,一个进程中至少包含一个线程;如果一个进程中包含了多个线程,称为多线程。多线程的实现:编辑 1,引入threading模块。import threading import time2,编...

socket概述 python中如何使用TCP/UDP协议实现通信-教程

socket概述 python中如何使用TCP/UDP协议实现通信-教程

 很多编程语言中,都使用scoket套接字实现网络通信。Socket是对TCP/IP协议的封装,Socket本身就是一个调用接口(API),方便程序员用Socket使用TCP/IP协议簇,实现网络通信。不同编程语言,shiyongSocket通信的语法有所区别,但基本原理类型相似。它的两种...

一款安卓/鸿蒙设备也能够轻松连接homepod的插件,跨平台音乐推流工具airmusic分享

一款安卓/鸿蒙设备也能够轻松连接homepod的插件,跨平台音乐推流工具airmusic分享

编辑点评:支持多种音频传输的方案,最为重要的就是支持AirPlay设备支持多种上音频传输方式的一款神器,AirMusic安卓免费版,是个解锁了高级功能的版本,软件需要root权限,可以将音频内容以满足自己需求的方式来推送到你所需要的音响当中,让你的安卓设备也能够轻松的享受到各种不同的音响的内容。操作...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。