当前位置: 首页 > 知识库问答 >
问题:

向用户Outlook日历添加约会/会议-来自ASP.NET MVC web应用程序

年良骏
2023-03-14

我正在为一家拥有4名销售顾问的保险公司编写MVC预订应用程序。

使用此预订应用程序,人们可以直接在他们的Outlook日历中与这4位顾问之一预约/会议。

如果我有这4个顾问的Outlook-login-凭据(用户名和密码),那么我ezaly可以像这样将约会/会议添加到销售顾问日历中。

var service = new ExchangeService(ExchangeVersion.Exchange2010_SP2);
    service.Credentials = new WebCredentials("user1@contoso.com", "password");
    service.Url = new Uri(Settings.ExchangeServer);

var appointment = new Microsoft.Exchange.WebServices.Data.Appointment(service);
appointment.Subject = setAppointmentDto.Title;
appointment.Body = setAppointmentDto.Message;
appointment.Location = setAppointmentDto.Location;

 ...

appointment.Save(SendInvitationsMode.SendToAllAndSaveCopy);

如果我没有那些顾问密码,我就不能使用下面的行。

service.Credentials = new WebCredentials ( "user1@contoso.com", "password");

我能以不同的方式(如何)认证顾问吗?

Oauth2客户端凭据流(我不知道是什么...以及如何使用)?

所有四名销售顾问都已在Microsoft CRM和Windows中创建。这可能是通过(Active Directory…我不知道。

共有1个答案

谭骏
2023-03-14

您绝对可以使用模拟来做到这一点。这样,您就不需要拥有顾问的密码。您只需要模拟帐户电子邮件和密码。

使用此链接了解有关模拟配置的更多信息和有关模拟配置的更多信息。

一旦创建了用户和角色,并将配置设置为允许模拟,就可以继续编写代码了。

您实例化服务并设置凭据,如下所示:

WebCredentials credentials = new WebCredentials(
            "impersonate@domain.com", "YourPassword", "");

exchangeService = new ExchangeService { PreAuthenticate = true, Credentials = 
 credentials };

exchangeService.ImpersonatedUserId = new ImpersonatedUserId(
            ConnectingIdType.SmtpAddress,
            "consultant1@domain.com");

我在这个答案上找到了上面的代码。

使用正确的凭据实例化服务后,可以继续创建约会。您当前的代码应该可以工作:

var appointment = new 
Microsoft.Exchange.WebServices.Data.Appointment(service);
appointment.Subject = setAppointmentDto.Title;
appointment.Body = setAppointmentDto.Message;
appointment.Location = setAppointmentDto.Location;
...
appointment.Save(SendInvitationsMode.SendToAllAndSaveCopy);

因为它将创建一个约会,组织者将是“consultant1@domain.com”。它还会将其添加到顾问的日历中。

您可以将模拟用于更多用途,例如代表特定用户发送电子邮件、查看该用户的所有约会等。

要记住的一件重要事情是“模拟的安全注意事项”。根据 MSDN 文档:

模拟使调用方能够模拟给定的用户帐户。这使调用方能够通过使用与被模拟的帐户关联的权限来执行操作,而不是使用与调用方的帐户关联的权限。因此,您应该了解以下安全注意事项:

>

  • 只有被 Exchange 服务器管理员授予应用程序模拟角色的帐户才能使用模拟。

    您应该创建一个管理范围,将模拟限制在指定的帐户组中。如果不创建管理范围,则会将ApplicationImpersonation角色授予组织中的所有帐户。

    通常,ApplicationImpersonation角色被授予专用于特定应用程序或应用程序组的服务帐户,而不是用户帐户。您可以根据需要创建任意多或任意少的服务帐户。

    所以你必须确保解决这些问题。

    我希望这有帮助。

    以下是其他有用的链接:

    • 如何:在 Exchange 中使用 EWS 发送电子邮件
    • 如何:在 Exchange 中使用 EWS 获取约会和会议
    • 如何:在 Exchange 2013 中使用 EWS 创建约会和会议

  •  类似资料:
    • 我试图实现一种在outlook中发送html电子邮件(带链接)的方式,同时也发送相关的日历约会,这些约会直接进入用户的日历,而无需他们打开每个单独的。ics附件。 到目前为止,我已经实现了这一点的几个变体,但没有一个是完全需要的。 以HTML形式发送电子邮件,然后使用Exchange Web服务在用户日历中自动创建约会。(我后来被告知,我们将无法访问这些用户的密码,即使我们这样做了,他们也会经常更

    • 提前谢了。 另外,我可以使用@schedule()来完成这个操作,但是我希望避免每分钟都运行这个方法。*

    • 我们正在尝试实现一个日历门户(C#ASP.NET MVC),一个管理员可以看到多个outlook(或office 365)用户的日历,并查看谁可用。因此,应从一个ASP访问多个帐户。NET MVC应用程序。 第一个问题:甚至可能吗?(可能是因为我已经在堆栈溢出上看到了帖子:EWS - 访问所有共享日历)第二个问题:什么是正确的方法?第三个问题:微软或文章是否有任何项目?(我可以找到任何好的) 我曾

    • 问题内容: 如何添加动作侦听器,以便在单击议程中的约会时打开一个新窗口,其中包含有关该特定单击约会的更多详细信息。 问题答案: 然后打印约会:

    • 我使用Jitsi-Meetiframe Api来自定义视频通话功能。它正在按预期工作。然而,我想在此添加一个功能。该功能是在超文本传输协议负载下自动加入或自动启动会议。我如何做到这一点,而不是用户手动按下加入按钮?