Outlook 2013 でメール送信時に常に BCC を付加する

Windows 8 を使い始めたついでに、メーラーを Outlook 2013 にしてみた。
もっとも今までも、Outlook でカレンダー機能だけを使い続けてはいた。
だがメーラーはずっと別のものを使い続けていた。

ところで、過去のメールを参照する場面が多々あり、送受信したメールのほとんどを保存していたのだが、それが GB クラスの容量になるにつれてメーラーの反応がどうしても鈍くなってしまう。
これを嫌って、送受信するメールすべてを Gmail のアカウントに転送するようにしている。

Gmail の無料で使えるメール ボックスは最大 10GB、それに対して Outlook.com (Live メール、または Hotmail) は無制限なので、メールの保存という意味では Outlook.com の方が有利だ。
しかし、Hotmail から始まって Outlok.com に至る紆余曲折や、共通サービスであるはずの Live カレンダーが取り残されていたり、アカウント編集ページに遷移すると、元のページに戻ってこれないという UI の崩れがあって、素直に使いたいという気持ちにはなれない。
Live カレンダーについても評価はしているところだが、いろいろと微妙な動作があって、こちらも素直に使いたいと思えないのが残念だ。

受信するメールに関しては、メール サーバーで受信メールをすべて Gmail のアカウントに転送するよう設定するだけなので、何の問題もない。
それに対して、メーラーから送信するメールを Gmail のアカウントに転送する方法は一筋縄ではできない。

これまで使っていたメーラーには、ヘッダーまで記述できるテンプレートがあり、新規送信メールにも返信、転送メールにも適用することができたので、このテンプレートに Bcc ヘッダーを直接書いておけばそれだけで済んだ。
Outlook にもテンプレート機能があるが、残念なことに Bcc ヘッダーは記述できない。
メール サーバーでメーラーから送信してきたメールを転送する方法が無いわけではないが、メール サーバー側の知識が必要なことと、そのメール サーバーを利用する他のアドレスへの影響が大きすぎるため現実的とはいえない。

Outlok には VBA というマクロがあるので、これを使えば何とかなるのではないかと試行錯誤した結果が以下のコードだ。

このコードの中心になっているのは Treat_NewAndReplyAndFoward_MailItem 関数だ。
この関数の冒頭でstrAdditionalBccAddress 変数にメール アドレスを代入しているが、このアドレスを Bcc に追加している。

カレント アイテムが MailItem であるような新しいウィンドウを開くとき (Inspector インスタンスの NewInspector イベント) と、Outlook のメイン ウィンドウ (Explorer) 内に表示されているメールを選択して返信、全員に返信、転送したとき (それぞれ、SelectedMailItem インスタンスの Reply イベント、ReplyAll イベント、Forward イベント) で、この Treat_NewAndReplyAndFoward_MailItem 関数を呼ぶようにしている。 
SelectedMailItem インスタンスの各イベントは、親になっている Explorer インスタンスの InlineResponse イベントで置き換えられそうだったが、InlineResponse イベントが Outlook 2013 からの新機能だったので使わないことにした。

このコード自体はそんなに難しい構造ではない。
受信したメールを開いたときに Bcc が付加されないようにしたり、インライン返信機能で書き始めた返信メールをポップアウトしたときに Bcc が二重に付加されないようにする処理は、分かってしまえば簡単なことだが少々苦労した。
また、Outlook を一度でも最小化すると、インライン返信で Bcc が付加されなくなる症状があり、これの対処にはかなり苦労した。
Explorers (Explorer ではない) インスタンスの NewExplore イベントの部分がそれだが、コードでは大したことが無いようにしか見えないのが少々悲しい。

マクロのコードを Outlook 2013 の Visual Basic Editor で thisOutlookSession のコード エリアに記述して保存する

Outlook 2013 の Visual Basic Editor で thisOutlookSession のコード エリアに、マクロのコードを書いて保存してから、Outlook 2013 を起動しなおせばマクロが読み込まれる。
Application_Startup イベントを利用しているので、コードを保存するだけでなく必ず再起動が必要だ。

なお、ここで Outlook 2013 のセキュリティ設定が初期状態のままだと、いくら再起動してもマクロが読み込まれることはない。
マクロが読み込まれなければ、当然のことながら Bcc が付加されることもない。
Outlook 2013 の初期状態では、デジタル証明書 (=電子証明書) で署名されていないマクロはすべて無効にするようになっているのが、その理由だ。
先ほど保存したマクロに署名などした覚えはない。
このため、せっかく保存したマクロであっても、あえなく無効にされる。

これを解除するには、二つの方法がある。
一つは素直に、デジタル証明書で作成・保存したマクロに署名する方法、もう一つは Outlook 2013 のマクロ読み込みに関するセキュリティ  レベルを落とす方法だ。

きちんとするならデジタル証明書で署名すべきなのは分かっているが、とりあえずの措置としてマクロ読み込みに関するセキュリティ レベルを落としておく。
Outlook 2013 の「ファイル」タブを開き、「オプション」の「セキュリティー センター」から「セキュリティ センターの設定」を開く。
セキュリティ センターのダイアログで「マクロの設定」を開いたら、「マクロの設定」グループにある [すべてのマクロに対して警告を表示する] を選択する。
これで Outlook 2013 を起動したときに、署名されてないマクロも読み込むようになる。
なお、選択したのは [~警告を表示する] なので、Outlook 2013 の起動時のマクロが読み込まれるタイミングで毎回「Microsoft Outlook のセキュリティに関する通知」が表示され、マクロを読み込むかどうかの確認を求められるが、次の記事でマクロに署名をするまでの辛抱だ。

「Microsft Outlook のセキュリティに関する通知」ダイアログで「マクロを有効にする」ボタンをクリックする

ところでこのマクロを作る前にインターネットで検索して、Outlook でメール送信時に Bcc を付加するというマクロをいくつか見つけてはいた。
しかし、メール送信直前 (送信ボタンを押した後) に Bcc を付加するものや、マクロを手動 (コマンド ボタンをクリックするなど) で実行して新規メールや返信メールを開くときに Bcc を付加するものばかりだった。
このコードは Outlook の特別な操作や意識をすることなく、新規メールや返信メールを作成すると Bcc が入力された編集画面が表示されるようになっている。
このため、Bcc をつけるならこのコマンドというような意識をする必要もなく、また送信前に Bcc を削除して Bcc 無しで送信することもできる。

このコードにはまだバグが潜んでいる可能性がある。
このコードを使うのは自由だが、それによって生じるいかなる責も負わないことは了解してほしい。

関連記事

「Outlook 2013 でメール送信時に常に BCC を付加する」への8件のフィードバック

  1. ご教示ください。
    とても便利なマクロでありがたく使用していたのですが、
    複数のアドレスをbccに設定する必要に迫られており、
    その場合にどう対処すればよいかがわからず困っています。
    当方コードの読み方など何もわからない素人で、
    試しにセミコロンで分割しエラーが出たところでお手上げとなっています。

    対処法を教えていただけますと大変うれしいです。

    1. 55 行目で BCC のアドレスを実際に追加しています。ただしこの行だけでは単に宛先を追加しただけなので、次の行でこれを BCC に変更しています。
      つまり、55 行目から 57 行目までの 3 行を必要な数繰り返せばいいですが、55 行目でセットしているアドレス (strAdditionalBccAddress) もその数だけ増やさなければいけないし、この変数を使っている 44 行目の周辺も適切に変更しないと行けません。
      そんなに難しい修正ではありませんが、色々とあって現在は Outlook を使っていないので、複数 BCC に対応したコードの提示まではご容赦ください。

  2. このマクロ,ありがたく使わせていただいております。
    ひとつ伺いたいのですが,返信や転送時にBcc欄に設定したアドレスが2回出るのですが,これは私のほうの設定が間違っているからでしょうか。新規作成ではBcc欄に一つだけアドレスが出ます。
    送信時に重複アドレスを削除しているのか届くのは1通だけなので,実用上は問題ありません。

    1. 本マクロを使用する機会がなくなっているので、再現テストまでは実施していませんが、コードを見直した限りはご指摘の動作をすることはなさそうです。
      なお、本マクロの 44 行目で Bcc として追加するアドレスが、すでに To、Cc、Bcc に書かれていないかをチェックして、54 行目以降の Bcc 追加処理を実行するかを切り替えています。

      1. 同じくマクロを使わせていただいております。
        同様に返信時、同じアドレスが2つ出るようになったので調べてみました。

        返信、転送時に新しいウィンドウで開くと再現し、その際には「myInspectors_NewInspector」も同時にCallされているので、「Treat_NewAndReplyAndFoward_MailItem」が2回Callされます。

        またExchangeでOutlookを使っていると、34行目〜で取得しているアドレスが通常のアドレスではなくてX.500表記になるため、44行目のIF文がFalseになりますね…。

        1. 返信、転送時に新しいウィンドウで開くと mySelectedMailItem_Forward、mySelectedMailItem_Reply と一緒に myInspectors_NewInspector が呼ばれるということなら、「インライン返信機能で書き始めた返信メールをポップアウトしたときに Bcc が二重に付加されないようにする処理」でよさそうな気もしますが、そういうわけでも無いのですね。困ったものです。
          Foward や Reply のイベントと NewInspector イベントが非同期で発生して、非同期のままに Treat_NewAndReplyAndFoward_MailItem 関数が実行され、非同期のままでメールのアイテムの Recipients プロパティが更新されてしまうようです。
          と、動作は推測できましたが、以前のコメントの返信にも書いたように Outlook を使わなくなって久しいため、マクロを検証して修正する環境が無くなってしまいました。適宜各自で直していただくか、面倒と思いますが都度 重複した Bcc を削除して使ってください。宛先が重複していても一通しか届かないはずなので、そのままでも実運用面では問題無いと思います (見た目の気持ちはよくないですが)。

          あと、Exchenge の X.500 でのアドレスの表記については 23行目の追加する Bcc のアドレスを X.500 に揃えるか、39行目の既存の Recipients から取り出すアドレスに加えて、Exchange の SMTP address (済みません。プロパティ名がわかりません) を一緒に控えて、43行目でそちらと比較するように修正をお願いします。

          1. 返信いただき恐縮です。

            助言を参考にしてSMTPアドレスが取得するよう修正することで対応ができましたので、参考までに私の環境で対応できた内容をメモさせていただきます。
            (”私の環境で”ってところがポイントです…)

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

            修正内容:
            39行目
            strOriginalRecipientsAddress(i) = _
            objRecipient.AddressEntry.PropertyAccessor.GetProperty(PR_SMTP_ADDRESS)


            Const PR_SMTP_ADDRESS As String = _ “http://schemas.microsoft.com/mapi/proptag/0x39FE001E”

  3. 私も同じくこちらのマクロを大変便利に使わせて頂いております。
    既に作成者様はお使いではないとのことで大変恐縮ですが、
    他のユーザー様も御覧になられているのでこちらで相談させて頂きたいと思います。

    私の環境では、outlook.jpのアカウントでの「全員に返信」時のみBccが付加されないという事象が起きております。
    「返信」や「転送」では問題無くBccが付加され、同outlook.jpアカウントで受信しているpopアカウントのメールでは「全員に返信」時もBccが付加されます。
    原因や改善方法を御存知の方がいらっしゃいましたら、御教示頂けましたら幸いです。

    宜しくお願い致します。

コメントを残す