我目前遇到的问题是使用VSTO为2010年创建的Outlook加载项,我开发时确定电子邮件地址是位于组织内部还是位于组织外部。
在发送电子邮件时,我正在使用以下MAPI属性来阅读收件人的电子邮件地址。其中addr是AddressEntry对象。
private void AdjustWidthComboBox(ComboBox comboBox)
{
int width = comboBox.DropDownWidth;
using (Graphics g = comboBox.CreateGraphics())
{
Font font = comboBox.Font;
int vertScrollBarWidth =
(comboBox.Items.Count > comboBox.MaxDropDownItems)
? SystemInformation.VerticalScrollBarWidth : 0;
foreach (object item in comboBox.Items)
{
string valueToMeasure = comboBox.GetItemText(item);
int newWidth = (int)g.MeasureString(valueToMeasure, font).Width + vertScrollBarWidth;
if (width < newWidth)
{
width = newWidth;
}
}
}
comboBox.DropDownWidth = width;
}
private void cbSample_DropDown(object sender, EventArgs e)
{
AdjustWidthComboBox(sender as ComboBox);
}
这适用于交换联系人和本地联系人。但是,如果您创建本地联系人并从全局通讯簿中选择电子邮件地址,则该特定联系人中不存在此MAPI属性。我只需要知道什么是最好的方法来查找联系人(电子邮件地址)是在组织内部还是在组织外部(此方法也会降低性能,组织中有人会向500多个人发送电子邮件用户一次通过上面的MAPI属性处理内部/外部电子邮件扫描需要10多分钟。我知道outlook已经在“New Email”窗口中显示与MailTip相同的信息。所以我的问题是
有没有办法点击邮件提示并从中读取信息?
如果没有最好的方式来查找联系电子邮件地址是否在组织内部/外部(考虑到性能)
答案 0 :(得分:0)
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;
}
}
见How to: Get the SMTP Address of the Sender of a Mail Item。您也可以找到有用的HowTo: Convert Exchange-based email address into SMTP email address文章。
答案 1 :(得分:0)
Mail tips can be accessed using EWS only - see https://msdn.microsoft.com/en-us/library/office/dd877060%28v=exchg.150%29.aspx?f=255&MSPPError=-2147217396
If using Redemption is an option, it exposes RDOAddressEntry.GetMailtips
method that returns RDOMailTips object.