Java - HtmlEmail 郵件發送

来源:http://www.cnblogs.com/javatochen/archive/2016/06/03/5556383.html
-Advertisement-
Play Games

Java 項目中常常回遇到發送郵件 Java 發送郵件有幾種,今天先給大家介紹用 HtmlEmail 來發送郵件,我這裡是用 Maven 來搭建的 HtmlEmail 可以抄帶HTML 首先 需要導入jar 包 然後我們來建立一個發送郵件的 Mail 類 JavaBean 然後再來創建一個發送郵件的 ...


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("[email protected]");
 8         // 發件人名稱
 9         mail.setName("Java.小學生");
10         // 登錄賬號,一般都是和郵箱名一樣吧  
11         mail.setUsername("[email protected]");
12         // 發件人郵箱的登錄密碼  
13         mail.setPassword("xxxxxxxx");
14         // 接收人  
15         mail.setReceiver("[email protected]");
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:[email protected]?subject=test&[email protected]&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 會打開你郵件客戶端一個發送界面,如果你有寫抄帶信息,也會給你帶上

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 經常,會有一些人搞不清楚.NET和c#和ASP.NET這三者之間的關係,她們都是什麼呢?他們之間有什麼關係呢?今天我簡單給大家總結一下吧。 首先:什麼是.NET? .NET是微軟公司下的一個開發平臺,.NET核心就是.NET Framwork(.NET框架)是.NET程式開發和運行的環境,在這個平臺 ...
  • 捆綁包(Bundle): 能夠組織和優化CSS以及JavaScript文件,是由視圖和佈局引發瀏覽器向伺服器請求的文件。 顯示模式(Display Mode): 針對不同的設備採用不同的視圖。 理解預設腳本庫 在創建除Empty以外的任一MVC項目時,Visual Studio都會在Scripts文 ...
  • //設備在地圖上進行標註 function GetGateInfo(vSID, vMap) { var icon = "../Content/easyui/themes/icons/gate.png"; var myIcon = new BMap.Icon(icon, new BMap.Size(3 ...
  • 一、編輯器簡介 寫這個控制項之前總想找一找開源的,可以偷下懶省點事。可是各種地方都搜遍了也沒有找到。 於是,那就做第一個吃螃蟹的人吧! 控制項主要有三個功能:塗鴉、裁剪、合成。 塗鴉:主要是用到了InkToolbar和InkCanvas。 裁剪:這個用到的比較複雜,源碼會公佈出來。 合成:將塗鴉圖層按比 ...
  • 1.設置WinForm窗體屬性showinTask=false 2.加notifyicon控制項notifyIcon1,為控制項notifyIcon1的屬性Icon添加一個icon圖標。 3.添加窗體最小化事件(首先需要添加事件引用): 4.添加點擊圖標事件(首先需要添加事件引用): private v ...
  • 模型驗證(Model Validation):是確保用戶接收的數據適合於綁定的模型,並且在不合適時,給用戶提供有用的信息,以幫助他們修正其問題的過程。 模型驗證過程一:檢查接收的數據——是保持域模型完整性的方式之一。 模型驗證過程二:幫助用戶修正問題。 示例項目介紹 項目模板:Basic 項目名稱: ...
  • ApiView是.net api的介面文檔查看網站,用於解決分散式開發過程中的Api介面管理和溝通問題。 自動生成api文檔; 方便調試及第三方開發人員對接,可以應用在asp.net mvc,wcf,webservice 中使用; 代碼及原理都很簡單,方便修改和完善。 ...
  • 在傳統的Spring MVC開發方法中,必須在Bean配置文件中為每個控制器類配置實例和請求映射和讓每個控制器類去實現或者擴展特定於框架的介面或者基類,不夠靈活。 如果Spring MVC可以自動偵測你的控制器類和請求映射,就能減少配置所需要的工作量。 Spring2.5支持一種基於註解的控制器開發 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...