Java程式Mail、EDM(電子型錄)寄送

這個範例主要的概念是抓取網路上EDM的html內容,讀取外部的寄送email清單文字檔,依續一個個email寄送出EDM內容,寄送的每一封信件都使用thread來獨立完成,而且寄送中間都有固定的間隔時間。

JavaMail是Java用來處理Mail事件的一個Framework,提供寄信SMTP、收信POP3等常用到的Mail Protocol,主要由sun(目前為oracle)來維護,是一個官方的套件,可由此下載

發送Mail的主體程式Thread

Mail發送的內容為html,所以需要使用Multipart來承載內容,如果是純文字則可直接使用Message的setContent來加入信件內容。

取得網頁內容程式WebModule

請參考java HttpURLConnection來實作get及post動作

設定檔內容

主程式

也是個thread,讀取外部email清單,取得edm的html內容,配製寄送的thread。

mail清單列表需要是一個文字檔,每一個mail一行。

log4j的設定檔

10 comments on “Java程式Mail、EDM(電子型錄)寄送

  1. 請問ㄧ下設定檔內容
    host=你的mail主機
    from=你的mail
    auth=true
    user=你的帳號
    pwd=你的密碼
    sleep=5000
    fromName=寄信者顯示名稱
    edmList=d:/mail/list.txt
    edmUrl=edm的網址
    edmSubject=郵件標題

    這些是要寫在哪裡???在上面的JAVA程式直接設定嗎??
    上面都是JAVA檔
    那JSP 要寫什麼??
    例如:

    之類的

    初學者請多包涵
    謝謝

    • 那是設定檔

      會去讀mail.properties這個檔案,而內容就是你所提到的那些
      jsp要寫什麼....就看public static void main 那裡怎麼呼叫
      jsp就用那種方法呼叫就可以了

  2. 想請問一下,收件者跟收件內容來源都是DB 要如何修正,這樣是會使用多執行緒去跑嗎?

    • 你可以把這一段改成你想要的部份

  3. TKS,已經OK 了,不過現在還到一個小問題..之前設 message.setFrom(new InternetAddress(from,fromName ),fromNname 會顯示不出來,收到mail 時還是寄件者的mailaddress 但寄信者顯示名稱卻沒有顯示,但在setFrom 前列印出來是有值的....

    • 有可能是這個寄件者的聯絡人己經被你加入你的郵件接收軟體的清單裡了,而名字是用mail address,所以才顯示不出來,您可以先檢查看看...如果不行的話再告知,我再來測一下

  4. @yku,
    new InternetAddress(from,fromDisplayName,"utf-8"); 這樣就OK 了..
    現在還到一個比較棘手的問題..因為要記錄每一個人點EDM 裡的每一個連結,需要大量置換edm 內容的某些字串,但會出現Exception in thread "main" java.lang.OutOfMemoryError: Java heap space..不知大大有沒有什麼好方法可以解?TKS

    • 其實這outOfMemory可能會在三個地方產生
      一個是在你使用資料庫連線時,用完後(或大量使用)沒有關閉,
      每一個Connection在一般預設可能要三十分鐘才會被強迫關閉,
      這很容易就會OutOfMemory了

      另一種是在控制Collection元件時發生,像是ArrayList或是ResultSet,
      如果讓它們一次載入太多資料時,因為需要暫存等待被使用,
      所以很容易吃很重的記憶體,建議如果是ResultSet的話,
      一次查詢少量,用完close及=null後再重查取得資料

      還有一種是你的Thread大量使用後,並沒有確實讓每一個Thread都跑完,
      每個Thread不管有任何狀況,一定要確實讓它可以run到結束,
      除非是特殊用途

      這二篇是以前遇到時解決的方法,您可以參考看看
      http://blog.yslifes.com/archives/360
      http://blog.yslifes.com/archives/362

      這是我大概有碰到的狀況,如果還是無法接解您的狀況,您可以mail給我你的原始碼,讓我幫忙查一下^^

1 Pings/Trackbacks 於 "Java程式Mail、EDM(電子型錄)寄送"

發表迴響