java讀取exchange服務器,以及遇到的坑

1.我遇到的坑

一、坑:

有沒有人和我一樣一直是401問題,EWS problem (error 401) 這個是一個大坑,是在安裝exchange的時候沒有裝配,我下面給大家說一下如何搞

(1)查看IIS的版本

2.安裝配置exchange

  對策:進入C:/WINDOWS/Microsoft.NET/Framework/相應版本/(或者 C:\Windows\Microsoft.NET\Framework\v4.0.30319)打開cmd ,運行aspnet_regiis -i,解決

二、坑:

證書問題,我有來凝重解決方案

(1)繞過證書認證

import microsoft.exchange.webservices.data.EWSConstants;
import microsoft.exchange.webservices.data.core.EwsSSLProtocolSocketFactory;
import microsoft.exchange.webservices.data.core.ExchangeService;
import microsoft.exchange.webservices.data.core.enumeration.misc.ExchangeVersion;
import org.apache.http.config.Registry;
import org.apache.http.config.RegistryBuilder;
import org.apache.http.conn.socket.ConnectionSocketFactory;
import org.apache.http.conn.socket.PlainConnectionSocketFactory;

import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.SSLSession;
import java.security.GeneralSecurityException;

/**
 * @Author:hemingzhu
 * @date: 2019/10/15 17:48
 * @Explanation:
 */
public class ExchangeServiceWithHostVerify extends ExchangeService {


    //不對任何域名做驗證
    private final static HostnameVerifier hostnameVerifierWithOutVerfy = new HostnameVerifier(){
        @Override
        public boolean verify(String s, SSLSession sslSession) {
            return true;
        }
    };

    public ExchangeServiceWithHostVerify() {
        super();
    }
    public ExchangeServiceWithHostVerify(ExchangeVersion requestedServerVersion) {
        super(requestedServerVersion);
    }

    protected Registry<ConnectionSocketFactory> createConnectionSocketFactoryRegistry() {
        try {
            return RegistryBuilder.<ConnectionSocketFactory>create().register(EWSConstants.HTTP_SCHEME, new PlainConnectionSocketFactory()).register(EWSConstants.HTTPS_SCHEME, EwsSSLProtocolSocketFactory.build(null,hostnameVerifierWithOutVerfy)).build();
        } catch (GeneralSecurityException e) {
            throw new RuntimeException(
                    "Could not initialize ConnectionSocketFactory instances for HttpClientConnectionManager", e
            );
        }
    }



}
ExchangeService service = new ExchangeServiceWithHostVerify(ExchangeVersion.Exchange2010_SP2);

(2)其實不用ip的這個東西本來就有問題,直接在服務器上查找域名就可以了

域名就是計算機名字

三、坑:

防火牆關閉

 

2.代碼

import microsoft.exchange.webservices.data.core.ExchangeService;
import microsoft.exchange.webservices.data.core.enumeration.misc.ExchangeVersion;
import microsoft.exchange.webservices.data.core.enumeration.property.WellKnownFolderName;
import microsoft.exchange.webservices.data.core.service.folder.Folder;
import microsoft.exchange.webservices.data.core.service.item.EmailMessage;
import microsoft.exchange.webservices.data.core.service.item.Item;
import microsoft.exchange.webservices.data.credential.ExchangeCredentials;
import microsoft.exchange.webservices.data.credential.WebCredentials;
import microsoft.exchange.webservices.data.search.FindItemsResults;
import microsoft.exchange.webservices.data.search.ItemView;
import java.net.URI;
import java.util.ArrayList;

/**
 * @Author:hemingzhu
 * @date: 2019/10/15 10:18
 * @Explanation:
 */
public class ExchangService {

    public static void main(String[] args) throws Exception {

        ExchangeService service = new ExchangeServiceWithHostVerify(ExchangeVersion.Exchange2010_SP2);
//        ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010_SP2);
        ExchangeCredentials credentials = new WebCredentials("username", "pwd");
        service.setCredentials(credentials);

       
        service.setUrl(new URI("https://xxxx/EWS/Exchange.asmx"));

        HttpsUtios.trustAllHttpsCertificates();
        Folder inbox = Folder.bind(service, WellKnownFolderName.Inbox);
        System.out.println(inbox.getDisplayName());
        ItemView view = new ItemView(10);
        // 查詢
        FindItemsResults<Item> findResults = service.findItems(inbox.getId(), view);
        ArrayList<Item> items = findResults.getItems();
        for(int i=0;i<items.size();i++){
            EmailMessage message = EmailMessage.bind(service, items.get(i).getId());
            message.load();
            System.out.println(message.getSender());
            System.out.println("Sub -->" +items.get(i).getSubject());
            System.out.println("接收方:"+message.getReceivedBy());
            System.out.println("發送:"+message.getSender());
            System.out.println("發送人:"+message.getFrom());
            System.out.println("接收時間:"+items.get(i).getDateTimeReceived());
            System.out.println("是否已讀:"+message.getIsRead());
            System.out.println("郵件ID:"+items.get(i).getId());
        }

    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章