簡體   English   中英

使用Java EWS從MS Exchange閱讀電子郵件

[英]Read email from MS Exchange using Java EWS

我正在嘗試創建一個簡單的程序來讀取我公司的MS Exchange收件箱中的電子郵件。 我編寫了一個如下的模擬程序,但是它不起作用。

有人可以指導我,這是怎么了? 我嘗試使用自動發現和URL模式。

運行程序時,我看到以下輸出:

111111111111111 Aug 08, 2014 12:37:12 AM
org.apache.commons.httpclient.auth.AuthChallengeProcessor
selectAuthScheme INFO: NTLM authentication scheme selected Aug 08,
2014 12:37:12 AM org.apache.commons.httpclient.HttpMethodDirector
processWWWAuthChallenge INFO: Failure authenticating with NTLM <any
realm>@autodiscover.<cmpany>:443

該程序:

package com.experiment;

import microsoft.exchange.webservices.data.ExchangeCredentials;
import microsoft.exchange.webservices.data.ExchangeService;
import microsoft.exchange.webservices.data.ExchangeVersion;
import microsoft.exchange.webservices.data.FindItemsResults;
import microsoft.exchange.webservices.data.Item;
import microsoft.exchange.webservices.data.ItemView;
import microsoft.exchange.webservices.data.WebCredentials;
import microsoft.exchange.webservices.data.WellKnownFolderName;

public class MSOutlookIntg {
    private static final String EMAIL_ID = "myid@company.com";
    private static final String EMAIL_PWD = "mypwd";

    public static void main(String[] args) {
        ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010_SP2);
        ExchangeCredentials credentials = new WebCredentials(EMAIL_ID, EMAIL_PWD);
        service.setCredentials(credentials);



        try {
            System.out.println("111111111111111");
            service.autodiscoverUrl(EMAIL_ID);
            //service.setUrl(new URI("https://<email-server>/EWS/Exchange.asmx"));
            service.setTraceEnabled(true);
            System.out.println("222222222222222");
            ItemView view = new ItemView(10);
            FindItemsResults<Item> findResults;

            findResults = service.findItems(WellKnownFolderName.Inbox, view);

            for(Item item : findResults.getItems())
            {
                item.load();
                System.out.println(item.getSubject());
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

您應該將service.setTraceEnabled移到ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010_SP2)之后的第一行。 完整的跟蹤是成功調試問題的關鍵。

順便說一句。 我必須自己實現跟蹤偵聽器。 您是否在服務上附加了工作跟蹤偵聽器? 沒有這些,setTraceEnabled不會有太大幫助。

您是否嘗試過“ EnableScpLookup”?

就我而言,將EnableSCPLookup設置為True從來沒有問題。 可能需要花費幾毫秒的時間,直到沒有適當的SCP記錄返回,但是大多數時間它節省了20秒(!)來等待https://autodiscover.company.com上的Web服務器由於https證書而超時(服務器正在等待客戶端證書,而客戶端正在等待服務器的回復...)。

而且,URL模式出現了什么錯誤? 不能一樣,因為繞開自動發現時不應出現“自動發現”錯誤...

EDITh說您應該檢查您的電子郵件是否與您的UPN名稱相同。 我認為您的憑據必須包含UPN名稱,而不是電子郵件? 從Microsoft文檔中還不能完全清楚,因為Microsoft選擇了UPN來匹配電子郵件地址。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM