【问题标题】:How to get a folder's policy using C# and Exchange Web Services Managed API?如何使用 C# 和 Exchange Web 服务托管 API 获取文件夹的策略?
【发布时间】:2019-03-24 15:43:49
【问题描述】:

我正在尝试使用 Exchange Web 服务托管 API 和 C# 在 Exchange 服务器上远程组织电子邮件。在给定帐户中,某些文件夹(例如收件箱)分配了默认策略(即“分配策略”),该策略将在 30 天后使项目过期。帐户中的其他文件夹分配了一个默认策略,该策略永远不会使项目过期。

在处理项目之前,我需要了解文件夹级别的策略...这可能吗?到目前为止,我在文档中找不到任何内容。

另外,如果有人知道如何在 VBA 中执行相同的任务,我相信它也会在某个时候派上用场。

谢谢。

【问题讨论】:

    标签: c# vba outlook exchangewebservices ews-managed-api


    【解决方案1】:

    您可以从 PolicyTag 属性 https://msdn.microsoft.com/EN-US/library/microsoft.exchange.webservices.data.folder.policytag(v=exchg.80).aspx 获取策略,这将为您提供可以使用 Exchange 服务类 https://docs.microsoft.com/en-us/dotnet/api/microsoft.exchange.webservices.data.exchangeservice.getuserretentionpolicytags?view=exchange-ews-api 上的 GetRetentionTags 方法解析的 GUID

    您可以在 VBA 中通过发布 RAW SOAP 并处理响应来做同样的事情,这只是一个耗时的过程,例如在 VBA 中发送消息的非常简单的示例

    Sub SendMessage(Subject As String, Recipient As String, Body As String, User As String, Password As String)
       Dim sReq As String
       Dim xmlMethod As String
       Dim XMLreq As New MSXML2.XMLHTTP60
       Dim EWSEndPoint As String
       EWSEndPoint = "https://outlook.office365.com/EWS/Exchange.asmx"
       sReq = "<?xml version=""1.0"" encoding=""UTF-8""?>" & vbCrLf
       sReq = sReq & "<soap:Envelope xmlns:soap=""http://schemas.xmlsoap.org/soap/envelope/"" xmlns:t=""http://schemas.microsoft.com/exchange/services/2006/types"">" & vbCrLf
       sReq = sReq & "<soap:Header>" & vbCrLf
       sReq = sReq & "<t:RequestServerVersion Version=""Exchange2010""/>" & vbCrLf
       sReq = sReq & "</soap:Header>" & vbCrLf
       sReq = sReq & "<soap:Body>" & vbCrLf
       sReq = sReq & "<CreateItem MessageDisposition=""SendAndSaveCopy"" xmlns=""http://schemas.microsoft.com/exchange/services/2006/messages"">" & vbCrLf
       sReq = sReq & "<SavedItemFolderId>" & vbCrLf
       sReq = sReq & "<t:DistinguishedFolderId Id=""sentitems"" />" & vbCrLf
       sReq = sReq & "</SavedItemFolderId>" & vbCrLf
       sReq = sReq & "<Items>" & vbCrLf
       sReq = sReq & "<t:Message>" & vbCrLf
       sReq = sReq & "<t:ItemClass>IPM.Note</t:ItemClass>" & vbCrLf
       sReq = sReq & "<t:Subject>" & Subject & "</t:Subject>" & vbCrLf
       sReq = sReq & "<t:Body BodyType=""Text"">" & Body & "</t:Body>" & vbCrLf
       sReq = sReq & "<t:ToRecipients>" & vbCrLf
       sReq = sReq & "  <t:Mailbox>" & vbCrLf
       sReq = sReq & "       <t:EmailAddress>" & Recipient & "</t:EmailAddress>" & vbCrLf
       sReq = sReq & "  </t:Mailbox>" & vbCrLf
       sReq = sReq & "</t:ToRecipients>" & vbCrLf
       sReq = sReq & "</t:Message>" & vbCrLf
       sReq = sReq & "</Items>" & vbCrLf
       sReq = sReq & "</CreateItem>" & vbCrLf
       sReq = sReq & "</soap:Body>" & vbCrLf
       sReq = sReq & "</soap:Envelope>" & vbCrLf
       xmlMethod = "POST"
       XMLreq.Open xmlMethod, EWSEndPoint, False, User, Password
       XMLreq.setRequestHeader "Content-Type", "text/xml; charset=""UTF-8"""
       XMLreq.setRequestHeader "Translate", "F"
       XMLreq.setRequestHeader "User-Agent", "VBAEWSSender"
       XMLreq.send sReq
       If XMLreq.Status = 200 Then
            ' Message Sent okay
        Else
            ' Something went Wrong
       End If
    End Sub

    【讨论】:

    • 作为 Glen 的回复,您可以从 PolicyTag 属性中获取策略:docs.microsoft.com/en-us/exchange/client-developer/…
    • 所以,只是为了确认一下,该文件夹将具有 PolicyTag 属性,对吗?假设文件夹具有 PolicyTag 属性,是否可以将其设置为不同的值,以便文件夹中的所有文件/项目都继承相同的策略?例如,该文件夹的策略是在 30 天后删除文件夹中的所有文件/项目。我将其更改为永不删除,然后将文件/项目移动到文件夹中,这样所有文件/项目现在将永远不会被删除(除非文件夹策略或单个文件/项目策略发生更改)。
    • 它取决于文件夹,对于用户创建的文件夹,您应该能够获取/设置 FolderPolicy 标签。对于默认文件夹,例如收件箱、已发送邮件等,如果管理员通过策略应用了默认策略,则您无法覆盖此设置。例如,如果您可以通过 Outlook 设置策略,那么您可以通过 EWS 进行设置,如果您不能通过 Outlook/OWA,那么您也将无法通过 EWS 进行设置。
    猜你喜欢
    • 2011-02-03
    • 1970-01-01
    • 2020-09-19
    • 2011-06-12
    • 2012-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-13
    相关资源
    最近更新 更多