如何快速实现邮箱注册(项目案例)

简介: 说起Web项目,学过Java的一定都做过很多,今天就介绍一个常用的功能——邮箱注册。这个功能主要针对面向大众的一些在线系统,比如我们平时注册一些网站,都需要首先提供邮箱,然后系统自动发送邮件到注册邮箱,激活验证通过后才能使用。

说起Web项目,学过Java的一定都做过很多,今天就介绍一个常用的功能——邮箱注册。


这个功能主要针对面向大众的一些在线系统,比如我们平时注册一些网站,都需要首先提供邮箱,然后系统自动发送邮件到注册邮箱,激活验证通过后才能使用。


项目介绍



我们首先搭建项目,框架和数据库随意,演示系统使用的是Servlet,数据库使用Mysql。


项目结构图如下:


image.png



Mysql数据库


20210118111516583.png


演示操作



image.gif


具体实现



为了简化操作,项目只有注册功能。在register页面右键run as,启动后填写注册信息,注册成功后跳转到login,失败跳转到msg。具体细节操作在Servlet,下面我们详细介绍。


Jsp页面创建一个Form,填写注册信息:


<div class="col-md-12" style="width:100%;background:url('${pageContext.request.contextPath}/images/regist_bg.jpg');">
      <div class="col-md-2"></div>
      <div class="col-md-8" style="background:#fff;padding:40px 80px;margin:30px 30px 20px 45px ;border:7px solid #ccc;width:70%">
        <font>会员注册</font>USER REGISTER
        <form class="form-horizontal" name="f_reg" style="margin-top:5px;" method="post" action="${pageContext.request.contextPath}/register" onsubmit="return checkFrom()">
           <div class="form-group">
              <label for="username" class="col-sm-2 control-label">用户名</label>
              <div class="col-sm-6">
                <input type="text" class="form-control" id="username" placeholder="请输入用户名  字母开头后跟数字或下划线" name="username">
              </div>
            </div>
             <div class="form-group">
              <label for="inputPassword3" class="col-sm-2 control-label">密码</label>
              <div class="col-sm-6">
                <input type="password" class="form-control" id="inputPassword3" placeholder="请输入密码,至少6位" name="password">
              </div>
            </div>
             <div class="form-group">
              <label for="confirmpwd" class="col-sm-2 control-label">确认密码</label>
              <div class="col-sm-6">
                <input type="password" class="form-control" id="confirmpwd" placeholder="请输入确认密码" name="password2">
              </div>
            </div>
            <div class="form-group">
              <label for="inputEmail3" class="col-sm-2 control-label">Email</label>
              <div class="col-sm-6">
                <input type="email" class="form-control" id="inputEmail3" placeholder="Email  如 haha520@163.com" name="email">
              </div>
            </div>
           <div class="form-group">
              <label for="usercaption" class="col-sm-2 control-label">姓名</label>
              <div class="col-sm-6">
                <input type="text" class="form-control" id="usercaption" placeholder="请输入姓名" name="realname">
              </div>
            </div>
            <div class="form-group opt">  
            <label for="inlineRadio1" class="col-sm-2 control-label">性别</label>  
            <div class="col-sm-6">
              <label class="radio-inline">
            <input type="radio" name="sex" id="inlineRadio1" value="男" checked> 男
          </label>
          <label class="radio-inline">
            <input type="radio" name="sex" id="inlineRadio2" value="女"> 女
          </label>
          </div>
            </div>    
            <div class="form-group">
              <label for="date" class="col-sm-2 control-label">出生日期</label>
              <div class="col-sm-6">
                <input type="date" class="form-control" placeholder="请输入日期" onclick="laydate()"  name="birthday">         
              </div>
            </div>
            <div class="form-group">
              <div class="col-sm-offset-2 col-sm-10">
                <input type="submit"  width="100" value="注册" name="submit" border="0"
                style="background: url('${pageContext.request.contextPath}/images/register.gif') no-repeat scroll 0 0 rgba(0, 0, 0, 0);
                height:35px;width:100px;color:white;">
              </div>
            </div>
        </form>
      </div>


Servlet中,我们需要使用163邮箱作为发送端,在里面配置上个人邮箱及密码即可,代码:


@SuppressWarnings("serial")
public class RegisterServlet extends HttpServlet {
  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {   
    String email = request.getParameter("email");
    Map<String, String[]> map = request.getParameterMap();
    //2、封装成User对象
    User u = new User();
    MyBeanUtils.populate(u, map);
    //3、调用Service层完成功能
    UserService us = new UserServiceImpl();
    boolean b = us.insertUser(u);
    try { 
      String from = "你的邮箱"; // 获取发件人 
      String to = email; // 获取收件人 
      String subject = "恭喜你,注册成功"; // 获取邮件主题 
      String messageText = "欢迎你注册本网站,你现在已经注册成功,请返回到登录界面登录,更多优惠,更多精彩!"; // 获取邮件内容 
      String ddd = "邮箱密码"; // 获取发件人邮箱密码 
      String mailserver = "smtp.163.com"; // 指定SMTP服务器的主机名 
      // 建立邮件会话 
      Properties props = new Properties(); 
      props.put("http.proxySet","true");//设置代理主机参数  
      props.put("http.proxyHost","172.17.18.80");  
      props.put("http.proxyPort","8080");  
      props.put("mail.smtp.host", mailserver); // 指定SMTP协议 
      props.put("mail.smtp.auth", "true"); // 指定需要向服务器端提交身份认证 
      Session sess = Session.getInstance(props); // 获取session 
      sess.setDebug(true); // 设置调试标志 
      MimeMessage message = new MimeMessage(sess); // 新建一个消息对象 
      // 设置发件人 
      InternetAddress from_mail = new InternetAddress(from); 
      message.setFrom(from_mail); 
      // 设置收件人 
      InternetAddress to_mail = new InternetAddress(to); 
      message.setRecipient(Message.RecipientType.TO, to_mail); 
      // 设置主题 
      message.setSubject(subject); 
      // 设置内容 
      message.setText(messageText); 
      // 设置发送时间 
      message.setSentDate(new Date()); 
      // 发送邮件 
      message.saveChanges(); // 保证报头域同会话内容保持一致 
      Transport transport = sess.getTransport("smtp"); 
      transport.connect(mailserver, from, ddd); // 建立与邮件服务器之间的连接 
      transport.sendMessage(message, message.getAllRecipients()); // 发送邮件 
      transport.close(); // 关闭与邮件服务器之间的连接 
      //4、响应注册的结果   
      if(b){        
        request.setAttribute("msg","请到邮箱验证是否注册成功!");
        us.updatestatus(u);
        request.getRequestDispatcher("/jsp/msg.jsp").forward(request, response);
      }else{
        request.setAttribute("msg","对不起,注册失败,请联系管理员!");
        request.getRequestDispatcher("/jsp/msg.jsp").forward(request, response);
      }
      } catch (Exception e) { 
        request.setAttribute("msg","对不起,注册失败,请检查 邮箱是否正确!");
        request.getRequestDispatcher("/jsp/msg.jsp").forward(request, response);
      } 
  }


如果注册成功,则写入数据库中:


public class UserDaoImpl implements UserDao {
  //DBUtils的核心类,用于执行sql语句的核心对象
  private QueryRunner runner = new  QueryRunner();
  //1、注册用户的方法
  public int insertUser(User u) {
    //1、编写sql
    String sql = "insert into user values(null,?,?,?,?,?,?,?,null)";
    //2、准备参数与结果集,参数为数组,结果集为int类型的结果
    Object[] parm = {u.getUsername(),u.getPassword(),u.getRealname(),u.getEmail(),u.getSex(),u.getBirthday(),0};
    int i=0;
    try {
      //3、获取连接对象,使用QueryRunner对象执行sql语句
      i=runner.update(JDBCUtils.getConnection(), sql, parm);
    } catch (SQLException e) {
      e.printStackTrace();
    }
    return i;
  }
  public int updatestatus(User u) {
    //1、编写sql
    QueryRunner qr= new QueryRunner();
    String sql = "update user set status = ? where username = ?";
    try {
      qr.update(JDBCUtils.getConnection(), sql, 1,u.getUsername());
    } catch (SQLException e) {
      e.printStackTrace();
    }
    return 1;
  }
}


以上就是具体实现过程,如果你有任何问题,欢迎私信,我们共同交流讨论。


相关文章
|
Java 计算机视觉
实现邮箱验证(邮箱验证码登录)
我们要实现web或者Java的发送邮箱验证码到邮箱上进行验证。当然我们需要做一下前提的准备,也就是先要导我们的jar包,然后再进行下一步的操作。
|
JavaScript Android开发
使用贝叶斯曲线滑动安卓屏幕(autojsPro7)
使用贝叶斯曲线滑动安卓屏幕(autojsPro7)
816 0
|
自然语言处理 API 索引
Elasticsearch Analyzer原理分析并实现中文分词
Elasticsearch Analyzer原理分析并实现中文分词
535 0
|
2月前
|
SQL 分布式计算 对象存储
Lake Search:ES x Paimon 让湖上多模态数据可搜可用
当图片、视频、文本和向量在 Paimon 中增长到 PB 级,传统“同步到湖外再建索引”的方式,会让搜索面临数据就绪慢、第二份事实数据成本高和版本治理复杂等问题。本文介绍阿里云 Elasticsearch 9.4 Search Lake 如何直接挂载与 Paimon 表版本关联的 Global Index,在不复制事实数据的前提下提供 BM25、kNN、结构化过滤、排序与聚合能力,并结合多模态样本湖场景拆解方案架构、Demo 及性能与成本取舍。 关键词:Search Lake、Apache Paimon、Elasticsearch 9.4、Global Index、OpenLake、多模态检索
380 0
|
6月前
|
API
开源剪映小助手(capcut-mate)v3.0.22发布
CapCut Mate API 是开源免费的剪映草稿自动化工具,基于 FastAPI,支持独立部署。为大模型提供开箱即用的视频编辑 Skills,实现剪映核心功能全流程自动化,轻松生成专业视频。兼容 Coze/n8n,支持云渲染。
1769 1
|
6月前
|
安全 机器人 Linux
零基础零技术|OpenClaw阿里云+本地多系统部署+千问/Coding Plan API配置+钉钉接入全指南
OpenClaw(原Clawdbot,昵称“龙虾”)是一款开源AI自动化代理框架,核心功能是通过自然语言指令拆解,调用各类技能完成文件管理、办公协同、数据抓取、代码生成等重复性任务,无需手动编写脚本,大幅提升个人与轻量团队的工作效率。其核心依赖大模型提供推理能力,自身不具备独立的自然语言理解与任务规划能力,因此部署流程、API配置以及办公工具接入,成为零基础用户落地OpenClaw的核心痛点。
1100 0
|
9月前
|
搜索推荐 安全 BI
阿里云邮件推送支持哪些功能?附邮件群发费用价格表
阿里云邮件推送(DirectMail)是高效稳定的电子邮件群发服务,支持事务通知、批量营销等场景,具备高到达率与强系统稳定性。提供控制台、API、SMTP多种接入方式,无需自建服务器,开通即用。支持邮件模板、列表管理、个性化定制及多维度数据统计,助力企业精准触达用户。价格透明,按量付费,详情见官方页面。
787 5
|
机器学习/深度学习 存储 监控
基于深度学习YOLO框架的城市道路损伤检测与评估项目系统【附完整源码+数据集】
本项目基于深度学习的YOLO框架,成功实现了城市道路损伤的自动检测与评估。通过YOLOv8模型,我们能够高效地识别和分类路面裂缝、井盖移位、坑洼路面等常见的道路损伤类型。系统的核心优势在于其高效性和实时性,能够实时监控城市道路,自动标注损伤类型,并生成损伤评估报告。
721 0
基于深度学习YOLO框架的城市道路损伤检测与评估项目系统【附完整源码+数据集】
|
数据采集 监控 安全
园区 AR 导航系统:技术创新与功能拓展
**维小帮园区AR导航系统**借助高精地图与AR技术,打破传统二维导航局限,提供三维立体地图和沉浸式导航体验。系统包括AR实景指引、VR全景预览、便捷预约参观和智能停车场导航等功能,大幅提升访客定位与通行效率,推动园区管理智能化。未来,该技术有望在更多领域广泛应用。
1000 21
园区 AR 导航系统:技术创新与功能拓展

热门文章

最新文章