在EWS Managed API中,可以轻松地为特定用户创建约会:
ExchangeService service = new ExchangeService();
service.Credentials = new NetworkCredentials ( "administrator", "password", "domain" );
service.AutodiscoverUrl(emailAddress);
Appointment appointment = new Appointment(service);
appointment.Subject = "Testing";
appointment.Start = DateTime.Now;
appointment.End = appointment.Start.AddHours(1);
appointment.Save();
Run Code Online (Sandbox Code Playgroud)
这将为管理员创建约会.但是说我想实际为另一个用户创建一个约会(不要将该用户添加为我约会的参与者).这可以通过EWS Managed API实现吗?
是否可以访问除登录用户之外的其他Exchange帐户的文件夹和项目?
我可以通过Exchange Web服务托管API执行此操作吗?
c# exchange-server web-services exchangewebservices ews-managed-api
这是我正在尝试做的事情:
Location或Subject某些项目我得到的项目:
FindItemsResults<Appointment> findResults = calendar.FindAppointments(new CalendarView(startDate, endDate));
此查询工作正常.但每当我调用Update来保存项目时,我都会遇到异常:
Microsoft.Exchange.WebServices.Data.ServiceResponseException: One or more recipients are invalid.
即使我收到异常,该项目也会保存并更改为IsMeeting设置为true!现在更新的项目是与组织者等的会议......这实际上是对我来说数据损坏.
这是代码.它并不复杂.我只需更改测试它Location或Subject两者引起的问题.
Appointment a = Appointment.Bind(_service, new ItemId(id));
a.Location = newLocation
a.Update(ConflictResolutionMode.AlwaysOverwrite);
Run Code Online (Sandbox Code Playgroud)
我错过了一些概念吗?这似乎是一个非常令人震惊的问题.
FWIW,这是针对Office 365服务器的EWS 1.1.
我正在查看通过ViewPoint gem的所有请求.使用vcr gem.
require 'spec_helper'
require 'vcr'
describe CalendarImporters::Ews::Get do
let(:conf_connection) { FactoryGirl.create(:conf_connection)}
let(:calendar) { create(:calendar, :for_ews) }
let(:connection) { Connections::Ews.new(conf_connection, calendar.ews_email) }
it "works" do
VCR.use_cassette("a/cassette") do
connection.client.get_folder(:calendar)
end
end
end
Run Code Online (Sandbox Code Playgroud)
connection.client返回一个新ViewPoint连接.
我从gem返回的响应是:Viewpoint::EWS::Errors::UnauthorizedResponseError这相当于来自ews api的401未授权代码.
我发现了这个问题:https://github.com/vcr/vcr/issues/297
这是我遇到的完全相同的问题,但它已经3年了,没有解决方案.我所有的其他谷歌foo都没有发现.
深入研究视点宝石,我发现请求对象除了:HTTPClient和 WebMockHTTPClient预期之外没有任何区别.
作为"EWS托管API新手",我在查找有关创建和管理任务的示例和文档时遇到了一些问题.
我已经设法为自己创建了一个没有问题的任务.但是,我真的需要能够做到以下几点 - 如果有人能给我任何指示,我真的很感激......
提前感谢任何指针!
使用Microsoft的EWS,我们能够收听邮箱并在新电子邮件进入时采取措施.但是,我无法弄清楚如何避免连接超时.
根据Microsoft,这是StreamingSubscriptionConnection的构造函数:
public StreamingSubscriptionConnection (
ExchangeService service,
int lifetime
)
Run Code Online (Sandbox Code Playgroud)
在我的应用程序中,我将其编码如下:
service = new ExchangeService(ExchangeVersion.Exchange2010_SP1);
StreamingSubscriptionConnection conn = new StreamingSubscriptionConnection(service, 30);
Run Code Online (Sandbox Code Playgroud)
换句话说,我将超时(生命周期)设置为30分钟,因为这是我能够设置的最高值.我怎么能增加这个?或者,即使在传入的电子邮件之间发生约45分钟,我怎么能欺骗这个订阅才能保持活力?
我们有一个应用程序,它使用a StreamingSubscriptionConnection来读取发送到特定邮箱的每封电子邮件.我在开发过程中每天运行几次的问题我得到了例外{"'{square character}', hexadecimal value 0x1F, is an invalid character. Line 1, position 1."}.
这是堆栈跟踪:
at System.Xml.XmlTextReaderImpl.Throw(Exception e)
at System.Xml.XmlTextReaderImpl.Throw(String res, String[] args)
at System.Xml.XmlTextReaderImpl.Throw(Int32 pos, String res, String[] args)
at System.Xml.XmlTextReaderImpl.ThrowInvalidChar(Int32 pos, Char invChar)
at System.Xml.XmlTextReaderImpl.ParseText(Int32& startPos, Int32& endPos, Int32& outOrChars)
at System.Xml.XmlTextReaderImpl.ParseText()
at System.Xml.XmlTextReaderImpl.ParseDocumentContent()
at System.Xml.XmlTextReaderImpl.Read()
at Microsoft.Exchange.WebServices.Data.EwsXmlReader.Read()
at Microsoft.Exchange.WebServices.Data.EwsXmlReader.Read(XmlNodeType nodeType)
at Microsoft.Exchange.WebServices.Data.EwsXmlReader.InternalReadElement(XmlNamespace xmlNamespace, String localName, XmlNodeType nodeType)
at Microsoft.Exchange.WebServices.Data.EwsXmlReader.ReadStartElement(XmlNamespace xmlNamespace, String localName)
at Microsoft.Exchange.WebServices.Data.ServiceRequestBase.ReadResponse(EwsServiceXmlReader ewsXmlReader)
Run Code Online (Sandbox Code Playgroud)
如何安全地阅读包含非法字符的EWS电子邮件?
经过一番搜索似乎它是可以解决这个问题,使用旧版本的EWS API的.但是,使用最新版本的托管API似乎没有人修复.
我正在使用Exchange Server 2007 SP3
我可以使用以下代码连接交换Web服务
ExchangeServiceBinding esb = new ExchangeServiceBinding();
esb.RequestServerVersionValue = new RequestServerVersion();
esb.RequestServerVersionValue.Version = ExchangeVersionType.Exchange2007_SP1;
esb.Credentials = new NetworkCredential("<user_id>", "<password>", "<domain>");
esb.Url = @"https://<server_fqdn>/ews/Exchange.asmx";
Run Code Online (Sandbox Code Playgroud)
我正在寻找下载未读附件的代码.
请你帮助我好吗?
我正在编写支持系统,这是我第一次使用EWS.到目前为止,我一直很成功.我可以提取我需要的信息.发送电子邮件,一切都很好.我确实有一个小小的头痛.有没有办法判断一封电子邮件实际上是否是回复?该应用程序的基本思想是有人发送电子邮件.我们回复并给他们一个参考编号.这样做并且运作良好.现在,如果他们回复同一个地址,我们需要在数据库中记录它有点不同.因此,我需要一些神奇的方法来判断电子邮件是否是回复.到目前为止,我被困住了.
任何建议都将受到高度赞赏,因为我是编程行业的新手,到目前为止谷歌搜索没有任何用处.我在这里包含一段代码
FindItemsResults<Item> findResults = service.FindItems(WellKnownFolderName.Inbox, view);
foreach (Item myItem in findResults.Items.Where(i => i is EmailMessage))
{
var mailItem = myItem as EmailMessage;
if (!mailItem.IsRead)
{
// load primary properties and get a text body type
mailItem.Load(propertySet);
// Update the item to isRead in email
mailItem.IsRead = true;
mailItem.Update(ConflictResolutionMode.AutoResolve);
//Check if it is a reply and mark the msg as such
// add message to list
SupportEmailMessage msg = new SupportEmailMessage();
msg.Subject = mailItem.Subject;
msg.MessageBody = mailItem.Body.Text;
msg.DateSent = mailItem.DateTimeSent; …Run Code Online (Sandbox Code Playgroud) 我正在使用EWS Managed API v2.2进行EWS调用.最近在我的一个客户,我们有一个奇怪的情况,服务电话,任何服务电话,从未收到响应.
我们正在设置显式超时,使用日志记录围绕服务调用,并使用EWS跟踪侦听.监听器显示EWSRequest SOAP消息,就是这样.日志记录显示"服务之前呼叫"日志条目,但不显示"售后服务呼叫"条目.
我怀疑限制可能是它背后并暂时取消EWS限制限制没有任何影响,无论如何,如果限制开始,我会期待一个错误响应.
这是服务初始化的方式:
public ExchangeWebService(string username, string password, string emailAddress, string exchangeUrl, string exchangeVersion)
{
ExchangeVersion exVersion = (ExchangeVersion)Enum.Parse(typeof(ExchangeVersion), exchangeVersion);
_exchangeService = CreateExchangeService(username, password, emailAddress, exchangeUrl, exVersion);
_exchangeService.Timeout = 30000;
}
private static ExchangeService CreateExchangeService(string username, string password, string emailAddress,
string exchangeUrl, ExchangeVersion exchangeVersion)
{
IntegrationLogging _il = new IntegrationLogging(Constants.LoggingSourceName);
ExchangeService service = new ExchangeService(exchangeVersion);
QualifiedUserName qualifiedName = new QualifiedUserName(username);
NetworkCredential credentials = new NetworkCredential(qualifiedName.UserName, password);
if (qualifiedName.HasDomain)
{
credentials.Domain = qualifiedName.Domain;
}
service.Credentials = …Run Code Online (Sandbox Code Playgroud)