【问题标题】:EWS adding calendar to someone elses accountEWS 将日历添加到其他人的帐户
【发布时间】:2016-09-07 10:35:57
【问题描述】:

我正在尝试使用 EWS 向其他交换帐户添加新约会。我正在尝试从 Web 服务器执行此操作。我有代码可以将信息添加到登录到服务器的帐户中,但无法弄清楚如何将约会添加到其他人的帐户中。我想我因为 Exchange 服务凭据而挂断了电话。我想也许如果我传入管理员的凭据,我就可以添加到某人的帐户中,但这也不起作用。希望有人可以帮助我指出正确的方向。这是我正在努力将约会添加到我自己的日历中的代码。

谢谢 香农

Friend Shared Function GetService(emailAddress As String) As Microsoft.Exchange.WebServices.Data.ExchangeService
    Dim Service As Microsoft.Exchange.WebServices.Data.ExchangeService = Nothing
    Try
        Service = New Microsoft.Exchange.WebServices.Data.ExchangeService(Microsoft.Exchange.WebServices.Data.ExchangeVersion.Exchange2013)
        ' Microsoft recommends to use AutoDiscoverUrl to ensure that always the best endpoint for the given user is used.
        Service.AutodiscoverUrl(emailAddress)
        Service.UseDefaultCredentials = True


        Service.Credentials = New WebCredentials("administrator", "password", "domain.com")
    Catch ex As Microsoft.Exchange.WebServices.Data.AutodiscoverLocalException
        'Seems that user does not work on Exchange 2007 SP1 or later?
    End Try
    Return Service
End Function
Private Sub TestIt()
    Try
        'Create appointment object and set properties as required
        'System.DirectoryServices.AccountManagement.UserPrincipal.Current.EmailAddress
        Dim appt As Appointment = New Appointment(GetService("jim@domain.com"))
        appt.Subject = "Holidays"
        appt.Body = "The appointment is for holiday placeholder"
        appt.Start = Now()
        appt.End = appt.Start.AddHours(24)
        appt.IsAllDayEvent = True
        appt.LegacyFreeBusyStatus = LegacyFreeBusyStatus.OOF
        appt.Save(WellKnownFolderName.Calendar, SendInvitationsMode.SendToNone)

    Catch ex As Exception
        Dim x As String
        x = ""
    End Try
End Sub

【问题讨论】:

    标签: exchangewebservices


    【解决方案1】:

    我想也许如果我传递管理员的凭据,我就可以添加到某人的帐户中,但这也不起作用。

    一般来说,这是行不通的,因为出于隐私和安全原因,管理员帐户无权访问用户邮箱。邮箱的权限始终需要明确授予 TargetMailbox,例如 Add-MailboxPermission(或 Add-MailboxFolderPermissions)。您可以做的一件事是授予服务帐户(不要使用管理员帐户)模拟权限https://msdn.microsoft.com/en-us/library/office/dn722376(v=exchg.150).aspx,然后更改您的代码https://msdn.microsoft.com/en-us/library/office/dd633680(v=exchg.80).aspx

    您应该在代码中更改的一件事是

     appt.Save(WellKnownFolderName.Calendar, SendInvitationsMode.SendToNone)
    

    在您指定要将约会保存到的邮箱中使用 FolderId 重载将意味着无论您使用何种身份验证模式,您的代码都将更加一致(以上将始终保存到您使用的邮箱的安全主体)

    Dim SaveToFolderId As New FolderId(WellKnownFolderName.Calendar, "Mailbox@domain.com")
    appt.Save(SaveToFolderId, SendInvitationsMode.SendToNone)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多