2016-08-31 89 views
0

現在、2010年に作成されたVSTOで作成されたOutlookアドインに関する問題は、電子メールアドレスが組織内にあるか、組織。Outlook VSTO +受信メールの受信者の電子メールアドレスを取得

電子メールが送信されている間、私は以下の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が既に "New Email"ウィンドウにMailTipと同じ情報を表示していることを知っています。私の質問は

  1. です。メールヒントをクリックしてその情報を読む方法はありますか?

  2. 連絡先メールアドレスが内部であれば何の何が組織外/見つけるための最善の方法はないでしょう場合(パフォーマンスを考慮すると)

答えて

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の記事が役立つかもしれません。

+0

ユージンありがとうございます。私は今日それを試みます。 – jokesrfunny

+0

私は同じものを実装しようとしており、私は追加の問題に直面しています。同じ[リンク](http://stackoverflow.com/questions/39391340/getting-email-address-from-a-recipient-object)について別の質問を投稿してください。 – jokesrfunny

関連する問題