【问题标题】:How do I get the real email address with Exchange web services?如何使用 Exchange Web 服务获取真实的电子邮件地址?
【发布时间】:2014-04-07 06:36:09
【问题描述】:

我正在尝试使用 Exchange 网络服务获取电子邮件发件人的真实电子邮件地址,但是 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)

然后我想引用mailItem.Sender.Address,它包含上面提到的字符串而不是abc@whatever.com

一些示例代码(最好是VB.NET)将不胜感激,因为我很难弄清楚这些 Exchange Web 服务是如何工作的。

【问题讨论】:

    标签: vb.net exchangewebservices


    【解决方案1】:

    我想回答我自己的问题:

    Dim instances As NameResolutionCollection
    instances = service.ResolveName(mailItem.Sender.Address)
    If instances.Count > 0 Then
        ResolveName = instances(0).Mailbox.Address
    Else
        ResolveName = ""
    End If
    

    ... 其中“service”是一个 ExchangeService 对象,而 mailItem.Sender.Address 包含一个 X500 地址(我认为这就是它的名称)。 mailItem.Sender.Address 将包含一个 X500 类型的地址,如果发件人是 Jan Doggen 指出的组织的实习生。


    我可能会建议更改为以下内容:

    If instances.Count > 0 Then
        ResolveName = instances(0).Mailbox.Address
    Else
        ResolveName = i.Sender.Address
    End If
    

    通过这样做,如果电子邮件来自外部来源,ResolveName 将保留原始发件人电子邮件地址。

    【讨论】:

      【解决方案2】:

      引用How to: Get the SMTP Address of the Sender of a Mail Item:

      “要确定收到的邮件项目的 SMTP 地址,请使用 MailItem 对象的 SenderEmailAddress 属性。但是,如果发件人在您的组织内部,则 SenderEmailAddress 不会返回 SMTP 地址,您必须使用 PropertyAccessor 对象返回发件人的 SMTP 地址。”

      该页面提供了一个 C# 示例,您应该能够将其转换为 VB.Net:

      private string GetSenderSMTPAddress(Outlook.MailItem mail)
      {
          string PR_SMTP_ADDRESS =
              @"http://schemas.microsoft.com/mapi/proptag/0x39FE001E";
          if (mail == null)
          {
              throw new ArgumentNullException();
          }
          if (mail.SenderEmailType == "EX")
          {
              Outlook.AddressEntry sender =
                  mail.Sender;
              if (sender != null)
              {
                  //Now we have an AddressEntry representing the Sender
                  if (sender.AddressEntryUserType ==
                      Outlook.OlAddressEntryUserType.
                      olExchangeUserAddressEntry
                      || sender.AddressEntryUserType ==
                      Outlook.OlAddressEntryUserType.
                      olExchangeRemoteUserAddressEntry)
                  {
                      //Use the ExchangeUser object PrimarySMTPAddress
                      Outlook.ExchangeUser exchUser =
                          sender.GetExchangeUser();
                      if (exchUser != null)
                      {
                          return exchUser.PrimarySmtpAddress;
                      }
                      else
                      {
                          return null;
                      }
                  }
                  else
                  {
                      return sender.PropertyAccessor.GetProperty(
                          PR_SMTP_ADDRESS) as string;
                  }
              }
              else
              {
                  return null;
              }
          }
          else
          {
              return mail.SenderEmailAddress;
          }
      }
      

      【讨论】:

      • 感谢您的回复,但这似乎不适用于 Exchange Web 服务,我的邮件项目没有 SenderEmailType 属性。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-27
      • 2012-03-31
      • 1970-01-01
      • 2011-05-07
      • 2012-07-13
      • 2018-04-16
      • 1970-01-01
      相关资源
      最近更新 更多