package cn.buy.util; import java.security.GeneralSecurityException; import java.util.Properties; import javax.mail.Authenticator; import javax.mail.Message.RecipientType; import javax.mail.MessagingException; import javax.mail.PasswordAuthentication; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.AddressException; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import com.sun.mail.util.MailSSLSocketFactory; import cn.buy.entity.User; public class Sendmail extends Thread { private User user = null; public Sendmail(User user) { this.user = user; } @Override public void run() { // 跟smtp服務器建立一個連接 Properties p = new Properties(); // 設置郵件服務器主機名 p.setProperty("mail.host", "smtp.qq.com");// 指定郵件服務器,默認端口 25 // 發送服務器需要身份驗證 p.setProperty("mail.smtp.auth", "true");// 要采用指定用戶名密碼的方式去認證 // 發送郵件協議名稱 p.setProperty("mail.transport.protocol", "smtp"); // 開啟SSL加密,否則會失敗 MailSSLSocketFactory sf = null; try { sf = new MailSSLSocketFactory(); } catch (GeneralSecurityException e1) { e1.printStackTrace(); } sf.setTrustAllHosts(true); p.put("mail.smtp.ssl.enable", "true"); p.put("mail.smtp.ssl.socketFactory", sf); // 開啟debug調試,以便在控制台查看 // session.setDebug(true);也可以這樣設置 // p.setProperty("mail.debug", "true"); // 創建session Session session = Session.getDefaultInstance(p, new Authenticator() { @Override protected PasswordAuthentication getPasswordAuthentication() { // 用戶名可以用QQ賬號也可以用郵箱的別名 PasswordAuthentication pa = new PasswordAuthentication( "652459753@qq.com", "mftgsonsmrozbcbh"); // 后面的字符是授權碼,用qq密碼不行!! return pa; } }); session.setDebug(true);// 設置打開調試狀態 try { // 聲明一個Message對象(代表一封郵件),從session中創建 MimeMessage msg = new MimeMessage(session); // 郵件信息封裝 // 1發件人 msg.setFrom(new InternetAddress("652459753@qq.com")); // 2收件人 msg.setRecipient(RecipientType.TO, new InternetAddress(user.getOB_EMAIL())); // 3郵件內容:主題、內容 msg.setSubject("郵箱注冊橙橙網通知:歡迎注冊***賬號,請點擊鏈接激活賬號"); // StringBuilder是線程不安全的,但是速度快,這里因為只會有這個線程來訪問,所以可以用這個 StringBuilder sbd = new StringBuilder(); sbd.append("橙橙網:<br/>歡迎!請確認此郵件地址以激活您的賬號。<br/>"); sbd.append("<font color='red'><a href='http://192.168.19.62:8080/Orange_buy/home/register.jsp' target='_blank'"); sbd.append(">立即激活</a></font><br/>"); sbd.append("或者點擊下面鏈接:<br/>"); sbd.append("http://192.168.19.62:8080/Orange_buy/home/register.jsp <br/>"); sbd.append("這是一封自動發送的郵件;如果您並未要求但收到這封信件,您不需要進行任何操作。"); msg.setContent(sbd.toString(), "text/html;charset=utf-8");// 發html格式的文本 // 發送動作 Transport.send(msg); System.out.println("給" + user.getOB_EMAIL() + "發送郵件成功。"); } catch (AddressException e) { e.printStackTrace(); } catch (MessagingException e) { e.printStackTrace(); } } }
第一步:我們需要在qq郵箱設置授權碼:在設置>賬戶>


然后,servlet
//收集參數 String pwd = request.getParameter("pwd"); String emails = request.getParameter("email"); if(user!=null){ //發送激活郵件 //這里有一個小知識點,必須新開一個線程來發郵件,不能把發郵件的動作寫在這里 //如果寫在這里,用戶的前台顯示會等待過長時間,不好! new Sendmail(user).start(); System.out.println("您已經注冊成功,請去郵箱激活賬號后再進行登錄,如果沒有收到郵件,請稍等!<br/>"); }else{ System.out.println("很抱歉,服務器繁忙,注冊失敗,需要重新注冊!"); } //添加郵箱 user.setOB_EMAIL(emails); //把MD5加密的放到實體類中去 user.setOB_PASSWORD(md5.getkeyBeanofStr(pwd)); //類型 user.setOB_TYPE(1); try { int emailadd = service.EmailAdd(user); if (emailadd>0) { request.getRequestDispatcher("/home/Loginsuccess.jsp").forward(request, response); } } catch (Exception e) { e.printStackTrace(); } /** *用戶的登錄 */
