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

时间:2015-06-13 01:55:12

标签: 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;

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

实施例: 如果发件人是person@example.com,使用addin的人也是whatever@example.com(同一域名)

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

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

编辑:

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

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

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

感谢。

1 个答案:

答案 0 :(得分:4)

如果SenderEmailType ==“SMTP”,请使用SenderEmailAddress

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