我正在转换一些由前员工使用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的列表。在旧代码中,这是使用的;
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
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命名空间中引用的项是;
-ExchangeServiceBinding
-ArrayOfRealItemsType
-FindItemType
-ItemQueryTraversalType
-ItemResponseShapeType
-DefaultShapeNamesType
-DistinguishedFolderIdType
-DistinguishedFolderIdNameType
-FindItemResponseType
-ResponseMessageType()
-FindItemResponseMessageType
-ResponseClassType有没有人建议使用新的API代码来实现这个结果?
发布于 2014-04-17 14:27:54
在早期应用程序中使用的API基于从EWS生成的代理。您所指的新API是EWS托管API,它是EWS的包装器,是使用EWS的推荐方法。
要回答关于获取收件箱中每条消息的消息id的第一个问题,这里有一个指向“如何”主题的链接,该主题将帮助您开始工作。它谈到了分批获取物品,因为如果您和我一样,那么在任何给定的时间收件箱中都会有很多消息。您可以设置返回的项数,但示例显示一次只执行五项。我知道它是用C#编写的,但是它应该可以很容易地转换成VB。
示例:使用EWS托管API执行分页搜索
有关名称空间中缺少的项。它们实际上并没有丢失,而是在开发托管API期间重命名的。下面是与您在旧代码中使用的内容相匹配的新主题的列表(带有链接):
在Exchange Online和Exchange2013开发文档中,开发用于Exchange的web服务客户端节点中有许多“如何”主题。这些关注重点是EWS托管API,并给出了使用SOAP的EWS示例。
https://stackoverflow.com/questions/23115524
复制相似问题