首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Exchange服务从Exchange Online 2013收件箱中获取消息ID列表

如何使用Exchange服务从Exchange Online 2013收件箱中获取消息ID列表
EN

Stack Overflow用户
提问于 2014-04-16 16:51:50
回答 1查看 3.5K关注 0票数 0

我正在转换一些由前员工使用Exchange 2007中的编写的代码。编写时,我们有一个前提下的Exchange2007Server.现在,我们已经将电子邮件转移到Exchange Online,我希望使用for Exchange 2013 (API 2.1)。

旧代码使用了ExchangeWebServices命名空间,我希望在新的v2.1api中使用Microsoft.Exchange.Webservices命名空间。

旧ExchangeWebServices命名空间中的引用都不是在新Microsoft.Exchange.Webservices中定义的,因此我需要重构代码以匹配新Microsoft.Exchange.Webservices中的等效项。

我需要做的一件事是为特定的用户帐户创建收件箱中所有邮件in的列表。在旧代码中,这是使用的;

代码语言:javascript
复制
Private ExchangeBinding As New ExchangeServiceBinding
Public Sub New(ByVal UserName As String, ByVal Password As String, ByVal Domain As String, ByVal URL As String)
    ExchangeBinding.Credentials = New NetworkCredential(UserName, Password, Domain)
    ExchangeBinding.Url = URL
End Sub

公共函数GetInboxMessageID()为ArrayOfRealItemsType

代码语言:javascript
复制
    Dim returnInboxMessageIds As ArrayOfRealItemsType = Nothing
    Dim errMsg As String = String.Empty

    'Create the request and specify the travesal type.
    Dim FindItemRequest As FindItemType
    FindItemRequest = New FindItemType
    FindItemRequest.Traversal = ItemQueryTraversalType.Shallow

    'Define which item properties are returned in the response.
    Dim ItemProperties As ItemResponseShapeType
    ItemProperties = New ItemResponseShapeType
    ItemProperties.BaseShape = DefaultShapeNamesType.IdOnly

    'Add properties shape to the request.
    FindItemRequest.ItemShape = ItemProperties

    'Identify which folders to search to find items.
    Dim FolderIDArray(0) As DistinguishedFolderIdType
    FolderIDArray(0) = New DistinguishedFolderIdType
    FolderIDArray(0).Id = DistinguishedFolderIdNameType.inbox

    'Add folders to the request.
    FindItemRequest.ParentFolderIds = FolderIDArray

    Try
        'Send the request and get the response.
        Dim FindItemResponse As FindItemResponseType
        FindItemResponse = ExchangeBinding.FindItem(FindItemRequest)

        'Get the response messages.
        Dim ResponseMessage As ResponseMessageType()
        ResponseMessage = FindItemResponse.ResponseMessages.Items

        Dim FindItemResponseMessage As FindItemResponseMessageType

        If ResponseMessage(0).ResponseClass = ResponseClassType.Success Then

            FindItemResponseMessage = ResponseMessage(0)
            returnInboxMessageIds = FindItemResponseMessage.RootFolder.Item

        Else

            '' Server error
            Dim responseClassStr As String = [Enum].GetName(GetType(ExchangeWebServices.ResponseClassType), ResponseMessage(0).ResponseClass).ToString
            Dim responseCodeStr As String = [Enum].GetName(GetType(ExchangeWebServices.ResponseCodeType), ResponseMessage(0).ResponseCode).ToString
            Dim messageTextStr As String = ResponseMessage(0).MessageText.ToString
            Dim thisErrMsg As String = String.Format("ExchangeWebServices Inbox Error: {0}, {1}, {2}", responseClassStr, responseCodeStr, messageTextStr)
            errMsg = If(errMsg.Equals(String.Empty), String.Empty, errMsg & "; ") & thisErrMsg

        End If

    Catch ex As Exception
        errMsg = If(errMsg.Equals(String.Empty), String.Empty, errMsg & "; ") & ex.Message
    End Try

    If Not errMsg.Equals(String.Empty) Then
        returnInboxMessageIds = Nothing
        Throw New System.Exception(errMsg)
    End If

    Return returnInboxMessageIds

End Function

旧API命名空间中没有在新API命名空间中引用的项是;

代码语言:javascript
复制
-ExchangeServiceBinding
-ArrayOfRealItemsType
-FindItemType
-ItemQueryTraversalType
-ItemResponseShapeType
-DefaultShapeNamesType
-DistinguishedFolderIdType
-DistinguishedFolderIdNameType
-FindItemResponseType
-ResponseMessageType()
-FindItemResponseMessageType
-ResponseClassType

有没有人建议使用新的API代码来实现这个结果?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-17 14:27:54

在早期应用程序中使用的API基于从EWS生成的代理。您所指的新API是EWS托管API,它是EWS的包装器,是使用EWS的推荐方法。

要回答关于获取收件箱中每条消息的消息id的第一个问题,这里有一个指向“如何”主题的链接,该主题将帮助您开始工作。它谈到了分批获取物品,因为如果您和我一样,那么在任何给定的时间收件箱中都会有很多消息。您可以设置返回的项数,但示例显示一次只执行五项。我知道它是用C#编写的,但是它应该可以很容易地转换成VB。

示例:使用EWS托管API执行分页搜索

有关名称空间中缺少的项。它们实际上并没有丢失,而是在开发托管API期间重命名的。下面是与您在旧代码中使用的内容相匹配的新主题的列表(带有链接):

  • ExchangeServiceBinding => ExchangeService类
  • ArrayOfRealItemsType => ItemCollection类
  • FindItemType => ExchangeService.FindItems法
  • ItemQueryTraversalType => ItemTraversal枚举
  • ItemResponseShapeType => PropertySet类
  • DefaultShapeNamesType => BasePropertySet枚举
  • DistinguishedFolderIdType => FolderId类
  • DistinguishedFolderIdNameType => WellKnownFolderName枚举
  • FindItemResponseType => FindItemsResults类
  • ResponseMessageType => ServiceResponse类
  • FindItemResponseMessageType => FindItemsResults类
  • ResponseClassType => ServiceResult枚举

Exchange Online和Exchange2013开发文档中,开发用于Exchange的web服务客户端节点中有许多“如何”主题。这些关注重点是EWS托管API,并给出了使用SOAP的EWS示例。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23115524

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档