JavaMail實現發送郵件,主要是用在項目中的:當新用戶以郵箱號碼註冊的時候,給新用戶發送郵件,提醒用戶點擊連接激活。 其中封裝了信件模板。 html
1. java
package com.common.util; import java.util.*; import javax.mail.*; import javax.mail.internet.*; public class MailUtil { /*** * 下發郵件 * @param smtpServers //郵件服務器主機名 * @param protocols //郵件傳輸協議 * @param usernames //登陸用戶名 * @param passwords //登陸密碼 * @param froms //發信人地址 * @param tos //收信人地址 * @param subjects //郵件主題 * @param bodys //郵件內容 * @throws Exception */ public void smthEmail(String smtpServers,String protocols,String usernames,String passwords,String froms,String tos,String subjects,String bodys)throws Exception{ String smtpServer=smtpServers;//郵件服務器主機名 String protocol=protocols;//郵件傳輸協議 String username=usernames;//登陸用戶名 String password=passwords;//登陸密碼 String from=froms;//發信人地址 String to=tos;//收信人地址 String subject=subjects;//郵件主題 String body=bodys;//郵件內容 //建立Session對象 Properties props=new Properties(); props.setProperty("mail.transport.protocol", protocol); props.setProperty("mail.host",smtpServer); props.put("mail.smtp.auth", "true"); MyAuthenticator authenticator=new MyAuthenticator(username,password); Session session=Session.getInstance(props,authenticator); session.setDebug(true); //建立表明郵件的MimeMessage對象 MimeMessage msg=new MimeMessage(session); msg.setFrom(new InternetAddress(from)); msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to)); msg.setSentDate(new Date()); msg.setSubject(subject); // 設置 E-mail 主題 msg.setContent(body, "text/html;charset = gbk"); // 設置 E-mail 正文部分 msg.saveChanges(); // msg.writeTo(new FileOutputStream("F:\\htmlMail.eml")); //本地調試代碼,可去掉 Transport.send(msg); } }
2. 瀏覽器
package com.common.util; import javax.mail.Authenticator; import javax.mail.PasswordAuthentication; public class MyAuthenticator extends Authenticator{ String username=null; String password=null; //經過構造方法接受外部傳入的用戶信息 public MyAuthenticator(String user,String pass){ this.username=user; this.password=pass; } //覆蓋Authenticator類中的getPasswordAuthentication方法 protected PasswordAuthentication getPasswordAuthentication(){ //使用外部傳入的用戶名和密碼建立對象 return new PasswordAuthentication(username,password); } }
3. 在後臺的代碼能夠這樣調用JavaMail接口,其中裏面包含了信件的內容模板。 服務器
/** * 給綁定的郵箱發激活郵件 * @param mapping * @param form * @param request * @param response * @return * @throws Exception */ public ActionForward boundEmail(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { // 獲取註冊的手機號和綁定的郵箱 String userPhone = request.getParameter("userPhone"); String email = request.getParameter("email"); log.debug("----註冊的手機號----" + userPhone); log.debug("----要綁定的郵箱----" + userPhone); // 下發郵件 MailUtil mm = new MailUtil(); StringBuffer url = request.getRequestURL(); Long createDate = System.currentTimeMillis(); // 下發郵件的時間,由於連接只能30分鐘內有效 //url中的參數最好加密後傳輸 String link = url + "?method=activeBoundEmail&userPhone="+userPhone+"&email=" + email + "&createDate=" + createDate; // 發送郵件模板,由聯通提供 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm"); String nowDate = sdf.format(new Date()); String subject = "XXX—綁定的用戶郵箱激活連接"; String body = "<h2>親愛的" + userPhone + ":</h2> " + "<h4>恭喜您成爲XXX用戶!</h4> " + "<p>請點擊如下連接激活您綁定的郵箱(連接30分鐘內有效): " + "<a href=" + link + ">" + link + "</a>(激活連接)</p><br/>" + "<p>若是點擊以上連接沒有反應,請將該網址複製並粘貼到新的瀏覽器窗口中。</p>" + "<p>綁定的郵箱激活後,您便可用綁定的郵箱做爲登陸帳號</p><br/><br/>" + "<p style='font-size: 13px' >(請注意,該電子郵件地址不接受回覆郵件,若是您並未發過此請求,則多是由於其餘用戶在嘗試綁定郵箱時誤輸入了您的電子郵件地址而使您收到這封郵件,那麼您能夠放心的忽略此郵件,無需進一步採起任何操做。)</p><br/><br/><br/>" + "<p align='right'>XXX</p>" + "<p align='right'>" + nowDate + "</p>"; log.debug("---綁定的郵箱的激活連接----" + body); log.debug("---綁定的郵箱的激活連接----" + link); mm.smthEmail(this.getServlet().getServletContext().getInitParameter("smtpServer"), "smtp", this .getServlet().getServletContext().getInitParameter("username"), this.getServlet() .getServletContext().getInitParameter("password"), this.getServlet().getServletContext() .getInitParameter("from"), email, subject, body); //由於這裏調用郵件的接口內部代碼 若是拋異常的時候並無相關的捕捉異常塊,因此外面沒法判斷郵件接口是否已經發生成功了,只好默認每次都能發送成功 PrintWriter out = response.getWriter(); out.println(0); return null; }