C# 在不使用 office interop 的情况下创建 Outlook 任务
C# Create Outlook task without using office interop
我需要创建 outlook 任务并将它们添加到我的 Asp.net MVC 应用程序中的用户任务文件夹,经过一些研究我发现使用 office interop 是一个选项,但不是一个好的选择。
所以我需要知道还有哪些其他选择可以实现这个目标?
Microsoft 目前不推荐也不支持来自任何无人值守、非交互式客户端应用程序或组件(包括 ASP、ASP.NET、DCOM 和 NT)的 Microsoft Office 应用程序自动化服务),因为当 Office 在此环境中 运行 时,Office 可能表现出不稳定的行为 and/or 死锁。
如果您要在服务器端上下文中构建 运行 的解决方案,您应该尝试使用已针对无人值守执行安全处理的组件。或者,您应该尝试找到至少允许 运行 客户端部分代码的替代方案。如果您从服务器端解决方案使用 Office 应用程序,该应用程序将缺少许多 运行 成功所必需的功能。此外,您将承担整体解决方案稳定性的风险。在 Considerations for server-side Automation of Office 文章中阅读更多相关信息。
作为解决方法,您可以考虑使用 Outlook 所基于的低级 API - 扩展 MAPI 或任何其他围绕 API 的包装程序,例如 Redemption。
如果您只处理 Exchange 邮箱,则可以考虑使用 EWS,请参阅 EWS Managed API, EWS, and web services in Exchange 了解更多信息。
经过更多搜索,我决定使用 EWS。所以这是我使用 exchange 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 ...
我需要创建 outlook 任务并将它们添加到我的 Asp.net MVC 应用程序中的用户任务文件夹,经过一些研究我发现使用 office interop 是一个选项,但不是一个好的选择。
所以我需要知道还有哪些其他选择可以实现这个目标?
Microsoft 目前不推荐也不支持来自任何无人值守、非交互式客户端应用程序或组件(包括 ASP、ASP.NET、DCOM 和 NT)的 Microsoft Office 应用程序自动化服务),因为当 Office 在此环境中 运行 时,Office 可能表现出不稳定的行为 and/or 死锁。
如果您要在服务器端上下文中构建 运行 的解决方案,您应该尝试使用已针对无人值守执行安全处理的组件。或者,您应该尝试找到至少允许 运行 客户端部分代码的替代方案。如果您从服务器端解决方案使用 Office 应用程序,该应用程序将缺少许多 运行 成功所必需的功能。此外,您将承担整体解决方案稳定性的风险。在 Considerations for server-side Automation of Office 文章中阅读更多相关信息。
作为解决方法,您可以考虑使用 Outlook 所基于的低级 API - 扩展 MAPI 或任何其他围绕 API 的包装程序,例如 Redemption。
如果您只处理 Exchange 邮箱,则可以考虑使用 EWS,请参阅 EWS Managed API, EWS, and web services in Exchange 了解更多信息。
经过更多搜索,我决定使用 EWS。所以这是我使用 exchange 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 ...