C# Outlook加载项属性错误

C# Outlook加载项属性错误,c#,outlook,vsto,outlook-addin,C#,Outlook,Vsto,Outlook Addin,我正在尝试获取电子邮件的SMTP地址,我已经编写了一个代码来避免获取x.500地址。我通过访问PropertyAccessor.GetProperty(PR_-SMTP_-address)wherePR_-SMTP_-address=@获取SMTP地址http://schemas.microsoft.com/mapi/proptag/0x39FE001E“ 然而,这在一些笔记本电脑上是有效的,而有些电脑给出了一个错误的说法 “属性未知或找不到。” 知道如何解决此问题吗?如果需要SMTP地址,可以

我正在尝试获取电子邮件的SMTP地址,我已经编写了一个代码来避免获取x.500地址。我通过访问
PropertyAccessor.GetProperty(PR_-SMTP_-address)
where
PR_-SMTP_-address=@获取SMTP地址http://schemas.microsoft.com/mapi/proptag/0x39FE001E“

然而,这在一些笔记本电脑上是有效的,而有些电脑给出了一个错误的说法

“属性未知或找不到。”


知道如何解决此问题吗?

如果需要SMTP地址,可以从X.500创建并将解析为


使用
PR_SMTP_ADDRESS
收到的错误表明MIME属性不在邮件属性中,您需要其他方法来确定发件人的SMTP地址。您不能假设MIME属性始终存在。

谢谢SilverNinja,我应该访问什么属性才能获取if语句中其他每个场景的电子邮件地址。我使用了上述代码,它适用于某些outlook帐户,但不适用于其他帐户。对于不起作用的帐户,recipient.resolve()为false。不知道为什么。我检查了电子邮件地址,它以x.500格式显示,我按照上面的代码将其转换为primarysmtpaddress,但在recipient.resolve()时失败。检查名称是否适用于用户名?仅根据用户通讯簿解析收件人。如果无法解析,将找不到
AddressEntry
。作为回退,您可以检查该属性是否存在。当您说作为回退时,我是否应该在上面代码中的外部if的else语句中检查PidLidInternetAccountName属性?如果这是真的,我应该如何获得primarysmtpaddress?和上面解释的一样?我现在明白了,当你说撤退的时候。因此,如果PidLidInternetAccountName指定了发送电子邮件的用户可见电子邮件帐户名,那么我们为什么不使用此属性,而不使用上面提到的代码呢?
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;
}