四十三庵

蔀の雑記帳

定期メールを日付だけ変えて自動送信する方法(Windows)

先週、仕事で定期メールの自動化をしたので、そのメモを。

たとえば毎週金曜日に会議があって、その会議の議題募集メールを水曜日に送っている、とする。

「◯月☓日(金)に会議やりますが、議題ある方は返信してください」

という風なメールを毎週送らなければならない。

別に送信フォルダから先週分のメールを編集して日付だけ変えて、
毎週送信してもいいのだが、地味にめんどくさい作業になる。
日付変えるだけで、他の文面は変わらないのだが、
自動化できるだろうと思って、ちまちまやってみたら、2〜3時間くらいで出来た。

色々方法はあるんだと思うが、僕は

vbsでバッチファイルをつくる
タスクスケジューラで水曜日に実行

という方法をとった。
環境はWindowsなので、MacLinuxは不明。

  • 自動送信メールは楽

文面・送信相手が完全に変わらないのであれば、タイムスケジューラ使って一発である。
15分もあれば設定が終わるだろう。
コントロールパネルを開くと、タスクスケジューラというのがあるので、
新しいタスクを作る、というのを選択して、メールの設定を行う。

(参考)
タスクスケジューラの基本的な使い方(Windows 7/8/8.1編)

ところが、タスクスケジューラのメールは、決まった文面しか送れない。
毎週日付を更新しなければならない場合は、タスクスケジューラの自動メール送信では足らない。

そういうわけで、日付を取得するためにスクリプトを組まなければならない。
Windowsでつくるのであれば、vbsが一番いいと思う。
別に他の言語でもやって出来ないことはないので、JavaScriptとか得意ならそれでもいいと思う。

  • サンプル
Set olkApp = CreateObject("Outlook.Application") 
Set objMsg = olkApp.CreateItem(0) 

objMsg.To = “blogger.team.ml@google.com; A/営業部;B/先輩;tanaka.masahiro@google.co.jp”  ‘宛先
objMsg.Subject = “会議やります” ‘件名
objMsg.Body = "Month(DateAdd(“d”,2,Now)) & “月” & Day(DateAdd(“d”,2,Now)) & “日”(金)に会議を行います。” & vbCr & “提案したいことがあればこのメールに返信ください。” & vbCr & “蔀”  ‘本文 
‘objMsg.Attachments.Add "c:\orders\data.csv" 添付ファイルをつけることも可能
objMsg.Send ' 送信 
Msgbox Month(DateAdd(“d”,2,Now)) & “月” & Day(DateAdd(“d”,2,Now)) & “日分のメール送信完了”

Outlookを起動するので、面倒なサーバー指定等はスキップできる
・その代わり、Outlookのメール設定が完了しているのが条件
Outlookで社内のメーリングリストや連絡帳を作ってる場合、それを宛先とすることができる。もちろんメアド直打ちもOK。
・宛先は「;」でアドレスをつなげることで、複数に送信可能
・毎週水曜日に送るメールだが、二日後の金曜日を指定するので、
Todayで指定すると二日前の日付を取得してしまう。
また、単純にDay(Today)を+2すると月またぎの時に異常値を吐くので、
「Day(DateAdd(“d”,2,Now)) 」というちょっと気持ち悪い書き方になる。
DateAdd関数で数日後の日付を返すことが出来るので、それをMonth関数やDay関数の引数としてぶちこむ。
・VBSで書くとメール文面の改行でいちいち「vbCr」を入れなければいけない。

  • 実行結果

●月●日(金)に会議を行います。
提案したいことがあればこのメールに返信ください。

というメールを、

blogger.team.ml@google.com;
A/営業部
B/先輩
tanaka.masahiro@google.co.jp

の四つの宛先に送る。

送ったあとは、

●月●日分のメール送信完了

というメッセージを表示する。

  • 終わり

MacではAutomatorという、クールなアプリが入っているようだ。
頑張ってスクリプトを書かなくても、幅広い機能を選択して、自動実行するバッチが作れるっぽい。

●参考にしたサイト
決まった時間に添付ファイル付きのメールを自動送信するためのスクリプト
(了)