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

    }
}

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值