y-matsui::weblog

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

BASP21:複数SMTPサーバ並列運用の場合のメールキュー生成方法(案)

BASP21のメールキュー名は、日付で固定されている。これを任意のキューファイル名にでき、FlushMailメソッドで送信するファイルを指定できれば良いのだが・・。残念ながらそういった使い方は想定していなさそうだ。
何をしたいのかというと、「複数SMTPサーバでのラウンドロビン(負荷分散)もしくは並列送信」
FlushMailメソッドでは、パラメータにキューファイルの格納されたフォルダ名を指定することができる。
もし、BASP21のCOMオブジェクトを複数起動できるのであれば、SMTPサーバごとのフォルダを作成しておき、キューをその下に作成することで、SMTPごとのキューの割り当てをした上で、複数のSMTPの並列送信ができる。
より具体的にアイディアを練ってみよう・・

■複数SMTPサーバでのラウンドロビン
アドレスリストを抽出して配布リストの作成は従来どおり全アドレスを抽出したものをテンポラリディレクトリに作成。
メールメッセージ作成時のSMTPサーバ指定に”ラウンドロビン”を追加。
メッセージ保存時、アクティブなSMTPサーバを検索し、送信リスト件数の均等割りを行う(SMTPサーバ設定情報に、ラウンドロビンの場合の割合を設定しても良い)。SMTPサーバ単位のキューディレクトリ配下のlistディレクトリに、MLIDのリストファイルを作成する。同時に、複数SMTP用のメッセージデータを各ディレクトリに作成。
送信実行時、全SMTPキューディレクトリのキュー送信を実行する。

■複数SMTPサーバを別メッセージ送信に利用する
メールメッセージ作成時のSMTPサーバ指定。保存時には選択したSMTPキューディレクトリ配下にリストファイルをメッセージファイルをコピーする。

複数送信した際のログ参照、整合性確保はかなり煩雑化する。(汗)
特に同一メッセージをラウンドロビンで送信する場合、正常に送れたのかどうかを追跡するのはめんどくさそうだ。キューをラウンドロビンで生成しておいて、送信前(送信中?)にキューの削除が入ったらどうするんだ・・とかタイミングの制御なんかできないよなぁ・・・ファイルのロックだけで逃げるかなぁ。

・・とまぁこんな方法で、並列送信や負荷分散ができると、ちょっとした規模のメールマガジン配信に使える。
ASPなんかのスクリプトで実現する仕組みでは無いのかもしれないが、ロマンなのである。
あえて音楽にこじつければ、長編、大人数編成、変則ビートのプログレッシブロックなのである。(謎)