Java實現郵件推送功能

来源:https://www.cnblogs.com/ProgramOwn/p/18086465
-Advertisement-
Play Games

java 實現郵件推送 Java實現郵件推送功能 一、引入依賴 <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-email</artifactId> <version>1.4</version> </dep ...


java 實現郵件推送

Java實現郵件推送功能

一、引入依賴

 <dependency>
           <groupId>org.apache.commons</groupId>
           <artifactId>commons-email</artifactId>
           <version>1.4</version>
</dependency>

二、郵件來源用戶信息

private static Logger log = Log.getLogger();
private static ThreadPoolExecutor threadPool;
private static String emailServer;
private static String userName;
private static String password;
private static String emailEncoding;
private static String emailFrom;
private static String sysEmailFromName;
private static String encoding;

private static void initMail(Email mail) throws EmailException {
mail.setHostName(emailServer);
mail.setAuthentication(userName, password);
mail.setCharset(emailEncoding);
mail.setFrom(emailFrom, sysEmailFromName);
}

三、線程池非同步

static {
threadPool = new ThreadPoolExecutor(5, 10, 3L, TimeUnit.SECONDS, new ArrayBlockingQueue(50), new ThreadPoolExecutor.DiscardPolicy());
//郵箱伺服器地址
emailServer = "smtp.163.com";
//用戶名
userName = "****";
//用戶密碼
password = "****";
//編碼格式
emailEncoding = "GBK";
//郵件來源
emailFrom = "*****.com.cn";
//郵件來源用戶名稱
sysEmailFromName = "****";
//編碼格式
encoding = "UTF-8";
}

四、非同步發送

 private static void sendMail(Email mail) {
      threadPool.execute(new Runnable() {
          @Override
          public void run() {
              try {
                  mail.send();
              } catch (EmailException var2) {
                  log.error("[郵件抄送失敗]-", var2);
              }
          }
      });
  }

五 完整發送

import org.apache.commons.lang.StringUtils;
import org.apache.commons.mail.*;
import org.slf4j.Logger;

import javax.mail.internet.MimeUtility;
import java.io.File;
import java.io.UnsupportedEncodingException;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

/**
* 郵件發送工具
*/
public class MailUtil {

private static Logger log = Log.getLogger();
   private static ThreadPoolExecutor threadPool;
   private static String emailServer;
   private static String userName;
   private static String password;
   private static String emailEncoding;
   private static String emailFrom;
   private static String sysEmailFromName;
   private static String encoding;
   
   private static void initMail(Email mail) throws EmailException {
       mail.setHostName(emailServer);
       mail.setAuthentication(userName, password);
       mail.setCharset(emailEncoding);
       mail.setFrom(emailFrom, sysEmailFromName);
  }
   
   static {
threadPool = new ThreadPoolExecutor(5, 10, 3L, TimeUnit.SECONDS,
                                       new ArrayBlockingQueue(50),
                                       new ThreadPoolExecutor.DiscardPolicy());
//郵箱伺服器地址
emailServer = "mailha.sinosafe.local";
//用戶名
userName = "****";
//用戶密碼
password = "****";
//編碼格式
emailEncoding = "GBK";
//郵件來源
emailFrom = "*****.com.cn";
//郵件來源用戶名稱
sysEmailFromName = "****";
//編碼格式
encoding = "UTF-8";
}
   
    /**
    * 非同步發送郵件
    */
   private static void sendMail(Email mail) {
       threadPool.execute(new Runnable() {
           @Override
           public void run() {
               try {
                   mail.send();
              } catch (EmailException var2) {
                   log.error("[郵件抄送失敗]-", var2);
              }
          }
      });
  }
   
   /**
   * 抄送郵件
   */
   public static void bccHtmlEmail(String subject, String html, List<String> users) throws Exception {
       HtmlEmail email = new HtmlEmail();
       initMail(email);
       email.setSubject(subject);
       for (String r : users){
           email.addBcc(r);
}
       email.setHtmlMsg(html);
       email.setTextMsg("Your email client does not support HTML messages");
       sendMail(email);
  }
   
   /**
   * 單附件郵件
   */
   public static void sendEmailWithFile(String subject, String html, List<String> receivers,
                                        File file) throws UnsupportedEncodingException {
       //附件
       EmailAttachment att1 = new EmailAttachment();
       att1.setPath(file.getPath());
       att1.setDisposition(EmailAttachment.ATTACHMENT);
       att1.setDescription("attachemnt description gril 中文");
       att1.setName(MimeUtility.encodeText(file.getName()));
       MultiPartEmail email = new MultiPartEmail();
       email.setHostName(emailServer);
       email.setAuthentication(userName, password);
       email.setCharset(emailEncoding);
       email.setSubject(subject);
       try {
           email.setMsg(html);
           for (String user : receivers) {
               email.addTo(user);
          }
           email.setFrom(emailFrom, sysEmailFromName);
           email.attach(att1);  
           email.send();
      } catch (EmailException e1) {
           e1.printStackTrace();
      }
  }
   
   public static void sendEmailMultifile(String subject, String html, List<String> receivers,
                                         List<File> files){
       HtmlEmail email = new HtmlEmail();
       email.setHostName(emailServer);
       email.setAuthentication(userName, password);
       email.setCharset(emailEncoding);
       email.setSubject(subject);
       try {
           for (String user : receivers) {
               email.addTo(user);
          }
           email.setFrom(emailFrom, sysEmailFromName);
           email.setHtmlMsg(html);
           //附件
           for(File f : files){
               EmailAttachment att1 = new EmailAttachment();
               att1.setPath(f.getPath());
               att1.setDisposition(EmailAttachment.ATTACHMENT);
               att1.setDescription("attachemnt description gril 中文"); //附件描述
               //防止附件名亂碼
               att1.setName(MimeUtility.encodeText(f.getName()));
               email.attach(att1);
          }
           email.send();
      }catch (EmailException | UnsupportedEncodingException e1) {
           e1.printStackTrace();
      }
  }
   
   /**
   * 抄送郵件
   */
  public static void ccHtmlEmail(String subject, String html, String receiver, String cc)
           throws Exception {
       ccHtmlEmail(subject, html, Arrays.asList(receiver.split(",")), cc, null);
  }

   /**
   * 抄送郵件帶附件
   */
   public static void ccHtmlEmail(String subject, String html, String receiver, String cc, File file)
       throws Exception {
       ccHtmlEmail(subject, html, Arrays.asList(receiver.split(",")), cc, file);
  }

}

五、總結

Java實現郵件發送,可以非同步使用線程池批量發送多人,減小伺服器的壓力,可以發送單頁面(可以是html語言寫的頁面),也可以單附件或者多附件發送郵件。


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

-Advertisement-
Play Games
更多相關文章
  • 零售商家為什麼要建設線上商城? 傳統的實體門店服務範圍有限,只能吸引周邊500米以內的消費者。因此,如何拓展服務範圍,吸引更多的消費者到店,成為了店家迫切需要解決的問題。 缺乏忠實顧客,客戶基礎不穩,往往是一次性購物,門店無法形成有效的顧客迴流。在當前的市場環境下,構建並維護粉絲群體,成為了商家的核 ...
  • 一、ORM基本介紹 ORM 是 python編程語言後端web框架 Django的核心思想,“Object Relational Mapping”,即對象-關係映射,簡稱ORM。 二、實現目標 創建一個實例對象,用創建它的類名當做數據表名,用創建它的類屬性對應數據表的欄位,當對這個實例對象操作時,能 ...
  • 我不會長大後再學習我不會長大後再學習我不會長大後再學習我不會長大後再學習我不會長大後再學習我不會長大後再學習 ...
  • 1.根目錄概念: 1.1 項目根目錄(Project Root) 項目根目錄是你在文件系統中為整個項目選擇的頂層目錄。 它通常包含了項目的所有內容,包括源代碼、構建配置文件、文檔、測試文件等。 在版本控制系統中(如 Git),項目根目錄通常是倉庫的根目錄。 1.2 內容根目錄(Content Roo ...
  • 在這篇文章中,我們深入學習了XPath作為一種常見的網路爬蟲技巧。XPath是一種用於定位和選擇XML文檔中特定部分的語言,儘管最初是為XML設計的,但同樣適用於HTML文檔的解析。我們探討瞭如何使用XPath來定位元素並提取所需信息。 ...
  • 拓展閱讀 Devops-01-devops 是什麼? Devops-02-Jpom 簡而輕的低侵入式線上構建、自動部署、日常運維、項目監控軟體 代碼質量管理 SonarQube-01-入門介紹 項目管理平臺-01-jira 入門介紹 缺陷跟蹤管理系統,為針對缺陷管理、任務追蹤和項目管理的商業性應用軟 ...
  • 概述:C++中模板必須在頭文件中實現,因為編譯器需要可見的實現以生成模板具體實例的代碼。通過頭文件,確保模板在每個編譯單元中都能被正確展開,提高可維護性。 在C++中,模板只能在頭文件中實現的主要原因是編譯器在使用模板時需要生成對應的代碼,而這部分代碼必須在編譯時可見。以下是詳細的解釋和示例。 基礎 ...
  • 概述:在C++中,儘管存在技巧在其範圍之外訪問局部變數的記憶體,但這是不安全和易導致未定義行為的做法。通過指針或動態記憶體分配可能違反變數的生命周期和作用域規則,應當避免使用以確保代碼安全性。 在C++中,局部變數的生命周期和作用域限制了它們的訪問範圍,通常不應該在其範圍之外訪問其記憶體。然而,通過一些技 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...