添付ファイル付きメールを自動生成するスクリプトを作成しました。
使用シーンは、週報や日報のような特定の相手に対して定期的に添付ファイル付きメールを送信するシーンを想定して作成しました。
1.スクリプト処理構成
2.スクリプト実行方法
3.想定使用方法
4.スクリプト詳細
5.完成コード
1.スクリプト処理構成
本スクリプトの構成は下記の通りです。
1.スクリプトファイルにドラッグアンドドロップされたファイルを添付ファイルに設定
2.週報ファイルのタイトルをもとにメール本文および件名を作成
3.サンダーバードを起動
2.スクリプト実行方法
本スクリプトの実行方法は下記の通りになります。
1. ユーザー操作:週報ファイルをスクリプトファイルにドラッグアンドドロップ
2. Thunderbirdの【送信】をクリック
3.想定使用方法
本スクリプトは、単一ファイルを送信することを想定して作成しています。ドラッグアンドドロップで複数ファイルを指定した場合でも、最初のファイルのみ添付ファイルになります。
4.スクリプト詳細
さて、ここからが本題のスクリプトです。
4-1.スクリプトファイルにドラッグアンドドロップされたファイルを添付ファイルに設定
1 2 3 4 5 6 7 8 9 |
'WScript.Arguments(0)で1番目に指定された引数を受け取ります。 '引数を渡さずに実行するなど、nullの場合はwscript.arguments(0)が見つからないためにエラー終了してしまうので、引数不足をはじきます。 If WScript.Arguments.Count > 0 Then strFilePath = wscript.arguments(0) Attachment = wscript.arguments(0) Else msgbox "ファイルを指定してください。" &WScript.Arguments.Count WScript.Quit End If |
4-2.オブジェクト作成
ApplicationをRunするためのオブジェクトを作成します。
VBScriptの特徴なのですが、オブジェクトを作成するときも含めて、変数を宣言せずに初期化から行うことができます。代償として、typoすると別変数として認識されてしまうので、Option Explicit
を冒頭に記述することで、変数宣言を強制し、typoしてもわかるような安全なコードにすることもできます。
でも、今回はパス!
1 |
Set oWSH = CreateObject("WScript.Shell") |
4-3.メール要素作成
Thunderbirdの実行パスに渡す引数の構成は下記の通りです。
1) -compose
を指定します。
ThunderbirdをCompose
モード(=作成モード)で起動するオプション
2)メールアドレス以外の要素は""
で囲みます。
VBScriptの言語仕様として、"
は""
のように連続して記述することでエスケープします。
1 |
" -compose "&_ """to=" & MailTo &_ """,cc=" & MailCC &_ """,bcc="& MailBCC &_ """,subject=" & MSubject &_ """,body=""" & MBody &_ """,attachment=""" &Attachment &"""" |
5.完成コード
では、完成コードです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
strEXEPath = """C:\\Program Files (x86)\\Mozilla Thunderbird\\thunderbird.exe""" If WScript.Arguments.Count > 0 Then strFilePath = wscript.arguments(0) Attachment = wscript.arguments(0) Else msgbox "ファイルを指定してください。" 'スクリプト終了 WScript.Quit End If 'オブジェクト生成 Set oWSH = CreateObject("WScript.Shell") s = Split(Attachment,"\") us = ubound(s) FromDate= mid(s(us),instr(s(us),"週報")+2,8)'instr(s(us),"~2")-instr(s(us),"週報")-1) ToDate =mid(s(us),instr(s(us),"~2")+1,8)'instr(s(us),"~2")-instr(s(us),"週報")-1) MailTo ="<mail address of your boss>;" '";"でメールアドレスを区切ります。 MailCC="" MailBCC="" MSubject=replace(left(s(us),instr(s(us),".")-1),"週報","【週報】") MBody="TO:<your boss>" & vbCrlf &_ mid(FromDate,5,2)&"月" &mid(FromDate,7,2) & "日から" & mid(ToDate,5,2)&"月"&mid(ToDate,7,2) & "日までの週報をお送りいたします。" &vbCrlf &_ ご確認お願いいたします。 on error resume next arg = " -compose "&_ "to= & MailTo &_ ",cc= & MailCC &_ ",bcc=& MailBCC &_ ",subject= & MSubject &_ ",body=" & MBody &_ ",attachment=" &Attachment &"""" '引数でメール要素を渡してThunderbirdを実行 oWSH.Run strEXEPath & arg |
宛先・件名・本文・添付ファイルが入力された状態のメール作成画面が表示されます。
あとは、内容が正しいことを確認して、【送信】を押せばOKです。
送信者はThunderbirdに既定の送信者として登録されているメールアドレスになります。
今回のスクリプトは以上になります。
宛先、件名、本文の設定値を外部の設定ファイルから読み込むスクリプトも作ってみようと思っています。
そのとき、ついでに複数ファイルを添付できるように改修してみます。
最後までお読みいただきありがとうございました。
明日が、あなたにとってなりたい自分に近づける日になりますように。