リボンが登録されたメッセージ編集画面のMailItemオブジェクトを操作して宛先とかCCとか添付ファイルとか設定/削除可能です。
とっかかりは難しく感じ、よくよく真面目にMSDNとかI/F定義を読めば簡単なことだったんですよね。
VSTOの開発やってる人も少なければ、VSTOを知らない人も多数。
1.リボンを登録する
デザイナからRibbonTypeを指定
新規メール画面にリボンの表示が追加
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にのみやです";
添付ファイルの追加
mailItem.Attachments.Add("ファイルパス");
添付ファイルの取得/保存
foreach (var attachment in mailItem.Attachments.Cast<Attachment>()) { //添付されいてるファイルをのパスを取得 Console.WriteLine(attachment.FileName); //ローカルに保存する attachment.SaveAsFile("保存先"); }
4. メール動作
メール送信
mailItem.Send();
編集ウィンドを閉じる
//編集中のメールを破棄して閉じる mailItem.Close(OlInspectorClose.olDiscard); //編集中の下書きに保存するかのダイヤログを表示 mailItem.Close(OlInspectorClose.olPromptForSave); //編集中のメールを下書きに保存して閉じる mailItem.Close(OlInspectorClose.olSave);
メールのコピーを作成する
//別インスタンスにコピーを作成する Outlook.MailItem copyMail = mailItem.Copy();
編集ウィンドを表示する
MailImteオブジェクトに対する新しいInspectorを作成してウィンドを表示します。
//別インスタンスにコピーを作成する Outlook.MailItem copyMail = mailItem.Copy(); //コピーしたMailImteを表示する copyMail.Display();