EWS将日历添加到别人帐户

时间:2016-09-06 12:29:10

标签: exchangewebservices

我正在尝试使用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

1 个答案:

答案 0 :(得分:0)

  
    

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

  

作为一般规则,由于出于隐私和安全原因,管理员帐户对用户邮箱没有权限,因此无效。邮箱的权限始终需要明确授予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)