メッセージ編集画面でMailItemオブジェクトの操作(ビジュアルデザイナ編)

リボンが登録されたメッセージ編集画面のMailItemオブジェクトを操作して宛先とかCCとか添付ファイルとか設定/削除可能です。

とっかかりは難しく感じ、よくよく真面目にMSDNとかI/F定義を読めば簡単なことだったんですよね。
VSTOの開発やってる人も少なければ、VSTOを知らない人も多数。

1.リボンを登録する

デザイナからRibbonTypeを指定
f:id:orzmakoto:20150321011654p:plain
新規メール画面にリボンの表示が追加
f:id:orzmakoto:20150321011911p:plain

2.MailItemオブジェクトの取得

Context->Inspector->CurrentItemの順にMailItemオブジェクトを取得します。

using Outlook = Microsoft.Office.Interop.Outlook;
using Office = Microsoft.Office.Core;

Outlook.MailItem mailItem = null;
private void Ribbon2_Load(object sender, RibbonUIEventArgs e)
{
  //メールオブジェクト取得
  if (mailItem == null)
  {
    var inspector = base.Context as Microsoft.Office.Interop.Outlook.Inspector;
    mailItem = inspector.CurrentItem as Outlook.MailItem;
  }
}
  • Inspector

現在のウィンドオブジェクトを示すオブジェクト。ここでは、新規メールウィンドそのものになります。

  • CurrentItem

ウィンドで操作対象となっているオブジェクト。

  • MailItem

COMオブジェクトとの互換運用インターフェイスで、メソッドとプロパティは"Microsoft.Office.Interop.Outlook._MailItem"インターフェイスに定義されていて、イベントは"Microsoft.Office.Interop.Outlook.ItemEvents_10_Event"インターフェイスに定義されています。
MailItem インターフェイス (Microsoft.Office.Interop.Outlook)

3. メールの編集

To、CC、BCCの追加削除

各プロパティにStringで設定を行います。
複数のアドレスを設定する場合には、セミコロン(;)区切りで指定を行います。

//TOの指定
mailItem.To = "メールアドレス1;メールアドレス2";
//CCの指定
mailItem.CC = "メールアドレス1;メールアドレス2";
//BCCの指定
mailItem.BCC = "メールアドレス1;メールアドレス2";

件名の設定

mailItem.Subject = "新しいメールの件名";

本文の操作

新規メールでのBodyFormatはOutlookの規定値が設定されています。
プレーンテキストの場合の改行コードは、"CRLF"でも"CR"、"LF"すべて扱いは同じでした。

//プレーンテキスト形式
mailItem.BodyFormat = Outlook.OlBodyFormat.olFormatPlain;
//本文
mailItem.Body = "こんにちわ\r\nにのみやです";

OlBodyFormat 列挙体 (Microsoft.Office.Interop.Outlook)

添付ファイルの追加

mailItem.Attachments.Add("ファイルパス");

添付ファイルの取得/保存

foreach (var attachment in mailItem.Attachments.Cast<Attachment>())
{
  //添付されいてるファイルをのパスを取得
  Console.WriteLine(attachment.FileName);
  //ローカルに保存する
  attachment.SaveAsFile("保存先");
}

添付ファイルの削除

Object型のAttachmentsをOutlook.Attachmentにキャスト後にDeleteメソッドを実行します。

//先頭の添付ファイルを削除
(mailItem.Attachments[0] as Outlook.Attachment).Delete();

4. メール動作

メール送信

mailItem.Send();

編集ウィンドを閉じる

//編集中のメールを破棄して閉じる
mailItem.Close(OlInspectorClose.olDiscard);
//編集中の下書きに保存するかのダイヤログを表示
mailItem.Close(OlInspectorClose.olPromptForSave);
//編集中のメールを下書きに保存して閉じる
mailItem.Close(OlInspectorClose.olSave);

OlInspectorClose 列挙体 (Microsoft.Office.Interop.Outlook)

メールのコピーを作成する

//別インスタンスにコピーを作成する
Outlook.MailItem copyMail = mailItem.Copy();

Outlook添付ファイルツールで、パスワード作成メールを作るときに使用しています。

編集ウィンドを表示する

MailImteオブジェクトに対する新しいInspectorを作成してウィンドを表示します。

//別インスタンスにコピーを作成する
Outlook.MailItem copyMail = mailItem.Copy();
//コピーしたMailImteを表示する
copyMail.Display();