Outlook.MailItem.Sender为null-从电子邮件地址获取

时间:2014-10-07 15:37:37

标签: c# email outlook-addin

我正在尝试使用C#创建Outlook Addin。自定义Application_ItemSend按钮的Send事件。

我无法从/发件人电子邮件地址获取。我得到的东西是null:

  • Outlook.MailItem.SenderEmailType
  • Outlook.MailItem.Sender(因为这是null无法获取PrimarySmtpAddress)
  • Outlook.MailItem.SenderEmailAddress

任何指针都有什么问题?是我的Outlook帐户配置不正确吗?

任何帮助表示赞赏。提前谢谢。

以下是我正在使用的获取地址的代码:

 private string GetSenderSMTPAddress(Outlook.MailItem mail)
    {
        string PR_SMTP_ADDRESS =   @"http://schemas.microsoft.com/mapi/proptag/0x39FE001E";
        if (mail == null)
        {
            throw new ArgumentNullException();
        }
        if (mail.SenderEmailType == "EX")
        {
            Outlook.AddressEntry sender =
                mail.Sender;
            if (sender != null)
            {
                //Now we have an AddressEntry representing the Sender
                if (sender.AddressEntryUserType ==
                    Outlook.OlAddressEntryUserType.
                    olExchangeUserAddressEntry
                    || sender.AddressEntryUserType ==
                    Outlook.OlAddressEntryUserType.
                    olExchangeRemoteUserAddressEntry)
                {
                    //Use the ExchangeUser object PrimarySMTPAddress
                    Outlook.ExchangeUser exchUser =
                        sender.GetExchangeUser();
                    if (exchUser != null)
                    {
                        return exchUser.PrimarySmtpAddress;
                    }
                    else
                    {
                        return null;
                    }
                }
                else
                {
                    return sender.PropertyAccessor.GetProperty(
                        PR_SMTP_ADDRESS) as string;
                }
            }
            else
            {
                return null;
            }
        }
        else
        {
            return mail.SenderEmailAddress;
        }
    }

3 个答案:

答案 0 :(得分:2)

仅在实际发送邮件后设置发件人相关属性。尝试在“已发送邮件”文件夹上使用Items.ItemAdd事件(使用Namespace.GetDefaultFolder检索)。

如果未设置SendUsingAccount属性,则可以假定正在使用默认帐户 - 使用Namespace.Accounts集合中的第一个帐户并检索Account.SmtpAddress属性。

答案 1 :(得分:0)

http://social.msdn.microsoft.com/Forums/vstudio/en-US/38d7b25a-8762-40c6-9e0a-903549462c0b/outlookmailitemsendername-always-null-under-outlook-2007-wvsto?forum=vsto

简短回答:这些项目在实际发送之前不会被填充(这个钩子就是当你要将命令发送到交换服务器发送电子邮件时)。请改为使用“SendUsingAccount”字段,因为它将包含所有信息(除了您可以在用户的​​邮箱/帐户对象中找到的信息)。

我很确定原因是在动态规则和策略应用于服务器端之前,这些字段没有填写。

答案 2 :(得分:0)

去寻找

 MailItem.SendUsingAccount.DisplayName