C#在不使用office互操作的情况下创建Outlook任务

时间:2016-09-25 16:00:19

标签: c# asp.net-mvc outlook exchange-server

我需要创建outlook任务并将它们添加到我的Asp.net MVC应用程序中的用户任务文件夹中,经过一些研究后我发现使用office interop是选项但不是一个好选择。
所以我需要知道实现这一目标的其他选择是什么?

2 个答案:

答案 0 :(得分:1)

Microsoft目前不建议也不支持从任何无人参与的非交互式客户端应用程序或组件(包括ASP,ASP.NET,DCOM和NT服务)自动化Microsoft Office应用程序,因为Office可能会出现不稳定Office在此环境中运行时的行为和/或死锁。

如果要构建在服务器端上下文中运行的解决方案,则应尝试使用已为安全无人值守执行的组件。或者,您应该尝试找到允许至少部分代码在客户端运行的替代方法。如果从服务器端解决方案使用Office应用程序,则应用程序将缺少许多成功运行的必要功能。此外,您将承担整体解决方案稳定性的风险。在Office文章的Considerations for server-side Automation中了解更多相关信息。

作为一种解决方法,您可以考虑使用Outlook所基于的低级API - 扩展MAPI或该API的任何其他包装,例如Redemption。

如果您只处理Exchange邮箱,可以考虑使用EWS,有关详细信息,请参阅EWS Managed API, EWS, and web services in Exchange

答案 1 :(得分:0)

经过更多搜索后,我决定使用EWS。所以这是我使用交换Web服务创建任务所实现的:

var exchange = new ExchangeService(ExchangeVersion.Exchange2010_SP2);
exchange.Credentials = new WebCredentials("username", "password", "domain");
exchange.AutodiscoverUrl("user@domain.com");

// see #1
// exchange.ImpersonatedUserId = new ImpersonatedUserId(ConnectingIdType.SmtpAddress, ImpersonatedUser@domain.com");

var task = new Task(exchange);
task.Subject = "foo";
task.Body = new MessageBody("bar");
task.Status = TaskStatus.InProgress;
task.StartDate = PurchaseOrder.OrderDate;
task.DueDate = PurchaseOrder.DeliverDate;
task.Save();

// see #2
// task.Save(new FolderId(WellKnownFolderName.Tasks, "delegatedUser@domain.com"));

根据this article,您可以将任务保存在用户配置的交换服务的任务文件夹中。

#1:,除非您有模仿权限

#2:您的目标用户委派任务
在我的情况下,我似乎使用#2 ...