2008-09-11 69 views
4

剛剛從我的老闆那裏收到我正在處理的應用程序的請求。基本上我們得到一個外部客戶端的電子郵件地址設置來提交excel文件。在Java中自動處理電子郵件

我需要的是一種能夠自動拿起發送到該地址的所有郵件,這樣我就可以把附件,過程,並將其保存到一個文件夾。

甚至從哪裏開始將是有幫助的任何信息\

注意:我們使用Lotus Notes服務器要做到這一點,但一個通用的方法會更有幫助(如果可能的話)。

回答

9

Email - > mailserver - > [something] - > file-on-disk。在磁盤上

文件是很容易解析,使用JavaMail

的[某件事]可能是:

+1

您可以使用JavaMail作爲[某件事]不能嗎? – 2008-09-15 16:16:39

0

的Lotus Notes/Domino的存儲郵件Notes數據庫。有API可用於獲取文檔(電子郵件),讀取字段值(發件人,主題)和分離文件。

API包括

-LotusScript(VB變型中,Notes數據庫內的可用)

-Java(從內或外部的數據庫)

-C API(外部)

可通過COM服務器-Same API

您可以創建(使用LotusScript或Java)的數據庫中的「預定代理」說可以找到自上次運行以來創建的文檔,找到附件並將其提取出來。代理需要使用在服務器上具有適當權限的ID進行簽名,包括寫入文件系統並啓動任何其他進程所需的ID。

外部數據庫,你可以使用任何API的LotusScript除了對登錄到服務器/郵件數據庫,並遵循類似的過程,例如在客戶端或單獨的服務器上本地提取文件。 C API和COM需要安裝Notes客戶端,但是可以將Java應用程序設置爲通過CORBA/DIIOP運行而不需要完全安裝。

有關更多信息,請參閱Domino Designer幫助(或IBM的C API網站)。

作爲一個「通用的方法」來做到這一點,如果你是在Notes中存取數據,以及需要爲提取附件,相信這些API是你最好的選擇。如果您設想將應用程序移植到其他郵件系統,請考慮通過「接口」將API例程解耦,因此您只需添加該接口的新實現以支持新的郵件系統。

0

您可以訪問相對容易地使用DIIOP Notes文檔,會比下降的C API道路輕鬆許多......

1

我最近在Domino服務器上用Java代理做了很多。 Domino 8.5服務器支持Java 6及其嵌入式,因此它不會讓需要一點Domino開發經驗的人長時間將新郵件到達時運行的代理放在一起。在LotusScript中它更簡單,但需要更多專業技能,您可能需要獲得承包商提供的技能。

您可能遇到的限制與提取的文件有關,您可以輕鬆將其放置在Domino服務器的文件結構中,但您可能會受到操作系統安全性限制,因此無法將其放置在不同的服務器上。

0

嘗試POP3Client在Net Commons package;它會讓您的Java程序以您想要的任何間隔(每隔幾分鐘?每小時?)檢查特定帳戶的新郵件,並根據需要獲取/刪除郵件。

1

在數據庫中使用郵件(您的Domino管理員可以爲您設置它,但它也位於幫助文件中)。

在該數據庫中,您可以創建一個定期運行的代理來處理所有新文檔。該代理將使用NotesRichTextItem類的EmbeddedObjects屬性和NotesEmbeddedObject類的ExtractFile方法來獲取文件附件的句柄並將其提取到您指定的位置。

例如,此腳本遍歷文檔的Body項中的所有文件附件,對象鏈接和嵌入對象。每個找到的文件附件時,它分離的文件保存到C驅動器上的SAMPLES目錄,並從該文檔

Dim doc As NotesDocument 
Dim rtitem As Variant 
'...set value of doc... 
Set rtitem = doc.GetFirstItem("Body") 
If (rtitem.Type = RICHTEXT) Then 
    Forall o In rtitem.EmbeddedObjects 
    If (o.Type = EMBED_ATTACHMENT) Then 
     Call o.ExtractFile("c:\samples\" & o.Source) 
     Call o.Remove 
     Call doc.Save(False, True) 
    End If 
    End Forall 
End If 
0

SMTP/POP3可以Domino服務器上啓用附件。之前與此工作,並得到與它一起運行的松鼠郵件。 SMTP是一項資源密集型的工作,但非常值得您付出努力,因爲您不必下降到LotusLand即可正常工作。只需編寫一個小的Java CLI程序,它將檢查特定的電子郵件框(POP3或SMTP),並解析消息,拉動附件並將其放在需要的地方。

大量的文檔和例子在這裏: http://java.sun.com/products/javamail/

你開發採用這種方法將在你未來比什麼的Lotus/Domino的具體的職業更廣泛適用的技術。

0

無論您做什麼,您都需要了解Lotus Notes數據結構。好消息是,可以非常方便地在Notes中構建完全自動化的解決方案。

最好的辦法就是在Notes中創建它,並且可以設置爲在收到新郵件時自動運行。加里的答案已經死了,但沒有任何經驗,可能很難弄清楚如何自己實現它。另一方面,它確實不應該讓任何有能力的Notes程序員花費一兩個多小時來設置它。

2

編輯:自從我第一次寫這個答案,維澤已移動,並且現在聲稱只是一個單元測試工具,所以用少許鹽採取下面的答案...


Svrist的答案是好的,但如果你想避免他的中間步驟(郵件服務器將郵件寫入磁盤供Java系統稍後提取),則可以使用Wiser

維澤可以讓你啓動一個在Java的郵件服務器:

Wiser wiser = new Wiser(); 
wiser.setPort(2500); 
wiser.start(); 

然後,你可以查詢它定期郵件:

for (WiserMessage message : wiser.getMessages()) 
{ 
    String envelopeSender = message.getEnvelopeSender(); 
    String envelopeReceiver = message.getEnvelopeReceiver(); 

    MimeMessage mess = message.getMimeMessage(); 

    // mail processing goes here 
}