現在很多的網站都提供有用戶註冊功能, 通常我們註冊成功之後就會收到一封來自註冊網站的郵件。郵件裡面的內容可能包含了我們的註冊的用戶名和密碼以及一個激活賬戶的超鏈接等信息。今天我們也來實現一個這樣的功能,用戶註冊成功之後,就將用戶的註冊信息以Email的形式發送到用戶的註冊郵箱當中,實現發送郵件功能就得借助於JavaMail了。
一、搭建開發環境
1.1、創建Web項目
1.2、用戶註冊的Jsp頁面
register.jsp
<%@ page language="java" pageEncoding="UTF-"%><!DOCTYPE HTML><html><head><title>註冊頁面</title></head><body><form action="${pageContext.request.contextPath}/servlet/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>1.3、消息提示頁面
message.jsp
<%@ page language="java" pageEncoding="UTF-"%><!DOCTYPE HTML><html><head><title>消息提示頁面</title></head><body>${message}</body></html>二、編寫處理用戶註冊處理程序
2.1、開發封裝用戶註冊信息的domain
User.java
package me.gacl.domain;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;}}2.2、編寫郵件發送功能
發送郵件是一件非常耗時的事情,因此這裡設計一個線程類來發送郵件
package me.gacl.web.controller;import java.util.Properties;import javax.mail.Message;import javax.mail.Session;import javax.mail.Transport;import javax.mail.internet.InternetAddress;import javax.mail.internet.MimeMessage;import me.gacl.domain.User;/*** @ClassName: Sendmail* @Description: Sendmail類繼承Thread,因此Sendmail就是一個線程類,這個線程類用於給指定的用戶發送Email* @author: 孤傲蒼狼* @date: -- 下午::**/ public class Sendmail extends Thread {//用於給用戶發送郵件的郵箱private String from = "[email protected]";//郵箱的用戶名private String username = "gacl";//郵箱的密碼private String password = "郵箱密碼";//發送郵件的服務器地址private String host = "smtp.sohu.com";private User user;public Sendmail(User user){this.user = user;}/* 重寫run方法的實現,在run方法中發送郵件給指定的用戶* @see java.lang.Thread#run()*/@Overridepublic 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-");message.saveChanges();return message;}}2.3、編寫處理用戶註冊的Servlet
package me.gacl.web.controller;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import me.gacl.domain.User;import me.gacl.service.UserService;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);}}程序運行效果如下:
現在很多網站都有這樣的功能,用戶註冊完成之後,網站根據我們註冊時填寫的郵箱給我們一封Email,然後點擊Email中的超鏈接去激活我們的用戶。這種功能就是這樣實現的。
在總結使用JavaMail發送郵件時發現,將郵件發送到sina或者sohu的郵箱時,不一定能夠馬上收取得到郵件,總是有延遲,有時甚至會延遲很長的時間,甚至會被當成垃圾郵件來處理掉,或者乾脆就拒絕接收,有時候為了看到郵件發送成功的效果,要等半天,實屬無奈啊。
以上所述是小編給大家介紹的java mail 發送郵件功能的實例代碼,希望對大家有所幫助!