配信リストに従ってメールを自動送信する
設定ファイルが準備できたら、同じフォルダに以下のようなスクリプトを用意しましょう。パス部分は、適宜、自分の環境に合わせて書き換える必要があります。
[リスト01] mail.vbs
' スクリプトの動作に必要な設定情報
Const ADDRESS_LIST = "C:\tmp\mail\mail_to.dat" ' 配信リストのパス
Const MAIL_BODY = "C:\tmp\mail\mail_body.dat" ' メール本文のパス
Const SMTP = "smtp.examples.com" ' SMTPサーバのホスト名
Const FROM = "WINGS News <CQW15204@nifty.com>" ' 送信元アドレス
Const SUBJECT = "【WINGS News】「JavaScriptマスターブック」好評発売中" ' 件名
Const FILES = "" ' 添付ファイルのパス
Set fs = WScript.CreateObject("Scripting.FileSystemObject")
' Basp21オブジェクトを生成
Set basp = WScript.CreateObject("Basp21")
' メール本文をまとめて読み込み、変数tmp_bodyに格納
tmp_body = fs.OpenTextFile(MAIL_BODY, 1, False).ReadAll()
' 配信リストを読み込み、順番に処理
Set stream_list = fs.OpenTextFile(ADDRESS_LIST, 1, False)
Do While Not stream_list.AtEndOfStream
' 読み込んだ行をタブで分割し、配列lineに格納
line = Split(stream_list.ReadLine(), Chr(9))
' 宛先アドレスをセット
to_address = line(0)
' 本文をセット(#TO_NAME#を宛先名で置換)
body = Replace(tmp_body, "#TO_NAME#", line(1))
' 設定内容に従って、メール送信
result = basp.SendMail(SMTP, to_address, FROM, SUBJECT, body, FILES)
' 戻り値が空の場合には送信成功と見なす
If result = "" Then result = "送信成功"
' 結果を表示
WScript.Echo(to_address & ":" & result)
Loop
stream_list.Close()
まずは、サンプルを実際に動作してみましょう。このサンプルはコマンドプロンプトからの実行を想定しています(*)。コマンドプロンプトを開いて、以下のようなコードを入力してください。
*)GUIモードで実行しても構いませんが、その場合は送信したメールの数だけダイアログ・ボックスが表示されますので、あまりお勧めできません。
>cscript C:\tmp\mail\mail.vbs
上図のようにメールの送信結果が表示されれば、正しくメールは送信できているはずです。送信先のメールボックスで正しくメールが受信できていることを確認してみましょう。
メールを送信するのはSendMailメソッドの役割
サンプルの動作が確認できたら、ポイントとなるコードを見ていくことにしましょう。もっとも、テキストファイルの読み込みについては、すでにテキスト読み書き編をはじめ、過去の回で何度も登場していますので、ここで注目すべきはBasp21オブジェクトのSendMailメソッドだけです。
[構文]SendMailメソッド
Basp21オブジェクト.SendMail(SMTPサーバ名, 宛先, 送信元, 件名, 本文, 添付ファイルのパス)
シンプルなメールを送信するだけであれば、引数に必要なパラメータを渡すだけで簡単にメールを送信することができます。もっとも、環境に応じて、それぞれのパラメータの指定の仕方はさまざまですので、ここでもう少し細かく構文を追っておくことにします。
(1)SMTPサーバ名
SMTPサーバ名は、正確には、以下のような形式で指定できます。
[ホスト名/]SMTPサーバ名[:ポート番号[:タイムアウト時間(秒)]]
ポート番号のデフォルトは25、タイムアウト時間のデフォルトは120秒で、それぞれ省略可能です。ホスト名はBasp21を使っているコンピュータのホスト名で、これも省略して構いませんが、明示的に指定した方がやや動作速度が向上するようです。
(2)宛先
宛先には、タブ区切りでCc(カーボンコピー)やBcc(ブラインドカーボンコピー)、Reply-To(返信先)などを指定できます。たとえば、To(正規の宛先)が変数T1、T2、CcがC1で表されているならば、宛先全体は以下のように表現できます。
to_address = T1 & Chr(9) & T2 & Chr(9) & "cc" & Chr(9) & C1
Toは特に頭には何もつけずに、Bccでは"bcc"、Reply-Toでは"reply-to"というキーワードをそれぞれタブ区切りで付与します。
(3)送信元
送信元には、送信元アドレスを「送信元名 <アドレス>」の形式で指定できるほか、タブ区切りで認証のためのユーザ名/パスワード、認証方式を指定できます。認証方式としては、PLAIN/LOGIN/CRAM-MD5から選択できます。
FROM = "WINGS News<test@examples.com>" & Chr(9) & "user111:passwd999" & Chr(9) & "LOGIN"
この場合は、SMTP LOGIN認証で、ユーザ名user111/パスワードpasswd999でログインしようとしているわけです。利用可能な認証方式は利用しているサーバによって異なりますので、詳しくはサーバ管理者に問い合わせると良いでしょう。
その他、SendMailメソッドにはさまざまな拡張オプションがありますが、まずは、ここまでを理解していれば、かなりのケースに対応できるはずです。拡張オプションに関する詳細は、本家ドキュメントも合わせて参照することをお勧めします。
SendMailメソッドは、メールをその場で送信し、エラーが発生した場合にはエラーメッセージをその戻り値として返します。ここでは、戻り値(変数result)が空の場合にはメールが正しく送信されたものと見なして、成功メッセージを、そうでない場合には、返されたエラーメッセージを、それぞれ表示しています。