【问题标题】:Techniques for integrating an ASP.NET intranet app with the Outlook calendar将 ASP.NET Intranet 应用程序与 Outlook 日历集成的技术
【发布时间】:2011-05-18 17:58:32
【问题描述】:

我不能再无视用户的叫喊声了。他们想要一个任务调度系统,在某些时候我必须交付。我正在考虑自己制作(不会很难),但是用户将拥有两个并排的任务管理系统,因为他们已经将 Outlook 用于同一件事。

在 Outlook 日历/任务集成方面,我想到了两种可能的方法:

1) 使用 JavaScript 和自动化

我似乎记得在 JavaScript 中可以实现自动化。

优点:

  • 我以前做过自动化。

缺点:

  • 自动化太可怕了!
  • 一些持久性(Outlook 实体)是由 客户端代码,其余的 服务器端的责任 代码。这感觉很可怕。
  • 可能的安全问题 /
    来自 IT 部门的阻止。

2) 使用一些 .NET API 直接与 Exchange Server 交互

Intranet 使用单点登录,因此希望这样可以更轻松地解决安全问题。

优点:

  • 所有持久性代码将是 服务器端。

缺点:

  • 我什至不知道这样的API 存在。

一如既往,我喜欢站在巨人的肩膀上。有没有走过这条路的人可以给我一些指导?

【问题讨论】:

  • 我猜 JavaScript 自动化是指 JScript(Windows 脚本宿主)和 OLE?如果是这样,那可能无法在浏览器中运行,并且需要在计算机上安装 Outlook 才能使用 OLE。
  • 我只记得很多年前我能够让 JavaScript 对(我认为)Word 进行基本的自动化。是的,Outlook 必须安装在计算机上,但它是用户的计算机,所以它是。

标签: .net asp.net outlook exchange-server ews-managed-api


【解决方案1】:

我们最近使用 Exchange Web Services Managed API 为我们的 Intranet 应用程序进行了相同类型的集成。这将是第二种选择的一种方式。我从来没有尝试过使用 JavaScript,所以不知道。

关于评论 1 的查询:您需要一个 AD 用户,您将使用该用户来模拟和使用其他用户帐户。请参考以下示例:

假设我有一个名为 fabrikam\myappname 的 Active Dir 帐户,密码为 Fabi$Gre@t2010

void CreateFolder(string targetUserEmail) {
    string appName = "myappname";
    string appPassword = "Fabi$Gre@t2010";
    string emailDomain = "fabrikam";
    string appEmail = string.Format("{0}@{1}.com", appName, emailDomain);

    ExchangeService service = new ExchangeService();
    service.Credentials = new NetworkCredential(appName, appPassword, emailDomain);
    service.AutodiscoverUrl(appEmail);

    service.ImpersonatedUserId = new ImpersonatedUserId(ConnectingIdType.SmtpAddress, targetUserEmail);

    Folder newFolder = new Folder(service);
    newFolder.DisplayName = "TestFolder1";

    newFolder.Save(WellKnownFolderName.Inbox);
}

请查看文章Configuring Exchange Impersonation 以使模拟工作。

希望对您有所帮助。

【讨论】:

  • 这看起来很完美。如果您不介意我进一步向您介绍,在我开始使用 API 将内容添加到他的日历之前,我需要了解有关 Joe Bloggs 的哪些信息?我需要他的 Active Directory 密码吗(这显然会很成问题)。此外,API 是否允许我作为开发人员查看任何人的日历信息?或者我(或 IT 人员)可以配置访问“级别”吗?我只是在想,如果这也意味着我可以阅读他们的日历和电子邮件,那么说服公司老板我需要这个工具是多么困难。
  • @David:根据您的评论更新了我的答案。
  • 感谢 CC,这对您很有帮助。
【解决方案2】:

如果由于某种原因您不想启用模拟(因为它是全球性的),您还可以让每个用户与运行应用的个人资料共享他们的日历(CodeCanvas 示例中的 appName)。一旦他们授予您适当的权限(读/写/编辑),您就可以将约会添加到他们的日历中,如下所示:

myappointment = new Appointment(service);
myappointment.Subject = "subject";
myappointment.Body = "body";
myappointment.Start = myStartTime;
myappointment.End = myStartTime.AddHours(1);
myMailbox = new Mailbox("username@domain.com");
myFolder = new FolderId(WellKnownFolderName.Calendar, myMailbox);
myappointment.Save(myFolder, SendInvitationsMode.SendToNone);
/* get the appointment id so your app can access it later to update or delete */ 
myexchangeid = myappointment.Id.UniqueId;

【讨论】:

    猜你喜欢
    • 2023-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多