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