标签: ewsjavaapi

使用TokenCredentials进行Exchange Web服务(EWS)单点登录?

我正在使用Android应用程序中的EWS Java API 1.2.使用用户名/密码登录WebCredentials可以正常使用这样的方法:

ExchangeService service = new ExchangeService();
ExchangeCredentials credentials = new WebCredentials("domain\\username", "password");
service.setCredentials(credentials);
Run Code Online (Sandbox Code Playgroud)

我不是每次都提供密码,而是提供身份验证令牌.EWS API包含一个TokenCredentials类,但我该如何使用它?给定用户名和密码,如何生成可重用的身份验证令牌?一旦我生成这样的令牌,它有效多长时间?

java authentication exchangewebservices single-sign-on ewsjavaapi

21
推荐指数
1
解决办法
2360
查看次数

EWS Java API:会议请求已过期.日历无法更新

我正在使用Microsoft EWS Java API代表某些用户创建和接受约会.我这样做的方法是发送会议请求,然后在收件人的收件箱中设置收件箱观察者并接受传入的MeetingRequest项目:

import microsoft.exchange.webservices.data.core.service.item.MeetingRequest;

void accept(MeetingRequest request) {
  assert(!request.getIsOutOfDate());
  request.accept(false);
}
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试接受会议请求时出现此错误:

microsoft.exchange.webservices.data.core.exception.service.remote.ServiceResponseException: The meeting request is out of date. The calendar couldn't be updated.
    at microsoft.exchange.webservices.data.core.response.ServiceResponse.internalThrowIfNecessary(ServiceResponse.java:278)
    at microsoft.exchange.webservices.data.core.response.ServiceResponse.throwIfNecessary(ServiceResponse.java:267)
    at microsoft.exchange.webservices.data.core.request.MultiResponseServiceRequest.execute(MultiResponseServiceRequest.java:165)
    at microsoft.exchange.webservices.data.core.ExchangeService.internalCreateResponseObject(ExchangeService.java:270)
    at microsoft.exchange.webservices.data.core.service.response.ResponseObject.internalCreate(ResponseObject.java:120)
    at microsoft.exchange.webservices.data.core.service.response.CalendarResponseMessageBase.calendarSave(CalendarResponseMessageBase.java:98)
    at microsoft.exchange.webservices.data.core.service.item.MeetingRequest.internalAccept(MeetingRequest.java:218)
    at microsoft.exchange.webservices.data.core.service.item.MeetingRequest.accept(MeetingRequest.java:184)
Run Code Online (Sandbox Code Playgroud)

这对应于此错误:ErrorMeetingRequestIsOutOfDate.我查看了MSDN的这个错误,但无法找到为什么这个错误可能发生在我身上.

我究竟做错了什么?

java exchange-server exchangewebservices ewsjavaapi

17
推荐指数
1
解决办法
856
查看次数

无法使用EWS Java API获取发件人电子邮件地址

我正在使用EWS Java API 1.1.5.我试图让电子邮件发件人如下:

ItemView view = new ItemView(10);
FindItemsResults<Item> findResults = service.findItems(
    WellKnownFolderName.Inbox, view);
    for (Item item : findResults.getItems()) {
        if (item instanceof EmailMessage) {
            String senderEmail = ((EmailMessage) item).getSender().getAddress();
            System.out.println("Sender Email: " + senderEmail);
        }
    }
);
Run Code Online (Sandbox Code Playgroud)

但它总是回归null.我也尝试过以下方法:

String senderEmail = ((EmailMessage) item).getFrom().getAddress();
Run Code Online (Sandbox Code Playgroud)

但它也会回归null.我可以看到该电子邮件包含发件人,如:

Test User <testuser@testdomain.com> 
Run Code Online (Sandbox Code Playgroud)

它出现在邮件中以及回复电子邮件时.

请告知如何解决此问题.

exchange-server exchangewebservices ewsjavaapi

11
推荐指数
1
解决办法
4295
查看次数

在Android上使用EWS Java API时出现问题

我试图在Android应用程序中使用EWS Java API v1.1.5(http://archive.msdn.microsoft.com/ewsjavaapi),并遇到了许多问题.我下载了源代码,并按照提供的说明在Eclipse中编译EWS Java API.在这些说明中,您被告知要下载并添加以下pre-requiste jar文件依赖项:

  • 公地编解码器1.4.jar
  • 公地httpclient的-3.1.jar
  • 共享记录-1.1.1.jar
  • JCIFS-1.3.15.jar

我这样做了,并按照构建说明生成了以下jar文件:

  • EWSAPI-1.1.0.jar
  • EWSAPIWithJars-1.1.0

接下来,我构建了一个全新的Android应用程序,为清单添加了适当的权限,然后将以下源添加到主要活动的OnCreate:

ExchangeService service = new ExchangeService();
ExchangeCredentials credentials = new WebCredentials("emailaddress", "password");       
service.setCredentials(credentials);

try
{
    service.autodiscoverUrl("emailaddress", this);
}
catch (Exception e)
{       
    e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)

我首先尝试使用EWSAPI-1.1.0.jar文件作为依赖项运行此应用程序.当我这样做时,我得到了以下致命错误:

未捕获的处理程序:由于未捕获的异常而导致主要退出java.lang.NoClassDefFoundError:org.apache.commons.httpclient.MultiThreadedHttpConnectionManager at microsoft.exchange.webservices.data.ExchangeServiceBase.(Unknown Source)at microsoft.exchange.webservices.data.ExchangeServiceBase .(unknown Source)at microsoft.exchange.webservices.data.ExchangeService.(Unknown Source)at com.meshin.exchange.ExchangeDiscoveryActivity.onCreate(ExchangeDiscoveryActivity.java:40)

根据我的研究,似乎正在生成此错误,因为Android附带Apache HttpClient 4.0,它似乎不再具有MultiThreadedHttpConnectionManager类.

如果我改为删除EWSAPI-1.1.0.jar,而是使用EWSAPIWithJARS-1.1.0.jar文件作为依赖项,则会收到以下错误:

VFY:无法解析静态方法908:Ljavax/xml/stream/XMLOutputFactory; 的newInstance()Ljavax/XML /流/ XMLOutputFactory; VFY:L microsoft/exchange/webservices/data/EwsUtilities中的死代码0x0008-006a; .formatLogMessage(Ljava/lang/String; Ljava/lang/String;)Ljava/lang/String; VFY:无法找到签名中引用的类(Ljavax/xml/stream/XMLStreamWriter;)

最后......

致命异常:主要java.lang.VerifyError:microsoft.exchange.webservices.data.ExchangeService.getAutodiscoverUrl(未知来源)的microsoft.exchange.webservices.data.AutodiscoverService at microsoft.exchange.webservices.data.ExchangeService.autodiscoverUrl(Unknown Source )在com.meshin.exchange.ExchangeDiscoveryActivity.onCreate(ExchangeDiscoveryActivity.java:41)

我假设因为现在我包含了HttpClient 3.1 jar,它与Android库中包含的HttpClient 4.0 jar冲突.

我的问题是,如果我有一种方法可以在Android项目中使用EWS Java API,而无需重新编写引用HttpClient 3.1特定事物的部分,而这些部分不再是4.0.

android exchangewebservices apache-commons-httpclient ewsjavaapi

9
推荐指数
2
解决办法
7232
查看次数

如何验证EWS Java API

我们使用EWS Java API在Java应用程序上使用outlook日历.我在EWS上遇到了身份验证问题.

我尝试了由rackspace提供的云Outlook帐户上的应用程序,一切正常,所以我知道凭据是准确的.

这是代码:

import java.net.URI;
import java.net.URISyntaxException;
import microsoft.exchange.webservices.data.*;

public class TestClass {

    public static void main(String[] args) {
        TestClass obj = new TestClass();
        obj.testMethod();
    }

    public void testMethod() {
        ExchangeService service = new ExchangeService(
                ExchangeVersion.Exchange2007_SP1);
        ExchangeCredentials credentials = new WebCredentials("username",
                "password");

        service.setCredentials(credentials);

        try {
            service.setUrl(new URI("https://domain/EWS/Exchange.asmx"));
        } catch (URISyntaxException e) {
            e.printStackTrace();
        }

        EmailMessage msg;
        try {
            msg = new EmailMessage(service);
            msg.setSubject("hello world");
            msg.setBody(MessageBody
                    .getMessageBodyFromText("Sent using the EWS API"));
            msg.getToRecipients().add("test@test.com");
            msg.send();
        } catch (Exception e) {
            e.printStackTrace(); …
Run Code Online (Sandbox Code Playgroud)

java exchangewebservices ewsjavaapi

8
推荐指数
1
解决办法
2万
查看次数

ews java api - 如何设置电子邮件的权限/分类(公共/限制/内部)

我正在自定义文件夹中起草电子邮件.

EmailMessage msg= new EmailMessage(service);
msg.setSubject("Hello world!");
msg.setBody(MessageBody.getMessageBodyFromText("Draft email using the EWS Java API."));
msg.getToRecipients().add("someone@contoso.com");
// Tried to set extended property but not worked
ExtendedPropertyDefinition headerProperty = new ExtendedPropertyDefinition(
                    DefaultExtendedPropertySet.InternetHeaders,
                    "X-Classification",
                    MapiPropertyType.String);
            msg.setExtendedProperty(headerProperty,"Provision X-header Internet message header");
msg.save(CUSTOM_FOLDER_ID);
Run Code Online (Sandbox Code Playgroud)

我开始知道扩展属性对分类/权限标题有帮助.参考链接 - https://docs.microsoft.com/en-us/exchange/client-developer/exchange-web-services/how-to-provision-x-headers-by-using-ews-in-exchange 但是如何设置分类/许可?X-Classification-限制类似这样或其他任何方式?

我不想使用setImportance/setSensitivity方法.

我们手动设置以下方式 在此输入图像描述

期望从ews api设置代码的分类/许可 在此输入图像描述

如何使用ews java api为EmailMessage 设置权限/分类(public/Restricted/Internal)?

工作示例的代码片段表示赞赏.提前致谢

java exchange-server exchangewebservices ewsjavaapi

8
推荐指数
1
解决办法
292
查看次数

使用Exchange Web服务Java API下载附件?

我正在编写一个Java应用程序来使用Exchange Web服务下载电子邮件.我正在使用Microsoft的ewsjava API来执行此操作.

我可以获取电子邮件标题.但是,我无法使用此API下载电子邮件附件.以下是代码段.

FolderId folderId = new FolderId(WellKnownFolderName.Inbox, "mailbox@example.com");
findResults = service.findItems(folderId, view);
for(Item item : findResults.getItems()) {
   if (item.getHasAttachments()) {
      AttachmentCollection attachmentsCol = item.getAttachments();
      System.out.println(attachmentsCol.getCount()); // This is printing zero all the time. My message has one attachment.
      for (int i = 0; i < attachmentsCol.getCount(); i++) {
         FileAttachment attachment = (FileAttachment)attachmentsCol.getPropertyAtIndex(i);
         String name = attachment.getFileName();
         int size = attachment.getContent().length;
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

item.getHasAttachments()是返回true,但是attachmentsCol.getCount()0.

java exchange-server exchangewebservices ewsjavaapi

7
推荐指数
2
解决办法
8883
查看次数

subscribeToPullNotifications未检测到收件箱中的新电子邮件

我正在尝试使用subscribeToPullNotifications检测收件箱中的新电子邮件,如下所示:

PullSubscription subscription = service.subscribeToPullNotifications(
                folder, 1, null, EventType.NewMail);

        GetEventsResults events = subscription.getEvents();
        System.out.println("####### EVENTS: "
                + events.getItemEvents().toString());
        for (ItemEvent itemEvent : events.getItemEvents()) {
            if (itemEvent.getEventType() == EventType.NewMail) {
                EmailMessage message = EmailMessage.bind(service,
                        itemEvent.getItemId());
                System.out.println("######## NEW EMAIL MESSAGE IS: "
                        + message.getSubject());
            }
        }
Run Code Online (Sandbox Code Playgroud)

events.getItemEvents()总是空的,即使我可以在收件箱中看到新的电子邮件.还有如何在应用程序运行时始终重复上述代码,以便每分钟检查一次新的电子邮件.

exchangewebservices ewsjavaapi

7
推荐指数
1
解决办法
741
查看次数

java.security.cert.CertificateExpiredException:NotAfter

我使用EWSJavaAPI 1.1.5连接到Exchange Server 2010.

在尝试连接到服务器时,一切正常,直到今天,我得到以下异常:

microsoft.exchange.webservices.data.ServiceRequestException: The request failed. java.security.cert.CertificateExpiredException: NotAfter: Fri Dec 28 01:26:27 GMT+02:00 2012
    at microsoft.exchange.webservices.data.ServiceRequestBase.validateAndEmitRequest(Unknown Source)
    at microsoft.exchange.webservices.data.SimpleServiceRequestBase.internalExecute(Unknown Source)
    at microsoft.exchange.webservices.data.MultiResponseServiceRequest.execute(Unknown Source)
    at microsoft.exchange.webservices.data.ExchangeService.bindToFolder(Unknown Source)
    at microsoft.exchange.webservices.data.ExchangeService.bindToFolder(Unknown Source)
    at microsoft.exchange.webservices.data.Folder.bind(Unknown Source)
    at microsoft.exchange.webservices.data.Folder.bind(Unknown Source)
    at com.xeno.phonesuite.web.Mail.Mail.authenticate(Mail.java:100)
    at org.apache.jsp.mailandcalendar.dologin_jsp._jspService(dologin_jsp.java:121)
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1002)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310) …
Run Code Online (Sandbox Code Playgroud)

java certificate exchangewebservices ewsjavaapi

5
推荐指数
1
解决办法
2万
查看次数

401 NTLM 身份验证错误后未经授权:意外状态:MSG_TYPE1_GENERATED

我想知道错误消息MSG_TYPE1_GENERATEDMSG_TYPE3_GENERATED(来自httpClient/NTLMScheme.State枚举)表示帮助调试我们遇到的问题。有人可以提供这些错误的文档吗?

我有一个服务器应用程序,它使用ews-java-api 2.0连接到配置了NTLM 身份验证Exchange Server 2016   我已经配置了HttpClient版本4.5.2。服务器应用程序使用 Exchange 服务帐户从 Exchange 服务器检索房间和会议。房间和会议已成功检索,但在成功运行一段时间后,我在日志中看到以下错误:  

ERROR org.apache.http.impl.auth.HttpAuthenticator - NTLM authentication error: Unexpected state: MSG_TYPE3_GENERATED
Run Code Online (Sandbox Code Playgroud)

  此错误之后是一些从 Exchange Server 收到的 401 未经授权的错误,应用程序在重新启动之前永远不会从此 401 错误中恢复(这通常每天发生几次)。

Caused by: microsoft.exchange.webservices.data.core.exception.http.HttpErrorException: The remote server returned an error: (401)Unauthorized
                at microsoft.exchange.webservices.data.core.request.ServiceRequestBase.getEwsHttpWebResponse(ServiceRequestBase.java:726)
                at microsoft.exchange.webservices.data.core.request.ServiceRequestBase.validateAndEmitRequest(ServiceRequestBase.java:640)
                ... 34 more
 
Run Code Online (Sandbox Code Playgroud)

我不确定它是否与这个问题有关,但有时在MSG_TYPE3_GENERATED错误日志之后,我看到很多超时:  

 Caused by: java.net.SocketTimeoutException: Read timed out
                    at java.net.SocketInputStream.socketRead0(Native Method)
                    at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
                    at java.net.SocketInputStream.read(SocketInputStream.java:170)
                    at …
Run Code Online (Sandbox Code Playgroud)

authentication ntlm apache-httpclient-4.x ewsjavaapi

5
推荐指数
0
解决办法
1305
查看次数