2016-08-03 20 views
0

我正在使用ews-java-api來處理傳入的電子郵件到特定的Exchange帳戶,以便我可以從電子郵件中提取出關鍵信息(即主題,正文,收件人,發件人,等)通過API調用轉發到另一個系統。我能夠識別電子郵件的收件人,因爲它自然匹配我從中檢索新電子郵件的帳戶,但似乎無法確定發件人可能用於發送電子郵件的別名。如果地址是別名,我如何使用ews-java-api識別收件人電子郵件?

例如,如果我從[email protected]發送電子郵件到[email protected],那麼我可以從「bobsmith」帳戶中獲取電子郵件,並閱讀主題,正文等。但是如果Bob史密斯的別名是「[email protected]」,發送到他的bobsmith帳戶,Jane Doe通過電子郵件將他發送到該地址,我只看到「[email protected]」作爲收件人,而不是「英雄」。 「。我似乎無法找到Exchange項目上的任何方法調用(即使投射爲「EmailMessage」類型時,也允許我獲取「to:」字段中使用的地址)

有誰知道如何在收到的郵件中獲取別名?

+0

檢查此答案:http://stackoverflow.com/questions/6213571/exchange-web-services-ews-api-to-header-for-alias – diginoise

+0

這是一個很好的起點...謝謝你捕捉,因爲我之前無法找到。但是,這是C#代碼,並且其中一些項目不能正確轉換到ews-java-api庫。我不熟悉C#,所以我不確定如何翻譯像propertySet語法或tryGetProperty函數這樣的東西,因爲它們似乎沒有Java的等價功能。 – spye

+0

您所需要的只是檢查上面示例中列出的相應標題。由於頭文件是協議的一部分,只要你的java lib允許你提取頭文件,你應該沒問題(我認爲)。 – diginoise

回答

0

好吧,所以,感謝@diginoise,最終的解決方案是執行以下操作:最初我沒有發佈代碼,但希望這會對搜索此代碼的任何人有所幫助同樣的問題

我開始使用默認屬性集並添加了MIME內容,以便我的屬性查詢將包含MIME內容,然後添加一個正則表達式直接檢查mimecontent以獲取可能有蜜蜂的別名用於n:

FindItemsResults<Item> findResults = ...; // This is several lines, but is well documented in the library 

// Adding MimeContent to the set is key 
PropertySet propertySet = new PropertySet(BasePropertySet.FirstClassProperties, ItemSchema.MimeContent); 
service.loadPropertiesForItems(findResults, propertySet); 

for (Item item : findResults) { 
    String messageContent = new String(((EmailMessage) item).getMimeContent().getContent()); 

    // find the alias used 
    Pattern pattern = Pattern.compile("To: \"(.*)\" <(.*?)>"); 
    Matcher matcher = pattern.matcher(messageContent); 
    if (matcher.find()) { 
     System.out.println("Alias is: " + matcher.group(1)); 
    } 
} 

這工作,如果你只是想找列出的第一個電子郵件地址,但不會處理別名的列表,所以你需要修改模式和搜索多個實例上「To:」行並將其提取出來,但這涵蓋了如何獲得實際「發送到」地址而不是「收到」地址的基本知識。

相關問題