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());
}
}
}