y-matsui::weblog

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

お次はメール送信機能・・さてどう作ろう

DBアプリ周り(ファイリング機能)はほぼ完成ということで、次はメール送信機能。
これまでにいくつかの開発案件で、メール送信にタッチしているので、基本的な構成は踏襲することになるだろう。
ただ、送信件数とパフォーマンスの関係や、送信先メールサーバとのハンドシェイク部分など、作り方を間違えるとえらいことになってしまうので、”具体的に何をしたいか”ちょっとまとめないと作り始められない。
・・というのも、フォーム入力からちょこちょこと1通づつのメールを送るのであればBASP21のメソッド一発で済むのであるが、こちとらスクリプトからの起動なのであるから、画面へのレスポンス、一括送信の速度面で破綻することが目に見えているからなのである。
これも案件での例だが、送信チェックをDBで行うのか、それともDBから生成したキューファイルのみで行うのか、送信前になんらかのチェックを挿入するのか、メッセージは動的に加工するのか、並列送信に対応するのか、SMTPサーバをメッセージと切り離すことで障害発生時の代替運転に対応するのか、送信リストはどの時点までの変更を許容するのか、どの程度の性能を目標にするのか・・・などなど
結局、パフォーマンスや即時性の確保、冗長性の確保、障害発生時の代替策、機能要件の最適化(ブレンド)の話で、しかもスクリプトからはSMTPコマンドをいちからハンドシェイクするわけではないので、おのずと利用するコンポーネント(ここではBASP21を想定している)が持っているメソッドとも睨めっこになる。
今の時点で実現したいことは、次のようになる。

■メール送信機能のタスクリスト
1:アドレス帳は受信メールから動的に生成したい(まさか管理者がCSVインポートしたり、Web画面から登録したりなんていうことは避けたい)
2:メール送信時にはあて先をクエリでその時点で生成するアドレスリストとしたい
3:スケジュール送信に対応する(送信日時指定)
4:再送処理に対応する(DB上で送信履歴をリセットしキューを再生成)
5:DBで送信済み(キュー生成済み)を管理する
6:送信メールで件名prefixや変数を使いたい(本文中に差込)
7:HTMLメール、添付ファイルにも対応
8:メッセージテンプレートからの流用作成
9:送信状況のモニタリング機能
10:宛先不明アドレス、接続不可サーバのチェック機能

※んー、まさに9月-12月に業務で経験したメール送信機能そのまま引き写しだ(汗)
VisualCとDBアプリで構築した仕組みをスクリプトとBASP21で再構成しようって感じ。