Geo*_*rge 3 vb.net exchangewebservices
我正在尝试使用 Exchange Web 服务获取电子邮件发件人的真实电子邮件地址,但是其中mailitem.Sender.Address
包含以下内容 -
/O=EXCHANGELABS/OU=EXCHANGE ADMINISTRATIVE GROUP (...........)/CN=RECIPIENTS/CN=...........-.....
我怎样才能找到这封电子邮件发件人的真实电子邮件地址?
我的代码:
Dim sf As SearchFilter = New SearchFilter.SearchFilterCollection(LogicalOperator.And, New SearchFilter.IsEqualTo(EmailMessageSchema.IsRead, False))
Dim findResults As FindItemsResults(Of Item) = service.FindItems(WellKnownFolderName.Inbox, sf, New ItemView(128))
Dim items As ServiceResponseCollection(Of GetItemResponse) = service.BindToItems(findResults.Select(Function(item) item.Id), New PropertySet(BasePropertySet.FirstClassProperties, EmailMessageSchema.From, EmailMessageSchema.ToRecipients))
For Each itItem As Microsoft.Exchange.WebServices.Data.Item In findResults.Items
If TypeOf itItem Is EmailMessage Then
Dim mailItem As EmailMessage = DirectCast(itItem, EmailMessage)
Run Code Online (Sandbox Code Playgroud)
然后我想参考mailItem.Sender.Address
,其中包含上述字符串而不是abc@whatever.com
一些示例代码(最好在 中VB.NET
)将不胜感激,因为我很难弄清楚这些 Exchange Web 服务是如何工作的。
我想回答我自己的问题:
Dim instances As NameResolutionCollection
instances = service.ResolveName(mailItem.Sender.Address)
If instances.Count > 0 Then
ResolveName = instances(0).Mailbox.Address
Else
ResolveName = ""
End If
Run Code Online (Sandbox Code Playgroud)
...其中“服务”是一个 ExchangeService 对象,而 mailItem.Sender.Address 包含一个 X500 地址(我认为这就是它的名字)。如 Jan Doggen 所指出的,如果发件人是您组织的实习生,mailItem.Sender.Address 将包含一个 X500 类型的地址。
我可能会建议更改为以下内容:
If instances.Count > 0 Then
ResolveName = instances(0).Mailbox.Address
Else
ResolveName = i.Sender.Address
End If
Run Code Online (Sandbox Code Playgroud)
通过这样做,如果电子邮件来自外部来源,则 ResolveName 将保留原始发件人电子邮件地址。