JavaMail和James的秘密花園

来源:http://www.cnblogs.com/hq-123/archive/2016/12/17/6192606.html
-Advertisement-
Play Games

JavaMail,顧名思義,提供給開發者處理電子郵件相關的編程介面。它是Sun發佈的用來處理email的API。它可以方便地執行一些常用的郵件傳輸。我們可以基於JavaMail開發出類似於Microsoft Outlook的應用程式。 JavaMail包中用於處理電子郵件的核心類是:Session, ...


JavaMail,顧名思義,提供給開發者處理電子郵件相關的編程介面。它是Sun發佈的用來處理email的API。它可以方便地執行一些常用的郵件傳輸。我們可以基於JavaMail開發出類似於Microsoft Outlook的應用程式。

JavaMail包中用於處理電子郵件的核心類是Session,Message,Address,Authenticator,Store,Transport, Folder等。Session定義了一個基本的郵件會話,它需要從Properties中讀取類似於郵件伺服器,用戶名和密碼等信息。不過JDK中並沒有包含,使用JavaMail發送郵件需要使用Sun發佈的mail.jar和activtion.jar兩個包。

郵件協議:

SMTP協議:Simple Mail Transfer Protocol,即簡單郵件傳輸協議,用於發送電子郵件

POP3協議:Post Office Protocol 3,即郵局協議的第三個版本,用於接收郵件

IMAP協議:Internet Message Access Protocol,即互聯網消息訪問協議,是POP3的替代協議


JavaMail發郵件的流程:

  1.搭建James郵件伺服器

  2.安裝OutLook[郵件客戶端]

  3.配置outLook郵件客戶端

  4.搭建James郵件伺服器


 

1.搭建james郵件伺服器

   james是apache的一個開源項目,純java實現。

  首先我們需要下載apache-james-2.3.2.zip(批:http://pan.baidu.com/s/1pJoyg7h)

  其次運行bin目錄下的run.bat即可啟動伺服器

  然後運行cmd命令[Telnet  localhost 4555]

  最後通過apps\james\SAR-INF\config.xml配置伺服器(修改節點)

2.安裝OutLook[郵件客戶端],3.配置outLook郵件客戶端

  輸入產品秘鑰(可選,測試的話,不必輸入)

  產品秘鑰:PQDV9-GPDV4-CRM4D-PHDTH-4M2MT

  創建用戶賬號,根據Telnet  localhost 4555,進行連接,

  用戶名和密碼預設為root

  進入help,進行添加賬戶(adduser)

    按要求安裝,下一步即可,註意下麵這個:

hosts文件:

安裝完成,進行測試:

4.搭建James郵件伺服器

  

最後使用JavaMail發送郵件:

需求:賬戶收到由javaMail所發送的任務,以及附件信息。

核心代碼:

創建一個類EmailAuthenticator並繼承自Authenticator,並植入用戶名和密碼

創建Mail類(設置郵件信息):

public class Mail {
  private String mailServer,from,to,mailSubject,mailContent;
  private String username,password;
  public Mail(){
      //設置郵件信息
      //進行認證登錄的用戶名
      username="[email protected]";
      //認證密碼
      password="hq";
      //認證的郵箱對應的郵件伺服器
      mailServer="192.168.17.176";
      //發件人信息
      from="wj";
      //收件人信息
      to="[email protected]";
      //郵件標題
      mailSubject="我們都是好孩子333";
      //郵件內容
      mailContent="這是一封測試郵件!如有雷同,純屬不可能";
  }
  //設置郵件伺服器
  @SuppressWarnings("static-access")
public  void send(){
      Properties prop=System.getProperties();
      //指定郵件server
      prop.put("mail.smtp.host", mailServer);
       
      //是否開啟認證
      prop.put("mail.smtp.auth", "true");
       
      //smtp協議的
      prop.put("mail.smtp.port", "25");
      //產生Session服務
      EmailAuthenticator mailauth=new EmailAuthenticator(username, password);
      Session mailSession=Session.getInstance(prop,(Authenticator)mailauth);
       try {
           //封裝Message對象
           Message message=new MimeMessage(mailSession);
            
           message.setFrom(new InternetAddress(from)); //發件人
           message.setRecipient(Message.RecipientType.TO, new InternetAddress(to));//收件人
           message.setSubject(mailSubject);
           //設置內容(設置字元集處理亂碼問題)
           message.setContent(mailContent,"text/html;charset=gbk");
           message.setSentDate(new Date());
           //創建Transport實例,發送郵件
           Transport tran=mailSession.getTransport("smtp");
           tran.send(message,message.getAllRecipients());
           tran.close();
            
        } catch (Exception e) {
            e.printStackTrace();
        }
  }

  

測試類:  

public class MyTest {
    public static void main(String[] args) {
        Mail mail=new Mail();
        mail.send();
        System.out.println("success!");
    }
 
}

  


七、發送帶附件的Mail

public class MailWithAttachment {
    private JavaMailSender mailSender; //必須使用 JavaMailSender
    public void setMailSender(JavaMailSender mailSender) {
        this.mailSender = mailSender;
    }
     
    public void send() throws MessagingException,IOException{
        MimeMessage mimeMessage = mailSender.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true, "UTF-8");
        helper.setFrom("[email protected]");
        helper.setTo("[email protected]");
         
        helper.setSubject("生活生活");
        helper.setText("生活不止眼前的苟且!!!");
        //添加附件1
        ClassPathResource file1 = new ClassPathResource(
                                        "/cn/bdqn/attachfiles/test.doc");
        helper.addAttachment(file1.getFilename(), file1.getFile());
        //添加附件2:附件的文件名為中文時,需要對文件名進行編碼轉換,解決亂碼問題
        ClassPathResource file2 = new ClassPathResource(
                                        "/cn/bdqn/attachfiles/附件測試文件.doc");
        helper.addAttachment(MimeUtility.encodeWord(file2.getFilename()),file2.getFile());
        mailSender.send(mimeMessage);
    }
}

測試類:  

public class MailTest {
    public static void main(String[] args){
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
         
        /*測試帶附件的郵件*/
        try{
            MailWithAttachment mailWithAttach = (MailWithAttachment)context.getBean("mailWithAttachment");
            mailWithAttach.send();
        }catch(Exception e){
            System.out.print(e.toString());
        }
    }
}  

applicationContext.xml:

 

 


外在壓力增加時,就應增強內在的動力。

         --- 告誡自己

 


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

-Advertisement-
Play Games
更多相關文章
  • 一、概述: 近來也是在看AOP方面的東西,瞭解到Emit可以實現。之前對Emit的瞭解也就是停留在Reflector針對方法反編譯出來的部分指令。就用這次機會學習下Emit也用這篇隨筆記錄下學習的過程。某些我也不瞭解的地方也希望各位瞭解的朋友指導下。 學習前可以先瞭解下Opcodes 二、工具 1、 ...
  • Solr3.6.1 在Tomcat6下的環境搭建 Tomcat路徑:D:\prg\apache-tomcat-6-solr 簡寫為tomcat_home Solr文件下載保存路徑為:F:\software\Lucence\solr\apache-solr-3.6.1 簡寫為solr_home 1:將 ...
  • 轉載一則朋友圈新聞: 2月30日,考古學家在發掘大荒山無稽崖青梗峰下的一處石器時代的遺址時獲得重大發現!一臺外觀完好的電腦,在歷經10000多年的滄海桑田後終於重見天日。一個包括程式員在內的跨學科專項組迅速成立,對這台電腦的初步研究表明,該電腦能夠順利啟動並正常運行。在本報記者拍攝的照片上可以 ...
  • ...
  • ...
  • ...
  • 模板方法: 1.layout 2.partial 3.block ...
  • Scala開發環境搭建 先講幾點我學習scala的目的或者原因吧: Scala的開發環境遠比我想的要好搭建的多。下麵就不說太多的廢話了。 一、安裝JDK。 由於Scala本省也是泡在JVM上的一種編程語言,所以要按裝Scala編譯器時,要先安裝JDK,關於JDK的安裝這裡就不在贅述了,我以前也寫過一 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...