y-matsui::weblog

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

メール送信機能についてさらに色々と考える

作り始めるに当たって、大まかな構成を考えておく。
メールエディタ Edit_Message.asp、Save_Message.asp、View_Message.asp
即時送信用プログラム SendSingleMail.asp(Save_Message.asp内同居でもOK?)
一括送信用プログラム SendBulkMail.vbs
再送処理用プログラム FlushMail.vbs、FlushMail.asp
アドレス抽出 Search_Member.asp、Save_Member.asp、Create_List.sql,Export_Member.asp
アドレスメンテナンス Check_EmailAddress.asp
配信状況モニタ View_Status.asp
配信ログ Search_SentHistory.asp
SMTPサーバ設定 Edit_SMTP.asp、Save_SMTP.asp、View_SMTP.asp
メッセージ生成 Create_Message.sql、Export_Message.asp

■メッセージテンプレート
件名、宛先グループ、本文(HTMLとテキストを選択できるように)、添付ファイル、送信に利用するSMTPサーバ設定(サーバ名称、IP、Fromアドレス、SMTP認証情報)、replyアドレス(POPアカウント情報から引く)、メールヘッダ(メルマガなどの既定文)、フッタ(署名やメルマガの巻末文)の挿入などのメールコンテンツ作成機能。テンプレート保存やテンプレートからの流用作成ができるようにするのと、HTMLコンテンツを編集できるようopenWISIWYGを使う予定。Fromアドレスは、メッセージテンプレートを作成したユーザのアドレスをデフォルトで挿入。連番を生成し記事番号をIdxとして付与することで、Message-ID生成時のprefixにしようか。
配信時間を指定したいので、カレンダーコントロールで送信時間を入力しよう。この日時を見てスケジュール送信できるように。現在の日時がデフォルトで入っていれば即時送信という扱いで。
TOは文書管理システムのユーザリストから複数選択できるようにし、メルマガなどの一括送信では配布先グループをBCCで設定。

■メールアドレス抽出(動的リスト生成)
アドレス帳(tbl_mailaddress)から配布先リストを生成するための条件をクエリで保存。
このクエリをストアドプロシジャーで利用しよう。メッセージテンプレートで指定する宛先グループのドロップダウンで指定する。配布先リストの生成で時間が掛かると思われるので、件数と最終実行日時を控えておいて、差分があった場合だけリストを更新する動作と、強制的に全入れ替えするモードを考えよう。
検索画面では、ユーザの属性(@以下のドメインだとか、ユーザ区分、文書管理システムユーザのグループ名)
で動的グループ名を名前を付けて保存できるように。

■メッセージキュー
即ファイル化してBASP21に渡すのも良いが、やはりここは一度DBに保存しよう。DB保存しておいて(Webからも確認できるようにしておいて)、必要に応じてアプリ側からキューを生成できるように。
・・というのは、再送処理や送信状況のモニタ、DB上での送信履歴検索を行いたいからである。
メッセージテンプレートと動的リストを材料に、メールメッセージを生成。これをプログラムで実行すればかなり凝ったメッセージを生成できるが、パフォーマンス面で見ればストアドプロシジャーでDB内爆発が良さそう。
外部プログラムで再送処理フォルダに移動されたメッセージを拾って、DB内に書き込むようにすればメール送信状況のトレースが出来るし、送信不可アドレスのメンテナンスにも流用できる。

■メール送信モジュール
SMTPサーバ情報を参照して、接続先、一度に送信する件数の取得。
キューディレクトリのメッセージを黙々と送信する。(DBアクセスを発生させない。)
総件数と処理済み件数のみを最後にログ書き込みする。
10分置きなどの定期実行の巡回送信。
再送処理用のモジュールと初回送信用モジュールを別立てとするか、再送処理を優先して行い、終了後に初回送信を実行するかは未定。再送処理用は定期実行のVBSとWebからASPで起動するバージョンの二通りを用意すれば、ユーザの判断をかますことが出来る。

■配信状況モニタ
送信結果のDirを取って、SentとRetryメッセージの情報を検索、DBにステータスを書き込む。
メッセージ単位の配信状況は、送信メッセージのテンプレート一覧で、総数と送信済み、リトライ数の状況を確認できる。メール送信全体の状況は、メッセージログの集計結果をグラフで表示する(?)。
対応するメッセージ原文ファイルのパスを入れることにより、WebDB上からメッセージの参照(ダウンロード)が出来る。

■アドレスメンテナンス
メッセージログで再送処理が発生したアドレスをアドレス帳と照合して、NGフラグを付ける。
これにより、次回送信時の除外アドレスとすることが出来る。(捨てアドレスやアドレス記入ミスのユーザへはメルマガ送信をしない)