1. 程式人生 > >專案案例 || 如何快速實現郵箱註冊

專案案例 || 如何快速實現郵箱註冊

說起Web專案,學過Java的一定都做過很多,今天就介紹一個常用的功能——郵箱註冊

這個功能主要針對面向大眾的一些線上系統,比如我們平時註冊一些網站,都需要首先提供郵箱,然後系統自動傳送郵件到註冊郵箱,啟用驗證通過後才能使用。

專案介紹

我們首先搭建專案,框架和資料庫隨意,演示系統使用的是Servlet,資料庫使用Mysql。

專案結構圖如下:

Mysql資料庫

演示操作

具體實現

為了簡化操作,專案只有註冊功能。在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;
	}
	
}

以上就是具體實現過程,如果你有任何問題,歡迎留言,我們共同交流討論。

還可以微信關注和置頂我的公眾號“SL社群”(slshequ),獲取原始碼資源及眾多專案案例。