2012-08-14 73 views
3

我试图让SMTP地址收到一封电子邮件,我写了一个代码以避免获得x.500地址。我通过访问PropertyAccessor.GetProperty(PR_SMTP_ADDRESS)获取SMTP地址,其中PR_SMTP_ADDRESS = @"http://schemas.microsoft.com/mapi/proptag/0x39FE001E";Outlook加载项属性错误

然而,这适用于一些笔记本电脑,而一些给一个错误,说

“的属性http://schemas.microsoft.com/mapi/proptag/0x39FE001E不明或无法找到。”

任何想法如何解决这个问题?

回答

2

如果你想SMTP地址,您可以创建从X.500的Outlook.Recipient和解决Recipient.AddressEntryOutlook.ExchangeUser

string address = string.Empty; 
Outlook.Recipient recipient = mailItem.Application.Session.CreateRecipient(mailItem.SenderEmailAddress); 
if (recipient != null && recipient.Resolve() && recipient.AddressEntry != null) 
{ 
    Outlook.ExchangeUser exUser = recipient.AddressEntry.GetExchangeUser(); 
    if (exUser != null && !string.IsNullOrEmpty(exUser.PrimarySmtpAddress)) 
     address = exUser.PrimarySmtpAddress; 
} 

你与PR_SMTP_ADDRESS接收所述错误指示MIME属性不存在于所述邮件消息属性和需要的替代方法来确定发送者SMTP地址。您不能假定MIME属性将始终存在。

+0

感谢SilverNinja,我应该访问哪些属性以获取if语句中每个其他场景的电子邮件地址。 – amey1908 2012-08-14 19:29:18

+0

我使用了上面的代码,它适用于某些Outlook帐户,但不适用于其他帐户。对于帐户它不起作用,recipient.resolve()来作为false。不知道为什么。我检查了电子邮件地址,并以x.500格式显示,并按照上面的代码将其转换为primarysmtpaddress,但在recipient.resolve()时失败。 – amey1908 2012-08-14 19:52:21

+0

**检查名称**是否适用于用户名? ['Recipient.Resolve'](http://msdn.microsoft.com/en-us/librarY/microsoft.office.interop.outlook.recipient.resolve)只是针对用户地址簿解析收件人。如果无法解析,则不会找到“AddressEntry”。作为回退,您可以检查属性['PidLidInternetAccountName'](http://msdn.microsoft.com/zh-cn/library/ee202850%28v=exchg.80%29.aspx)是否存在。 – SliverNinja 2012-08-14 20:31:11