我正在尝试使用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;
}
}
答案 0 :(得分:2)
仅在实际发送邮件后设置发件人相关属性。尝试在“已发送邮件”文件夹上使用Items.ItemAdd事件(使用Namespace.GetDefaultFolder检索)。
如果未设置SendUsingAccount属性,则可以假定正在使用默认帐户 - 使用Namespace.Accounts集合中的第一个帐户并检索Account.SmtpAddress属性。
答案 1 :(得分:0)
简短回答:这些项目在实际发送之前不会被填充(这个钩子就是当你要将命令发送到交换服务器发送电子邮件时)。请改为使用“SendUsingAccount”字段,因为它将包含所有信息(除了您可以在用户的邮箱/帐户对象中找到的信息)。
我很确定原因是在动态规则和策略应用于服务器端之前,这些字段没有填写。
答案 2 :(得分:0)
去寻找
MailItem.SendUsingAccount.DisplayName