将ASP.NET intranet应用程序与Outlook日历集成的技术

将ASP.NET intranet应用程序与Outlook日历集成的技术,.net,asp.net,outlook,exchange-server,ews-managed-api,.net,Asp.net,Outlook,Exchange Server,Ews Managed Api,我再也不能忽视用户的叫声了。他们想要一个任务调度系统,在某个时候我必须交付。我曾想过自己制作一个任务管理系统(这并不难),但是用户会有两个并排的任务管理系统,因为他们已经在使用Outlook来完成同样的任务了 就Outlook日历/任务集成而言,我有两种可能的方法: 1)使用JavaScript和自动化 我似乎记得用JavaScript实现自动化是可能的 优点: 我以前做过自动化 缺点: 自动化太可怕了 一些持久性(前景) 实体)是 客户端代码,其余的 服务器端的责任 代码。这感觉糟透了

我再也不能忽视用户的叫声了。他们想要一个任务调度系统,在某个时候我必须交付。我曾想过自己制作一个任务管理系统(这并不难),但是用户会有两个并排的任务管理系统,因为他们已经在使用Outlook来完成同样的任务了

就Outlook日历/任务集成而言,我有两种可能的方法:

1)使用JavaScript和自动化

我似乎记得用JavaScript实现自动化是可能的

优点:

  • 我以前做过自动化
缺点:

  • 自动化太可怕了
  • 一些持久性(前景) 实体)是 客户端代码,其余的 服务器端的责任 代码。这感觉糟透了
  • 可能的安全问题/
    来自IT部门的封锁
2)使用一些.NET API直接与Exchange Server交互

intranet使用单点登录,因此希望这样可以简化安全问题

优点:

  • 所有持久性代码都将是 服务器端
缺点:

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

和以往一样,我喜欢站在巨人的肩膀上。以前走过这条路的人能给我一些指导吗?

我们最近使用。这将是第二种选择的一种方式。我从未使用JavaScript尝试过同样的方法,所以对此一无所知

关于注释1的查询:您将需要一个单独的广告用户,您将使用该用户来模拟其他用户帐户并对其进行操作。请参考以下示例:

假设我有一个名为
fabrikam\myappname
的活动目录帐户,密码为
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);
}
一定要检查文章以使模拟工作正常


希望这能有所帮助。

如果出于某种原因您不想启用模拟(因为它是全局的),您也可以让每个用户与您运行应用程序的配置文件共享他们的日历(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;

我猜JavaScript自动化是指JScript(Windows脚本主机)和OLE?如果是这样的话,这可能在浏览器中不起作用,需要在计算机上安装Outlook,这样OLE才可用。我记得很多年前,我能够让JavaScript实现(我想)Word的基本自动化。是的,Outlook必须安装在计算机上,但它是用户的计算机,所以应该是。这看起来很完美。如果您不介意我进一步向您介绍,在我开始使用API向Joe Bloggs的日历添加内容之前,我需要了解关于Joe Bloggs的哪些信息?我是否需要他的Active Directory密码(这显然是非常有问题的)。此外,API是否允许我作为开发人员查看任何人的日历信息?或者我(或IT人员)可以配置访问的“级别”吗?我只是在想,如果这也意味着我可以阅读他们的日历和电子邮件,那么说服公司老板我需要这个工具会有多难。@David:根据你的评论更新了我的答案。谢谢你的抄送,这非常有帮助。