首页 > 其他分享 >如何快速实现邮箱注册(项目案例)

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

时间:2023-09-05 11:01:50浏览次数:34  
标签:String request 案例 注册 new 邮箱 message


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

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

项目介绍

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

项目结构图如下:

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

Mysql数据库

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


演示操作

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

具体实现

为了简化操作,项目只有注册功能。在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  如 [email protected]" 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;
	}
	
}

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


标签:String,request,案例,注册,new,邮箱,message
From: https://blog.51cto.com/u_14544277/7369604

相关文章

  • 注册中验证码实现(项目案例)
    今天,给大家介绍验证码的相关配置问题。众所周知,对传统验证码而言,便捷和安全长期以来一直是鱼与熊掌的关系。这可从12306与黄牛的博弈中看出端倪。最先开始,只是简单的数字英文组合,再后来有了加减法,相信一般人也可以应付。直到出现一闪一闪的动态验证码和变形字母,第一次体会到眼睛都......
  • Git使用经验总结2-配置用户名邮箱
    可以使用gitconfig指令来配置一些设置,比如配置用户名邮箱。在开发团队要求成员配置用户名和邮箱是很有用的,可以配合工具区分成员的代码,以及将代码中的问题发送给成员的邮箱中。查看当前Git的用户名及邮箱的指令:gitconfiguser.namegitconfiguser.email修改Git用户名及邮......
  • IRIS路由注册(接路由底层分析)
    IRIS路由注册实例化完Application对象,接着就是路由注册了。也就是类似下面的代码  看看api.Get 实现我们主要看app.Get("/home",HomeHandler)这个函数的实现。进入该Get函数的源码,发现调用者是APIBuilder结构体,如下:这是因为在Application结构体中嵌套了router.APIBuild......
  • 实战 图书馆系统管理案例
    config:敏感的配置一般都是在配置中心配置,比如consul或者阿波罗上面controller:写一些handler的,拿到参数要去调用service层的逻辑。(只负责接受参数,怎么绑定参数,要去调用哪个service的,handler的一个入口)service:service层才是正真的业务处理层。调用dao层的增删改查操作dao:只关心数据......
  • Java对象与json的转换使用的依赖是fastjson,转换的简单案例
    2023-09-04<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.47</version></dependency>转换的简单案例packagecom.hh.json;importcom.alibaba.fastjson......
  • SpringBoot+Nacos+OpenFeign实现服务的注册、发现、远程调用
    一、概述微服务的开发必定会用到SpringBoot、Nacos(服务发现、注册、配置中心)、OpenFeign(服务远程调用,也就是通过注解调用其他服务的接口)。今天写这篇是想把这三个功能集成在一起。让他们一起参与微服务的开发工作。要实现的目标:nacos要能够注册及发现服务,openfeign......
  • 服务器数据恢复- 执行fsck导致Ext4分区无法挂载的数据恢复案例
    Ext4文件系统相关概念:块组:Ext4文件系统的空间被划分为若干个块组,每个块组内的结构大致相同。块组描述符表:每个块组都对应一个块组描述符,这些块组描述符统一放在文件系统的前部,称为块组描述符表。每个块组描述符大小为32字节,其主要描述块位图、i-节点位图及i-节点表的地址等信息。......
  • 如何批量注册多个Gmail账户且不会关联?
    Gmail是谷歌旗下的网络邮件服务,是全球最受欢迎的电子邮件服务,它的用途很广泛,具备全球性和通用性的特点。数百万人使用它,不分年龄、性别和地点。它也可以在多个平台上使用,包括网页、移动应用和桌面客户端。正因为如此,Gmail也有很多限制政策:一个IP地址只能登录四个Gmail账户;并且在使......
  • 振弦采集仪应用于水库大坝的解决案例
    水库大坝是保障人民生命财产安全的重要设施,而对大坝的安全监测也是至关重要的。为了更好地了解和监测大坝的运行状态,振弦采集仪被广泛应用于水库大坝的解决方案中。振弦采集仪是一种能够准确测量和监测大坝振动的设备。它利用振弦传感器来捕捉大坝的振动信号,并将信号转化为电信号,......
  • Nacos 注册中心的设计原理:让你的应用轻松实现高效注册与发现!
    当应用开始脱离单机运行和访问时,服务发现就诞生了。目前的网络架构是每个主机都有⼀个独立的IP地址,服务发现基本都是通过某种方式获取到服务所部署的IP地址。DNS协议是最早将⼀个网络名称翻译为网络IP的协议,在最初的架构选型中,DNS+LVS+Nginx基本满足所有RESTful服务的发......