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

本文关键字:那里 获取 电子邮件地址 Outlook VSTO | 更新日期: 2023-09-27 17:55:44

在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,并且使用插件的人也是 whatever@example.com(同一域)

我会得到类似的东西:7GXaaJD''3x5FDd''PERSON,而不是正常的电子邮件地址字符串。

我在文档中的某处读到(我似乎找不到它)当发件人位于同一域中时,它将返回此字符串而不是普通电子邮件地址,我不确定为什么,但是即使它们都属于同一域,我如何将其放入普通电子邮件地址。 或者有没有另一种方法来规避这个问题,因为对我来说,为什么它以这种方式工作是没有意义的。 如果有人碰巧知道这背后的原因,我很想听听。 但这不是我的问题。

编辑:

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

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

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

谢谢。

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

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

如果发件人电子邮件类型 == "EX",请使用 MailItem.Sender.GetExchangeUser().PrimarySmtpAddress 。准备好处理空值和异常。