VSTO Outlook 从具有相同域的人那里获取电子邮件地址

VSTO Outlook Getting Email Address From Someone with same Domain

在 VSTO outlook 2013 插件中,我使用此方法获取发件人的电子邮件地址:

Inspector currentObject = Globals.ThisAddIn.Application.ActiveInspector();
Object currentItem = currentObject.CurrentItem;
MailItem message = currentItem as MailItem;
string senderMailAddress = message.SenderEmailAddress;

除一种情况外,这总是很有效。我得到一个字符串,这是他们的电子邮件地址。但是,如果发件人与使用插件的人在同一个域中,我会得到一个字符串,该字符串是一堆随机字符、反斜杠和没有全部大写的域的电子邮件地址。

示例: 如果发件人是person@example.com并且使用addin的人也是whatever@example.com(同域)

我会得到类似于:7GXaaJDx5FDd\PERSON 而不是普通的电子邮件地址字符串。

我在文档的某处读到(我似乎无法再次找到它)当发件人在同一个域中时,它将 return 这个字符串而不是普通的电子邮件地址,我'我不确定为什么,但即使它们都属于同一个域,我如何才能将其放入普通电子邮件地址。还是有另一种方法可以解决这个问题,因为我不明白为什么它会这样工作。如果有人碰巧知道这背后的原因,我很想听听。但这不是我的问题。

编辑:

找到这个,https://msdn.microsoft.com/en-us/library/office/ff869674.aspx 参考MailItem.SenderEmailType属性。如果 EX 是同一组织中的交换服务器。所以我可以测试看看我是否会得到这个 werid 字符串或一个普通的电子邮件字符串(如果类型是 SMTP)。

该示例似乎回答了我的问题,但它在 VB 中,我在将它转换为 C# 时遇到了一些问题。我看到我可以从 MailItem 对象获取 AddressEntry,然后使用 x = GetExchangeUser() 然后执行 x.PrimarySMTPAdress 来获取地址。但我也不确定这是否正确。

如果任何人有关于 SenderEmailType 的任何信息并与同一域中的交换用户打交道,任何建议都会有很大帮助。

谢谢。

如果 SenderEmailType == "SMTP",只需使用 SenderEmailAddress

如果 SenderEmailType == "EX",请使用 MailItem.Sender.GetExchangeUser().PrimarySmtpAddress。准备好处理空值和异常。