[英]Get email address of a recipient in Outlook VSTO + Read MailTips
我目前在使用VSTO为2010年创建的Outlook外接程序时遇到问题,该外接程序是我开发的,用于确定电子邮件地址是位于组织内部还是位于组织外部。
发送电子邮件时,我正在使用下面的MAPI属性读取收件人的电子邮件地址。 其中addr是AddressEntry对象。
Microsoft.Office.Interop.Outlook.PropertyAccessor pa = addr.PropertyAccessor;
smtpAddress = pa.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x39FE001E").ToString();
这对于交换联系人和本地联系人都适用。 但是,如果您创建本地联系人并从“全局通讯簿”中选择电子邮件地址,则该MAPI属性在该特定联系人中不存在。 我只需要知道查找联系人(电子邮件地址)是在组织内部还是在组织外部的最佳方法(这种方法也会降低性能,我组织中的某些人会向500多人发送电子邮件用户一次,并且通过上述MAPI属性处理内部/外部电子邮件扫描需要花费超过10分钟的时间)。 我知道Outlook已在“新电子邮件”窗口上显示与邮件提示相同的信息。 所以我的问题是
有没有办法利用MailTip并从中读取信息?
如果否,那么查找联系电子邮件地址是否在组织内部/外部的最佳方法是什么(考虑绩效)
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;
}
}
请参阅如何:获取邮件项目的发件人的SMTP地址 。 此外,您可能会发现“ 方法:将基于Exchange的电子邮件地址转换为SMTP电子邮件地址”一文很有帮助。
只能使用EWS访问邮件提示-请参阅https://msdn.microsoft.com/zh-cn/library/office/dd877060%28v=exchg.150%29.aspx?f=255&MSPPError=-2147217396
如果使用“兑换”是一个选项,则它公开RDOAddressEntry 。 返回RDOMailTips对象的GetMailtips
方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.