C# VSTO Outlook从具有相同域的用户处获取电子邮件地址
在VSTO outlook 2013中,我使用此方法获取发件人的电子邮件地址:C# VSTO Outlook从具有相同域的用户处获取电子邮件地址,c#,vsto,outlook-addin,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.SenderEm
Inspector currentObject = Globals.ThisAddIn.Application.ActiveInspector();
Object currentItem = currentObject.CurrentItem;
MailItem message = currentItem as MailItem;
string senderMailAddress = message.SenderEmailAddress;
这总是很有效,除了一种情况。我得到一个字符串,这是他们的电子邮件地址。但是,如果发送者与使用addin的人在同一个域中,我会得到一个字符串,它是一组随机字符、反斜杠和电子邮件地址,而不包括所有大写的域
例如:
如果发送者是person@example.com使用addin的人也是whatever@example.com(同一领域)
我将得到类似于:7GXaaJD\3x5FDd\PERSON的内容,而不是普通的电子邮件地址字符串
我在文档的某个地方读到(我似乎再也找不到了)当发件人在同一个域中时,它将返回此字符串而不是正常的电子邮件地址,我不知道为什么,但即使他们都属于同一个域,我如何才能将其输入到正常的电子邮件地址中。或者有没有其他方法可以绕过这个问题,因为我不明白为什么它会这样做。如果有人碰巧知道这背后的原因,我很想听听。但这不是我的问题
编辑:
找到这个,
引用MailItem.SenderEmailType属性。如果EX是同一组织中的exchange server,则为。因此,我可以测试,看看我是否会得到这个werid字符串或正常的电子邮件字符串(如果类型是SMTP)
这个例子似乎回答了我的问题,但它是在VB中,我在将它转换为C#时遇到了一些问题。我发现我可以从MailItem对象中获取AddressEntry,然后使用x=GetExchangeUser()
然后执行x.primarySmtpAddress
来获取地址。但我也不确定这是否正确
如果任何人有关于SenderEmailType和与同一域中的exchange用户打交道的任何信息,任何建议都会有很大帮助
谢谢。如果SenderEmailType==“SMTP”,只需使用SenderEmailAddress
如果SenderEmailType==“EX”,请使用
MailItem.Sender.GetExchangeUser().PrimarySmtpAddress
。准备好处理空值和异常。谢谢,所以我说的是正确的。如果这样做,我将获得正确的emailaddress字符串?不是那么奇怪吗?是的,你可以先在OutlookSpy中测试它-单击项,选择发件人属性,单击浏览,转到函数选项卡,选择GetExchangeUser,单击调用。我不知道你说的Outlook Spy是什么意思,那是什么?我只是想在代码中实现它。使用我以前的方法,但检查SenderEmailType。它是一个用于在Outlook中漫游的工具-它将自身安装为COM加载项,并在Outlook中添加一个功能区。