作为“EWS Managed API Newbie”,我在查找有关创建和管理任务的示例和文档方面遇到了一些问题。
我设法为自己创建了一个没有问题的任务。但是,我真的需要能够做到以下几点 - 如果有人能给我任何指示,我真的很感激......
提前感谢任何指针!
答案 0 :(得分:3)
this post中的代码为我工作
为后代粘贴代码:
public string CreateTaskItem(string targetMailId)
{
string itemId = null;
task.Subject = "Amit: sample task created from SDE and EWS";
task.Body = new BodyType();
task.Body.BodyType1 = BodyTypeType.Text;
task.Body.Value = "Amit created task for you!";
task.StartDate = DateTime.Now;
task.StartDateSpecified = true;
// Create the request to make a new task item.
CreateItemType createItemRequest = new CreateItemType();
createItemRequest.Items = new NonEmptyArrayOfAllItemsType();
createItemRequest.Items.Items = new ItemType[1];
createItemRequest.Items.Items[0] = task;
/** code from create appointment **/
DistinguishedFolderIdType defTasksFolder = new DistinguishedFolderIdType();
defTasksFolder.Id = DistinguishedFolderIdNameType.tasks;
defTasksFolder.Mailbox = new EmailAddressType();
defTasksFolder.Mailbox.EmailAddress = targetMailId;
TargetFolderIdType target = new TargetFolderIdType();
target.Item = defTasksFolder;
createItemRequest.SavedItemFolderId = target;
try
{
// Send the request and get the response.
CreateItemResponseType createItemResponse = _esb.CreateItem(createItemRequest);
// Get the response messages.
ResponseMessageType[] rmta = createItemResponse.ResponseMessages.Items;
foreach (ResponseMessageType rmt in rmta)
{
ArrayOfRealItemsType itemArray = ((ItemInfoResponseMessageType)rmt).Items;
ItemType[] items = itemArray.Items;
// Get the item identifier and change key for each item.
foreach (ItemType item in items)
{
//the task id
Console.WriteLine("Item identifier: " + item.ItemId.Id);
//the change key for that task, would be used if you want to track changes ...
Console.WriteLine("Item change key: " + item.ItemId.ChangeKey);
}
}
}
catch (Exception e)
{
Console.WriteLine("Error Message: " + e.Message);
}
return itemId;
}
答案 1 :(得分:2)
我一直在研究这个,我不确定是否可以使用Managed API。
我已经使用四个示例用户文件夹设置了一个系统,并且中央管理员用户可以访问每个用户的邮箱。当我尝试使用API查找文件夹时,我只能找到创建服务对象时我提供的凭据的用户文件夹。
我也在使用自动生成的代理对象(只选择了API来尝试和帮助),并且我使用以下过程为另一个用户创建任务(这可以正常工作......):
发送请求时,将在目标用户的文件夹中创建项目。
我希望在托管API中可能有这个序列,但它似乎不起作用。
我会继续努力,因为我有机会,但我还有其他问题,我正在处理约会。我认为这个序列可能会帮助其他人看,如果他们有更多的运气。
很抱歉,我暂时无法提供更多信息
答案 2 :(得分:2)
另一个选项是使用ExchangeService ImpersonatedUserId属性来模拟将被分配任务的用户。在创建任务之前模拟用户,应在其“任务”文件夹中创建它。
答案 3 :(得分:1)
不幸的是,您无法设置Task.DisplayTo属性。我建议情况仍然是EWS不支持将任务分配给其他人(see post),并且为了获得您需要的功能,您必须在任务文件夹中创建项目。要分配给它的用户(这与分配不同,您可以从自己的文件夹中进行分配)
虽然我有这个功能与代理类一起工作,但我还没有使用托管API。我假设您可以使用FindFolder方法检索受理人的任务文件夹,然后在那里创建项目,但我会看看,并在我有一个工作版本时更新。
留意这个空间; - )
答案 4 :(得分:0)
EWS目前不支持分配任务 检查此链接
答案 5 :(得分:0)
我最近一直在研究这个问题,并且有以下几点:
我正在运行一个控制台应用程序,该应用程序将设置一个流连接以检查到达userOne@myDomain.com
邮箱的新电子邮件
static void Main(string[] args)
{
ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2013);
WebCredentials wbcred = new WebCredentials("userone", "password", "mydomain");
service.Credentials = wbcred;
Console.WriteLine("Attempting to autodiscover Url...");
service.AutodiscoverUrl("userone@mydomain.com", RedirectionUrlValidationCallback);
EWSConnection.SetStreamingNotifications(service);
Console.ReadKey();
Environment.Exit(0);
}
我的EWSConnection
静态类看起来像这样:
public static void SetStreamingNotifications(ExchangeService service)
{
_service = service;
try
{ var subscription = service.SubscribeToStreamingNotifications(
new FolderId[] { WellKnownFolderName.Inbox },
EventType.NewMail);
StreamingSubscriptionConnection connection = new StreamingSubscriptionConnection(service, 5);
connection.AddSubscription(subscription);
connection.OnNotificationEvent += new StreamingSubscriptionConnection.NotificationEventDelegate(OnEvent);
connection.Open();
_subscription = subscription;
_subscriptionConnection = connection;
Console.WriteLine($"Connection Open:{connection.IsOpen}");
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
}
有了这个,你可以看到我订阅了OnNotificationEvent
,当新邮件到达时,我的OnEvent
方法也会被调用。当新邮件到达此邮箱时,我需要创建一个任务,并根据ToAddress
属性将其分配给相关人员。
private static void CreateTask(NotificationEvent notification, RecievedMail recievedMail)
{
try
{
Console.WriteLine("Attempting to create task");
Microsoft.Exchange.WebServices.Data.Task task = new Microsoft.Exchange.WebServices.Data.Task(_service);
task.DueDate = DateTime.Now.AddDays(7);
task.Body = recievedMail.Body;
task.Subject = recievedMail.Subject;
string targetSharedEmailAddress = null;
if (recievedMail.ToAddress.ToString() == "humanresources <SMTP:humanresources@myDomain.com>")
{
targetSharedEmailAddress = "usertwo@mydomain.com";
}
task.Save(new FolderId(WellKnownFolderName.Tasks,targetSharedEmailAddress)); //
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
}
首先,您可以看到我尝试在task.Save
方法中添加我想要创建任务的人,但是一旦我转到Outlook与新创建的任务进行交互,所有者仍然是userone
,即凭据用于连接服务的人,这对我来说是一个问题,因为我需要任务所有者usertwo
。
这是通过删除targetSharedEmailAddress
变量并使用ImpersonatedUserId
对象的ExchangeServer
属性来完成的。
if (recievedMail.ToAddress.ToString() == "humanresources <SMTP:humanresources@mydomain.com>")
{
_service.ImpersonatedUserId = new ImpersonatedUserId(ConnectingIdType.SmtpAddress, "usertwo@mydomain.com");
}
https://msdn.microsoft.com/en-us/library/office/dd633680(v=exchg.80).aspx