Java,java官網下載
Java 項目中常常回遇到發送郵件
Java 發送郵件有幾種,今天先給大家介紹用 HtmlEmail 來發送郵件,我這裡是用 Maven 來搭建的
HtmlEmail 可以抄帶HTML
首先 需要匯入jar 包
1 <dependency>2 <groupId>org.apache.commons</groupId>3 <artifactId>commons-email</artifactId>4 <version>1.4</version>5 </dependency>
然後我們來建立一個發送郵件的 Mail 類 JavaBean
1 public class Mail implements Serializable{ 2 3 private static final long serialVersionUID = -6390720891150157552L; 4 public static final String ENCODEING = "UTF-8"; 5 6 // 伺服器位址 7 private String host; 8 // 寄件者的郵箱 9 private String sender; 10 // 寄件者暱稱 11 private String name; 12 // 帳號 13 private String username; 14 // 密碼 15 private String password; 16 // 收件者的郵箱 17 private String receiver; 18 // 收件者的名稱 19 private String receiverName; 20 // 收件者的郵箱(key)和名稱(value) 21 private Map<String, String> to; 22 // 抄送人的郵箱(key)和名稱(value) 23 private Map<String, String> cc; 24 // 秘密抄送人的郵箱(key)和名稱(value) 25 private Map<String, String> bcc; 26 // 主題 27 private String subject; 28 // 資訊(支援HTML) 29 private String message; 30 31 public String getHost() { 32 return host; 33 } 34 public void setHost(String host) { 35 this.host = host; 36 } 37 public String getSender() { 38 return sender; 39 } 40 public void setSender(String sender) { 41 this.sender = sender; 42 } 43 public String getReceiver() { 44 return receiver; 45 } 46 public void setReceiver(String receiver) { 47 this.receiver = receiver; 48 } 49 public String getName() { 50 return name; 51 } 52 public void setName(String name) { 53 this.name = name; 54 } 55 public String getUsername() { 56 return username; 57 } 58 public void setUsername(String username) { 59 this.username = username; 60 } 61 public String getPassword() { 62 return password; 63 } 64 public void setPassword(String password) { 65 this.password = password; 66 } 67 public String getSubject() { 68 return subject; 69 } 70 public void setSubject(String subject) { 71 this.subject = subject; 72 } 73 public String getMessage() { 74 return message; 75 } 76 public void setMessage(String message) { 77 this.message = message; 78 } 79 public String getReceiverName() { 80 return receiverName; 81 } 82 public void setReceiverName(String receiverName) { 83 this.receiverName = receiverName; 84 } 85 public Map<String, String> getTo() { 86 return to; 87 } 88 public void setTo(Map<String, String> to) { 89 this.to = to; 90 } 91 public Map<String, String> getCc() { 92 return cc; 93 } 94 public void setCc(Map<String, String> cc) { 95 this.cc = cc; 96 } 97 public Map<String, String> getBcc() { 98 return bcc; 99 }100 public void setBcc(Map<String, String> bcc) {101 this.bcc = bcc;102 }103 }
然後再來建立一個發送郵件的工具類 MailUtil
1 public class MailUtil { 2 3 public Boolean send(Mail mail){ 4 HtmlEmail email = new HtmlEmail(); 5 try { 6 // 這裡是SMTP發送伺服器的名字:163的如下:"smtp.163.com" 7 email.setHostName(mail.getHost()); 8 // 字元編碼集的設定 9 email.setCharset(Mail.ENCODEING); 10 // 發送人的郵箱 11 email.setFrom(mail.getSender(), mail.getName()); 12 // 如果需要認證資訊的話,設定認證:使用者名稱-密碼。分別為寄件者在郵件伺服器上的註冊名稱和密碼 13 email.setAuthentication(mail.getUsername(), mail.getPassword()); 14 15 // 設定收件者資訊 16 setTo(email, mail); 17 // 設定抄送人資訊 18 setCc(email, mail); 19 // 設定密送人資訊 20 setBcc(email, mail); 21 // 要發送的郵件主題 22 email.setSubject(mail.getSubject()); 23 // 要發送的資訊,由於使用了HtmlEmail,可以在郵件內容中使用HTML標籤 24 email.setHtmlMsg(mail.getMessage()); 25 // 發送 26 email.send(); 27 if (Log.isDebugEnabled()) { 28 Log.info(mail.getSender() + " 發送郵件到 " + mail.getReceiver()); 29 } 30 return true; 31 } catch (Exception e) { 32 e.printStackTrace(); 33 Log.info(mail.getSender() + " 發送郵件到 " + mail.getReceiver() + " 失敗"); 34 return false; 35 } 36 } 37 38 /** 39 * 設定收件者資訊 40 * 41 * @param email 42 * @param mail 43 * @throws EmailException 44 */ 45 private void setTo(HtmlEmail email, Mail mail) throws EmailException{ 46 // 收件者不為空白 47 if (StringUtils.isNotEmpty(mail.getReceiver())) { 48 // 收件者名稱不為空白 49 if (StringUtils.isNotEmpty(mail.getReceiverName())) { 50 email.addTo(mail.getReceiver(), mail.getReceiverName()); 51 } else { 52 email.addTo(mail.getReceiver()); 53 } 54 } 55 // 收件者 Map 不為空白 56 if (mail.getTo() != null) { 57 for (Map.Entry<String, String> entry : mail.getTo().entrySet()) { 58 // 收件者名稱不為空白 59 if (StringUtils.isNotEmpty(entry.getValue())) { 60 email.addTo(entry.getKey(), entry.getValue()); 61 } else { 62 email.addTo(entry.getKey()); 63 } 64 } 65 } 66 } 67 68 /** 69 * 設定抄送人資訊 70 * 71 * @param email 72 * @param mail 73 * @throws EmailException 74 */ 75 private void setCc(HtmlEmail email, Mail mail) throws EmailException{ 76 // 抄送人 Map 不為空白 77 if (mail.getCc() != null) { 78 for (Map.Entry<String, String> entry : mail.getCc().entrySet()) { 79 // 抄送人名稱不為空白 80 if (StringUtils.isNotEmpty(entry.getValue())) { 81 email.addCc(entry.getKey(), entry.getValue()); 82 } else { 83 email.addCc(entry.getKey()); 84 } 85 } 86 } 87 } 88 89 /** 90 * 設定密送人資訊 91 * 92 * @param email 93 * @param mail 94 * @throws EmailException 95 */ 96 private void setBcc(HtmlEmail email, Mail mail) throws EmailException{ 97 // 密送人 Map 不為空白 98 if (mail.getBcc() != null) { 99 for (Map.Entry<String, String> entry : mail.getBcc().entrySet()) {100 // 密送人名稱不為空白101 if (StringUtils.isNotEmpty(entry.getValue())) {102 email.addBcc(entry.getKey(), entry.getValue());103 } else {104 email.addBcc(entry.getKey());105 }106 }107 }108 }109 }
寫到這裡,大概也就差不多了,萬裡長征只有最後一步了
測試,測試,測試
這裡編寫一個 junit 方法來測試
1 @Test 2 public void sendMail(){ 3 Mail mail = new Mail(); 4 // 設定郵件伺服器 5 mail.setHost("smtp.exmail.qq.com"); 6 // 寄件者郵件地址 7 mail.setSender("chenhao@kezhanbang.cn"); 8 // 寄件者名稱 9 mail.setName("Java.小學生");10 // 登入帳號,一般都是和郵箱名一樣吧 11 mail.setUsername("chenhao@kezhanbang.cn");12 // 寄件者郵箱的登入密碼 13 mail.setPassword("xxxxxxxx");14 // 接收人 15 mail.setReceiver("huntertochen@163.com");16 mail.setReceiverName("我要女票");17 mail.setSubject("萬裡長征最後一步測試");18 String html = "<!DOCTYPE html>";19 html += "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">";20 html += "<title>Insert title here</title>";21 html += "</head><body>";22 html += "<div style=\"width:600px;height:400px;margin:50px auto;\">";23 html += "<h1>我來看看郵件是否發送成功呢</h1><br/><br/>";24 html += "<p>下面是通過該協議可以建立一個指向電子郵件地址的超級連結,通過該連結可以在Internet中寄送電子郵件</p><br/>";25 html += "<a href=\"mailto:huntereagle@foxmail.com?subject=test&cc=huntertochen@163.com&body=use mailto sample\">send mail</a>";26 html += "</div>";27 html += "</body></html>";28 mail.setMessage(html);29 30 new MailUtil().send(mail);31 }
趕緊登入郵箱看看吧
來看看這裡 主題 內容,發送人名稱和收件者名稱是否和代碼寫的一樣呢,如果一樣的話,恭喜你成功啦
到這,其實發送郵件就算完了!!!
這裡在囉嗦最後一個小知識點 mailto
mailto: 通過該協議可以建立一個指向電子郵件地址的超級連結,通過該連結可以在Internet中寄送電子郵件
我們點擊 send mail 會開啟你郵件用戶端一個發送介面,如果你有寫抄帶資訊,也會給你帶上