我指的是这个链接请求服务器.问题是某个时候(并不总是,大约20% - 30%,意味着有时我可以得到成功的响应),我得到401错误和服务器响应基本授权挑战预期,但没有找到.
这是我的代码:
HttpRequestInterceptor preemptiveAuth = new HttpRequestInterceptor()
{
public void process(final HttpRequest request, final HttpContext context)
throws HttpException, IOException
{
AuthState authState = (AuthState) context
.getAttribute(ClientContext.TARGET_AUTH_STATE);
CredentialsProvider credsProvider = (CredentialsProvider) context
.getAttribute(ClientContext.CREDS_PROVIDER);
HttpHost targetHost = (HttpHost) context
.getAttribute(ExecutionContext.HTTP_TARGET_HOST);
if (authState.getAuthScheme() == null)
{
AuthScope authScope = new AuthScope(targetHost.getHostName(),
targetHost.getPort());
Credentials creds = credsProvider.getCredentials(authScope);
if (creds != null)
{
authState.setAuthScheme(new BasicScheme());
authState.setCredentials(creds);
}
}
}
};
Run Code Online (Sandbox Code Playgroud)
这是我的身份验证:
HttpPost httpPost = new HttpPost(SERVER_AUTH_URL);
httpPost.setHeader("Content-type", "text/xml; charset=utf-8"); …Run Code Online (Sandbox Code Playgroud) 我正在使用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
我正在尝试更新现有的约会,但EWS正在投掷"Set action is invalid for property.".我查看了设置为约会对象的所有值,但我无法确定此错误的实际原因.
这是我的代码片段:
ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010_SP1);
service.Credentials = new WebCredentials("ews_calendar", PASSWORD, "acme");
service.Url = new Uri("https://acme.com/EWS/Exchange.asmx");
ImpersonatedUserId impUser = new ImpersonatedUserId();
service.ImpersonatedUserId = new ImpersonatedUserId(ConnectingIdType.SmtpAddress, "tin.tin@acme.com");
string itemId = "";
DateTime PreviousStartDate = new DateTime(2012, 04, 02, 18, 00, 00);
DateTime PreviousEndDate = new DateTime(2012, 04, 02, 18, 30, 00);
CalendarView calView = new CalendarView(PreviousStartDate, PreviousEndDate);
Appointment appointment = new Appointment(service);
try
{
calView.PropertySet = new PropertySet(BasePropertySet.IdOnly, AppointmentSchema.Subject, AppointmentSchema.Start, AppointmentSchema.IsRecurring, AppointmentSchema.AppointmentType);
FindItemsResults<Appointment> …Run Code Online (Sandbox Code Playgroud) 我从一个Exchange 2007服务器的地址开始:
user@domain.exchangeserver.org
Run Code Online (Sandbox Code Playgroud)
我尝试发送自动发现请求,如MSDN中所述.
我尝试使用TechNet白皮书中记录的通用自动发现地址.
因此,curl在PHP上使用,我发送了以下请求:
<Autodiscover
xmlns="http://schemas.microsoft.com/exchange/autodiscover/outlook/requestschema/2006">
<Request>
<EMailAddress>user@domain.exchangeserver.org</EMailAddress>
<AcceptableResponseSchema>
http://schemas.microsoft.com/exchange/autodiscover/outlook/responseschema/2006a
</AcceptableResponseSchema>
</Request>
</Autodiscover>
Run Code Online (Sandbox Code Playgroud)
到以下网址:
https://domain.exchangeserver.org/autodiscover/autodiscover.xml
Run Code Online (Sandbox Code Playgroud)
但没有得到回应,只是最终超时.
我也尝试过:
https://autodiscover.domain.exchangeserver.org/autodiscover/autodiscover.xml
Run Code Online (Sandbox Code Playgroud)
结果相同.
现在,由于我的更大目标是使用自动发现和Exchange Web服务,并且由于所有EWS URL通常使用与Outlook Web Access地址相同的子域,我想我会看到自动发现URL是否也是如此.由于OWA URL是:
OWA: https://wmail.domain.exchangeserver.org
Run Code Online (Sandbox Code Playgroud)
我试过了:
https://wmail.domain.exchangeserver.org/autodiscover/autodiscover.xml
Run Code Online (Sandbox Code Playgroud)
果然,我收到了预期的回应.
但是,我只知道OWA子域,因为它是我可以访问的服务器,而且我用来测试所有内容.如果这是一个实时应用程序并且用户输入了他们自己的Exchange电子邮件,我肯定不会知道它或能够猜测它.
我知道在不知道OWA URL的情况下必须可以使用自动发现设置,因为我可以输入:
user@domain.exchangeserver.org
Run Code Online (Sandbox Code Playgroud)
进入Snow Leopard上的Apple Mail,它可以毫无困难地找到所有东西.
所以问题是......
应该https://domain.exchangeserver.org/autodiscover/autodiscover.xml有用,我只是错过了尝试连接它的一步?要么,
是否有一些技巧(可能涉及ping电子邮件地址?)Apple Mail和其他客户端在发送自动发现请求之前用于将地址解析为OWA子域?
感谢任何知道或可以猜测的人.
使用Exchange 推送通知我一直在创建一个同步来自Office365用户的日历数据的服务.我一直在使用Office365 Calendar REST API(用于获取和管理日历)和EWS API(用于订阅日历更改)的组合.
我注意到最近MS已经为他们的订阅端点引入了预览API.但是,此API仍处于预览模式,我希望暂时不使用它.
一旦我完成了所有设置,问题是我无法在日历事件资源(REST)和推送通知上返回的EWS CalendarItem资源之间建立关联.在ItemId为CalendarItem和Id对REST事件不同.
当尝试更新我从REST API保存的事件时,这证明是有问题的,因为我找不到将两者关联起来的好方法.
任何帮助是极大的赞赏!
编辑
在进一步挖掘之后,我实际上发现从REST API(GET /calendars)返回的日历似乎是MessageEWS层次结构中的项目.因此,不是此端点返回实际的文件夹ID,而是返回属于某个名为"公共视图"的文件夹中的项ID.
我不确定为什么事情是这样设计的,但base64编码ID的差异似乎非常小.我仍然无法弄清楚将两者联系起来的好方法.
我们正在开发一个模块,其主要目标是跟踪和收集有关损害检查(保险市场)的信息.每个案例都有一个代码(例如L000525).每个案例都可以由几个人管理.与特定案例相关的所有电子邮件都包含主题中的案例代码.
我们想要做的是收集并显示与每个特定案例相关的传入和发送的电子邮件.
我们的想法是,任何用户都可以打开"案例管理"窗口,选择特定案例,然后获取所有相关信息(当然包括电子邮件).
我们必须在大约20个用户的邮箱中找到电子邮件.所以问题是:
我们是Exchange世界的新手,所以我们在考虑Exchange模仿,但我们根本不确定.该模块是在Silverlight 3,WCF,SQL Server + Exchange 2007中开发的.
我使用以下代码查找用户发送的所有电子邮件,但这只搜索主收件箱文件夹,不检查任何子文件夹.我想搜索所有邮件项目,包括任何子文件夹.
我尝试过WellKnownFolderName.Root和WellKnownFolderName.Inbox,这些只搜索那些文件夹,而不是子文件夹.
private static void SearchItems(string email)
{
ItemView iv = new ItemView(10);
FindItemsResults<Item> fiitems = _service.FindItems(WellKnownFolderName.Inbox, "from:username@example.com", iv);
foreach (Item item in fiitems)
{
Console.WriteLine("Subject:\t" + item.Subject);
Console.WriteLine("Received At:\t\t" + item.DateTimeReceived.ToString("dd MMMM yyyy"));
Console.WriteLine();
}
Console.WriteLine("Press Enter to continue");
Console.ReadLine();
}
Run Code Online (Sandbox Code Playgroud) 我正在使用ExchangeService WebService API(Microsoft.Exchange.WebServices.Data)但我找不到任何Close或Dispose方法.
是不是必须以某种方式关闭连接?
我的方法看起来像这样:
public void CheckMails()
{
ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2007_SP1);
IMAPCredentials creds = new IMAPCredentials();
service.Credentials = new NetworkCredential(creds.User, creds.Pass, creds.Domain);
service.AutodiscoverUrl(creds.User + "@example.com");
// not the real code from here on but you'll get the idea...
// var emails = service.FindItems();
// emails[0].Load();
// emails[0].Attachments[0].Load();
// ...
}
Run Code Online (Sandbox Code Playgroud) 我在我的控制台应用程序中使用EWS API来处理邮箱项目,我的连接脚本看起来像
ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2007_SP1);
service.UseDefaultCredentials = true;
service.AutodiscoverUrl("emailService@domain.com");
Run Code Online (Sandbox Code Playgroud)
但我发现我的电子邮件帐户已移至Office 365云.我该如何更改身份验证?
我找到了EWS服务网址
service.Url = new Uri("https://outlook.office365.com/EWS/Exchange.asmx");
Run Code Online (Sandbox Code Playgroud)
但我不知道如何使用它.
谢谢
我正在使用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的这个错误,但无法找到为什么这个错误可能发生在我身上.
我究竟做错了什么?