跳到主要內容

發表文章

目前顯示的是有「JavaMail」標籤的文章

JavaMail - SMTP+SSL/TLS時,如何設定trusted host?

Problem 在整合SMTP功能時,如果要提供SSL或StartTLS的方式與SMTP server溝通,一定會遇到certificate hostname驗證的問題;因為內部的mail server不一定會提供合法的certificate。例外可能會像這樣: Caused by: java.io.IOException: Server is not trusted: tonylin.idv.tw at com.sun.mail.util.SocketFetcher.configureSSLSocket(SocketFetcher.java:564) at com.sun.mail.util.SocketFetcher.startTLS(SocketFetcher.java:486) at com.sun.mail.smtp.SMTPTransport.startTLS(SMTPTransport.java:1902) ... 30 more 本篇文章,主要分享透過程式將目標機器設定為可信任的方式。 How to? 第一個方法是設定property(必須沒設定SocketFactory,而javamail預設會使用MailSSLSocketFactory): prop. put ( "mail.smtp.ssl.trust" , "tonylin.idv.tw" ) ; 有多個可以使用空白分格,如果要允許全部就使用*。 第二個方法是直接使用MailSSLSocketFactory,針對SSL的情況要使用mail.smtp.socketFactory: MailSSLSocketFactory socketFactory = new MailSSLSocketFactory ( ) ; socketFactory. setTrustedHosts ( new String [ ] { "tonylin.idv.tw" } ) ; socketFactory. setTrustAllHosts ( true ) ; prop. put ( "mail.smtp.socketFactory" , socketFactory ) ; 而StartTLS會經過將普通連線變為T...

JavaMail - SMTP設定

Properties的意義 Properties prop = new Properties ( ) ; prop. put ( "mail.smtp.host" , "smtp.gmail.com" ) ; prop. put ( "mail.smtp.localhost" , "localhost" ) ; prop. put ( "mail.smtp.port" , String . valueOf ( 25 ) ) ; prop. put ( "mail.smtp.timeout" , SOCKET_TIMEOUT ) ;   // SSL prop. put ( "mail.smtp.ssl.enable" , "true" ) ; // 也可以使用自己的SSLSocketFactory prop. put ( "mail.smtp.socketFactory.class" , SSL_FACTORY ) ; // TLS prop. put ( "mail.smtp.starttls.enable" , "true" ) ;   // 影響SocketFactory使用失敗是否要用預設的SocketFactory prop. put ( "mail.smtp.socketFactory.fallback" , "false" ) ; Set Properties SMTP設定的Properties,必須都使用String型態,非String型態在它API中會變為null。最常發生的錯誤是: prop. put ( "mail.smtp.port" , 25 ) ; prop. put ( "mail.smtp.auth" , true ) ; 要改為 prop. put ( "mail.smtp.port" , String . valueOf ( 25 ) ) ; prop. put ( "m...

JavaMail - 如何刪除Hotmail上的信件?

應觀眾要求開始著手於砍facebook垃圾信件的程式開發,當然順便砍掉之前做問卷所寄來每天上百封的垃圾信。在我還不懂事的時候,有透過JavaMail[1]寫GMail與北科信箱的自動寄信程式(當時純粹是為了惡搞),而在我Google大法後,有文章提及到hotmail是利用WebDav的方式去存取信件,另外包含一篇2010年3月30日的開發教學[2]。我嘗試照它的程式碼去執行過一次,跳出了帳號認證錯誤的例外情形。但我相信,在7-11吹著冷氣並喝著City,順便看著可愛的便利商店美眉,我的腦袋並不至於會昏迷到連自己的帳號密碼都打錯。於是我又開始努力的尋找解答。終於讓我看到一篇文章提到M$在2009年3月12日就提供hotmail POP3的存取方式,這讓我非常的開心。另外在別篇文章也找尋到hotmail也提供SMTP的存取方式,以下為設定資訊: POP 伺服器: pop3.live.com (port:995) SSL安全連線:是 SMTP 伺服器: smtp.live.com (port:25) TLS/SSL安全連線:是; 是否需要驗證:是 首先我要聲明,我有一堆看不完得書、學不完的技術(與打不完的電動)要殺我的時間,這篇文章中僅提供POP3的撰寫方式與我嘗試過後的經驗分享。其實在[3]中,已經有許多的範例與教學。要使用JavaMail API首先要到它的網站中下載mail.jar和activation.jar。在我們開始寫程式以前,我們先介紹JavaMail幾個重要的Concept,分別為、Message、Folder、Store、Transport、Session。 Message:表達的是Mail中的信件。其包含了寄件者(From)、收件者(To)、主旨(Subject)、內容(Text)等屬性。 Folder:表達的是資料夾的概念,包含了Sub-Folder與Message。在POP3協定中,僅能得到名稱為INBOX的資料夾。 Store:表達信件系統中資料庫的概念。除了連結與關閉信件資料庫外,並提供存取Folder與Message之功能。如果要寫一個屬於自己定義的郵件Protocol,實做這個就對了。 Transport:中文翻譯叫運輸工具,我英文比較破,如果我在設計可能會把它叫做MailSender…,我們會告訴Transport目的地在哪,接著它會攜帶...