VBAより一覧データをCSS装飾してOutlookで送信

以前、Google Apps Scriptでレスポンシブメールを送るというものを実装したことがあります。CSSで綺麗な装飾をしたメールってだけではなく、PC用とスマフォ用とでメディアクエリも利用して、レスポンシブなメールを送るスクリプトです。自分が手掛けた社内向けの通知メールにはすでに実装済みで、リンクをクリックするとPC用だと承認フォームが開き、スマフォ用だとダイレクトにターゲットになる承認レコードの画面が出るといったように、URLも変えて送ってます。

さてこのメールですが、手動で作るのは大変です。ましてや、Outlookで作るとなると単純なメールであっても時間が掛かってしまいます。今回はVBAにてExcel上の受注データを予め設定しておいた送信先に、CSSで装飾をしてOutlook2016にて送り付ける小ネタプログラムを作ってみました。

今回使用するファイル

※あらかじめ、シートのメール設定に於いて、Subject, Body, Footer, Creditにそれぞれメールタイトル、本文上部、フッター、署名を入力しておく必要があります。セル内改行はそのまま<br>タグに置き換わりますので、見た目の通りに反映されるようになっています。また、事前にリボンにあるアプリケーション設定から、送信先とCCのメアドを登録しておく必要があります。

ソースコード

メアド登録用フォームのコード

今回の送信プログラムは、ToとCCの二つを登録して、そのメアドを元に自動送信を実現しています。データはレジストリに登録されるので、ファイルはユーザ事に設定が必要になります。

  • 起動時にレジストリの値を呼び出すコードが入っています。
  • 登録時には同じレジストリエントリに保存されます。

図:送信先メアド登録フォーム

メール送信メインコード

  • Google Apps Scriptの時と同じようにCSSはセルに保存したものを呼び出し、<head>と<style>タグによって、メール本文冒頭に加えています。
  • メール本文上部およびフッター、署名は改行コード(vbLf)を<br>タグにリプレースしています。
  • 時刻データはFormat関数によって、成形してあげないとシリアル値になっているので、具合が悪いので注意。
  • メール送信メソッドでは、BodyFormatolFormatHTMLとし、BodyではなくHTMLBodyを利用する点に注意。テキストにすると、CSSの効かないメールになってしまいます。
  • 今回のCSSは前回同様こちらのサイトからお借りしています。
  • 予約データをTableでくみ上げてFormbodyとしています。
  • Outlook自体はバックグラウンドで動作するので本VBAを動かしても表示はされません。
  • 昔のようなメールサーバに接続して送信させているわけではないので、余計な接続情報等不要でメールが送れるのが便利ですね。
  • Set objOutlook = New Outlook.Applicationとしているので、Microsoft Outlook 16.0 Object Library他の参照設定が必要です。2016より前のOutlookを使ってる場合には、以下のコードに置き換えてください。

署名を添付する

Outlookを操作して新規メールを送る場合、設定済みのデフォルト署名がそのままでは挿入されません。また、署名データを取得するメソッドもないので、困ったものです。今回はExcelのセルに署名を記述してもらい、それを利用するようにしていますが、作成した署名自体は以下のディレクトリのテキストファイルに書かれています。

C:\Users\ユーザ名\AppData\Roaming\Microsoft\Signatures\xxxxx.txt

自分の場合、自分の名前を付けたtxtファイルがここに存在しており、これを読み込めるならば、プログラム側で使用署名を流用可能です。

実行結果

リボンよりサマリーメール送信を実行すると、送られます。GMailはもとよりOutlookでも、レスポンシブメールは対応済みなので、綺麗にCSSで装飾されたHTMLメールが送信されるはずです。CSSが使えるので、きめ細かな文字の装飾や、今回は実装しませんでしたが、メディアクエリを使ったPC/スマフォ用に表示を分けたメールの送信も可能でしょう。また、この方法は、Outlook自体を操作しているので、送信済みトレイに残るのも利点です。

図:個別に勤怠データを連続送信する時にも使えそうです。

関連リンク

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)