[英]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.