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

she*_*enk 1 c# vsto outlook-addin

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

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

除了在某些情况下,这总是很好用。我得到的字符串是他们的电子邮件地址。但是,如果发件人与使用该插件的人位于同一域中,那么我会得到一个字符串,其中包含一堆随机字符,反斜杠和不带大写字母的域的电子邮件地址。

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

我会得到类似:7GXaaJD \ 3x5FDd \ PERSON的信息,而不是普通的电子邮件地址字符串。

我在文档中的某处读到(似乎无法再次找到它),当发件人位于同一域中时,它将返回此字符串而不是正常的电子邮件地址,我不确定为什么,但是如何获取即使它们都属于同一个域,也将其转换为普通的电子邮件地址。还是有另一种方法来解决此问题,因为对我而言,为什么它起作用才是有意义的。如果有人碰巧知道背后的原因,我很想听听。但这不是我的问题。

编辑:

找到了这个,https: //msdn.microsoft.com/zh-cn/library/office/ff869674.aspx引用MailItem.SenderEmailType属性。如果EX是同一组织中的交换服务器,则该选择。因此,我可以进行测试以查看是否会得到该字符串或正常的电子邮件字符串(如果类型为SMTP)。

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

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

谢谢。

Dmi*_*nko 5

如果SenderEmailType ==“ SMTP”,则只需使用SenderEmailAddress

如果SenderEmailType ==“ EX”,请使用MailItem.Sender.GetExchangeUser().PrimarySmtpAddress。准备处理null和异常。