2016-09-08 32 views
0

新しい電子メールが送信されたときにすべての電子メールアドレスを読み取る必要があるVSTOアドインを開発しています。以下は現在使用しているコードですが、ほとんどの場合は動作しません。受信者オブジェクトから電子メールアドレスを取得する

      if (addr.Type == "EX") 
          { 
           if (addr.AddressEntryUserType == OlAddressEntryUserType.olExchangeUserAddressEntry 
            || addr.AddressEntryUserType == OlAddressEntryUserType.olExchangeRemoteUserAddressEntry) 
           { 
            exch = addr.GetExchangeUser(); 
            smtpAddress = exch != null ? exch.PrimarySmtpAddress : null; 
           } 
           else if (addr.AddressEntryUserType == OlAddressEntryUserType.olOutlookContactAddressEntry) 
           { 
            cont = addr.GetContact(); 
            //returns the actual contact but it has 3 email properties (Email1Address, Email2Address, Email3Address). 
    //How to identify which email has the user selected 
           } 
          } 
          else if (addr.Type == "SMTP") 
          { 
           smtpAddress = addr.Address; 
          } 

AddressEntryUserTypeがolExchangeUserAddressEntryまたはolExchangeRemoteUserAddressEntry、コードが正常に動作している場合は。しかし、もしそれがローカル見通し連絡先(olOutlookContactAddressEntry)であるなら、私は電子メールアドレスを取得する方法についてはわかりません。 GetContactメソッドは私に実際の連絡先を与えますが、3つの電子メールがあるので、電子メールの作成中にユーザーが選択したアドレスを見つける方法はわかりません。

私はすでにこのフォーラムで議論されているように、Exchangeベースの電子メールアドレスをSMTPに変換しようとしました。しかし、パフォーマンスに大きな影響を与えています。 1つのアドレスをSMTPに変換するには約300msかかります。受信者オブジェクトから電子メールアドレスを識別する他の効率的な方法はありますか?

答えて

0

選択されたインデックスがOABエントリIDに埋め込まれています。最初の20バイトが0x00,0x00,0x00,0x00,0xFE,0x42,0xAA,0x0A,0x18,0xC7,0x1A,0x10,0xE8,0x85,0x0B,0x65,0x1C,0x24,0x00,0x00であることを確認します。 バイト25はタイプです(0x5はDL、0x4はコンタクトです)。バイト29はインデックス(連絡先のみ):0 =電子メール1、電子メール2,2 =電子メール3,3 =ビジネスファックス、4 =自宅ファックス、5 =他のファックス。

+0

EntryIDでは、この "00000000FE42AA0A18C71A ................"のような非常に長い文字列が得られます。私は実際にあなたが上で指定した16進値にそれを解読する方法を知りません。 – jokesrfunny

+0

その16進文字列では、2文字が1バイトを表します。00000000FE42AA0A18C71A = 0x00,0x00,0x00,0x00,0xFE、0x42,0xAA、0x0A、0x18,0xC7,0x1A –

関連する問題