javaテンプレートエンジンを使用した一斉メール配信
こんばんは。今月の案件で、プッシュ型のサービス(一斉メール配信)をjavaで開発しました。
年のせいか、最近物忘れが激しいので、やり方を忘れないうちにメモしておきます。
■要件
「あなたの明日の予定はこれこれですよー」と予定をメールでお知らせする機能がほしいと依頼されました。
明日の予定これこれはDBに入っています。
■考えたしくみ
既に運用中のサービスへの追加機能でしたので、現状の運用環境に追加しやすく、
かつ数日でできるしくみをメンバー内で考えました。
運用環境はLinuxで、javaが動いています。rubyでささっとできそうでしたが、結局は以下のしくみにしました。
①cronで毎日指定時間にメール配信機能起動シェルスクリプトを呼ぶ
②シェルスクリプト内で環境設定などしてjavaで作成されたメール配信機能を起動
③起動したメール配信機能で、テンプレートエンジンを使用して文面作成
④作成したメールを一定数毎に配信
■テンプレートエンジン(今回の肝)
テンプレートエンジンには、Apache Velocity(velocity-1.7-dep.jar)を採用しました。 テンプレートエンジンとは、雛形(テンプレート)と個々に異なる入力データを合成して最終成果物を出力するものです。 まず、テンプレートをVTLという言語で書きます(こんな感じ)。
明日の$NAMEさんのご予約状況。 【開始時間】$START_TIME 【終了時間】$END_TIME ・・・
テンプレートへの文字列設定はこんな感じ。
private String getMailText(Template tempText, MailElement elm) throws Exception { // 置換する情報を設定 VelocityContext context = new VelocityContext(); context.put("NAME", elm.getName()); context.put("START_TIME", elm.getStartTime()); context.put("END_TIME", elm.getEndTime()); // テンプレートとマージ StringWriter sw = new StringWriter(); tempText.merge(context, sw); sw.flush(); return sw.toString(); }
■メール配信
ここの内容と同じような処理をしています。 http://www.atmarkit.co.jp/fjava/javatips/123java022.html 連続で送信するのはよろしくないので、一定間隔あけながら送信しています。
以上です。 同様の案件はたくさんあると思いますが、ベストプラクティスを知りたいです。 経験ある方、ぜひコメント下さい!!!