2017年7月15日土曜日

VSTOでOutlook アドイン 送信先(受信者リスト)をSMTPアドレス形式で取得する

VSTOは、Officeのアドインを開発するツールでVisual Studioで作成することができます。

今回は、Outlookのアドインを作ろうとしており、送信時に作動するツールを作ろうと思います。

送信メールのToのリストを取得しようとしたときに、いくつか取得する方法があるのですが、一番楽なのは、Outlook.MailItem.Recipients.Addressを取ってくる方法です。
しかしながら、これでは、Exchange(Office365含む)がメールサーバーの場合、Outlook.MailItem.Recipients.Addressの中の文字列が、X500という形式になってしまい、

o=ExchangeLabs/ou=Exchange Administrative Group ・・・・

というものになります。
これでは使い物にならないので、ちゃんとSMTPアドレスの形式で取得したいところです。

調べるのにちょっと苦労しましたが、ちゃんとサンプルコードがありました。

https://msdn.microsoft.com/ja-jp/library/office/ff868695.aspx

これを見て、以下の関数を作成してみました。

        private string GetSmtpAddress(Outlook.Recipient recip)
        {
            const string PR_SMTP_ADDRESS = "http://schemas.microsoft.com/mapi/proptag/0x39FE001E";

            Outlook.PropertyAccessor pa = recip.PropertyAccessor;
            string smtpAddress = pa.GetProperty(PR_SMTP_ADDRESS).ToString();
            Debug.WriteLine(recip.Name + " SMTP=" + smtpAddress);

            return smtpAddress;
        }

これで、私の環境では、無事にSMTP形式のメールアドレスが取得できるようになりました。

http://schemas.microsoft.com/mapi/proptag/0x39FE001E というMAPIは、SMTP受信者を指示しているそうで、これが要です。
 Outlook 2007以降限定だそうなので、古いOutlookに適用する場合は、他の方法を・・・ってそんなに古い環境を実装することは、ないと思いたいです。

0 件のコメント:

コメントを投稿