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に適用する場合は、他の方法を・・・ってそんなに古い環境を実装することは、ないと思いたいです。
今回は、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に適用する場合は、他の方法を・・・ってそんなに古い環境を実装することは、ないと思いたいです。
すみません。私も、メアドをx500形式からsmtp形式に変更したいなと思ってます。
返信削除つきましては、outlook VBAでもコーディング頂けませんでしょうか。