配信リストに従ってメールを自動送信する

設定ファイルが準備できたら、同じフォルダに以下のようなスクリプトを用意しましょう。パス部分は、適宜、自分の環境に合わせて書き換える必要があります。

[リスト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)が空の場合にはメールが正しく送信されたものと見なして、成功メッセージを、そうでない場合には、返されたエラーメッセージを、それぞれ表示しています。