y-matsui::weblog

電子楽器、音楽、コンピュータ、プログラミング、雑感。面倒くさいオヤジの独り言

もう少し進んだ送信テスト

ヘッダ情報を固定したテストではなく、今度は、メール作成フォームから入力(選択)した情報からヘッダを構築して送信するテストを実施。環境変数から読み取ったキューディレクトリへのメール書き込みはOK。Edit_Message.asp(メール作成)→Save_Message.asp(DB保存とキュー生成)
Edit_Message.aspでは、メーリングリストIDを選択するが、実はコレがディレクトリに書き出されるリストテキストファイルのファイル名のキーになっている。
HTMLモードでメールエディタを呼び出した場合(EnableHTML=1)には、メールヘッダにtext/htmlなどのヘッダを追記する。

FlushMailメソッドを使った一括送信もOK。
Flush_Message.asp起動時に利用するSMTPサーバIDとキューディレクトリを指定する。

BASP21の仕様では、Content-Type、CC,BCC,Reply-TO、Message-IDをすべてmailtoヘッダに放り込むのであるが、vbtabが必要だったり不要だったりに気づかず、”Invalid To Field”なんて言われて途中混乱したが、なんとかクリア。

キュー生成ログ保存、送信ログ保存、送信メール保存をそれぞれmailque\log\que-**.log、mailque\log\flush.log、mailque\backup\**.txtなんて感じで行っている。
Message-IDはDBで新規に採番したメッセージIDを与えており、これでDB上で一意に識別できる。
BCCは差込ファイルをDBから抽出してmailq\list\メーリングリストID.txtの形式で書き出しすと同時に、BASPの差込ファイルとして指定する。

DBからSMTP情報を取得し、メッセージテンプレート(メール本文レコード)中に指定された、グループID、Reply-Toの情報、ログインしているユーザのメールアドレスなどを利用して、キューを生成。メールフラッシュ用のASPプログラムを起動すれば即座に作成したメールを送信開始。
ログやメールバックアップも書き落としているので、Webダウンロードも可能。

今日のところは、1通単位のメール送信がWebから可能になったのと、差込ファイルを使って複数人に送信する方法、HTML/テキストメールの切り替えがクリアになったので、今度は定期実行でメールをフラッシュするプログラムと、ステータスを監視する方法、リストを生成する仕組みを考える予定。
定期実行でメールをフラッシュするといっても、複数SMTPサーバがある場合の負荷分散方法(ラウンドロビンか?)をどうしようかという問題があるし、ステータスの監視といってもSentとErrフォルダにあるメール総数の統計を取るくらいの方法しかない。BCCでリストから送信した数をどのように取ろうか?

ちなみにBASP21とASPで送信したメールのヘッダ

Return-Path: <***@somedomain.jp>
Received: from
〜 略 〜
From: ***@somedomain.jp
To: db.Active!@somedomain.jp  ←@より前を、プログラムから任意の文字列で指定
Reply-To: ***@somedomain.jp ←DBのSMTP情報から持ってきたアドレス
Message-ID: 49831  ←DBで採番したユニークなレコード番号
Date: Sat, 15 Apr 2006 01:39:08 +0900
Subject: =?iso-2022-jp?B?GyRCJWEhPCVrQXc/LiVGJTklSBsoQg==?= ←BASP21が自動でエンコード
MIME-Version: 1.0
X-Mail-Agent: BSMTP DLL Feb 11 2003 by Tatsuo Baba ←BASP21デフォルト(改変可能)
Content-Type: text/html; charset=iso-2022-jp ←アプリで指定したContent-Type
〜以下 HTML本文〜