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
  • .Net8.0 Blazor Hybird 桌面端 (WPF/Winform) 實測可以完整運行在 win7sp1/win10/win11. 如果用其他工具打包,還可以運行在mac/linux下, 傳送門BlazorHybrid 發佈為無依賴包方式 安裝 WebView2Runtime 1.57 M ...
  • 目錄前言PostgreSql安裝測試額外Nuget安裝Person.cs模擬運行Navicate連postgresql解決方案Garnet為什麼要選擇Garnet而不是RedisRedis不再開源Windows版的Redis是由微軟維護的Windows Redis版本老舊,後續可能不再更新Garne ...
  • C#TMS系統代碼-聯表報表學習 領導被裁了之後很快就有人上任了,幾乎是無縫銜接,很難讓我不想到這早就決定好了。我的職責沒有任何變化。感受下來這個系統封裝程度很高,我只要會調用方法就行。這個系統交付之後不會有太多問題,更多應該是做小需求,有大的開發任務應該也是第二期的事,嗯?怎麼感覺我變成運維了?而 ...
  • 我在隨筆《EAV模型(實體-屬性-值)的設計和低代碼的處理方案(1)》中介紹了一些基本的EAV模型設計知識和基於Winform場景下低代碼(或者說無代碼)的一些實現思路,在本篇隨筆中,我們來分析一下這種針對通用業務,且只需定義就能構建業務模塊存儲和界面的解決方案,其中的數據查詢處理的操作。 ...
  • 對某個遠程伺服器啟用和設置NTP服務(Windows系統) 打開註冊表 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer 將 Enabled 的值設置為 1,這將啟用NTP伺服器功 ...
  • title: Django信號與擴展:深入理解與實踐 date: 2024/5/15 22:40:52 updated: 2024/5/15 22:40:52 categories: 後端開發 tags: Django 信號 松耦合 觀察者 擴展 安全 性能 第一部分:Django信號基礎 Djan ...
  • 使用xadmin2遇到的問題&解決 環境配置: 使用的模塊版本: 關聯的包 Django 3.2.15 mysqlclient 2.2.4 xadmin 2.0.1 django-crispy-forms >= 1.6.0 django-import-export >= 0.5.1 django-r ...
  • 今天我打算整點兒不一樣的內容,通過之前學習的TransformerMap和LazyMap鏈,想搞點不一樣的,所以我關註了另外一條鏈DefaultedMap鏈,主要調用鏈為: 調用鏈詳細描述: ObjectInputStream.readObject() DefaultedMap.readObject ...
  • 後端應用級開發者該如何擁抱 AI GC?就是在這樣的一個大的浪潮下,我們的傳統的應用級開發者。我們該如何選擇職業或者是如何去快速轉型,跟上這樣的一個行業的一個浪潮? 0 AI金字塔模型 越往上它的整個難度就是職業機會也好,或者說是整個的這個運作也好,它的難度會越大,然後越往下機會就會越多,所以這是一 ...
  • @Autowired是Spring框架提供的註解,@Resource是Java EE 5規範提供的註解。 @Autowired預設按照類型自動裝配,而@Resource預設按照名稱自動裝配。 @Autowired支持@Qualifier註解來指定裝配哪一個具有相同類型的bean,而@Resourc... ...