MailFlute

MailFluteとは?

MailFlute は、メールテンプレート機能を備えたシンプルなメール送信ライブラリです。

DBFlute の FreeGen と組み合わせて利用することで、タイプセーフでメールパラメーターを指定できる、堅いツールになります。 DBFluteライクなメール送信ライブラリと言えるでしょう。

1. メールテンプレートを書く
パラメータコメント形式でテンプレートを作成、拡張子は.dfmail
2. FreGenを叩く
FreeGenがメールテンプレートを読み込んで、クラスを自動生成
3. タイプセーフ実装
自動生成されたクラスを使って、タイプセーフにメール送信の実装

LastaFluteでの利用例

LastaFluteとの組み合わせが、MailFlute利用の典型例となります。

LastaFlute Typesafe Mail

まず、src/main/resources/mail配下に、dfmailのメールテンプレートを書きます。 外だしSQLに非常によく似たパラメータコメント形式 (pmfile形式) で書きます。

e.g. 新しい会員の登録を想定したメールテンプレート @welcome_member.dfmail
/*
 [New Member's Registration]
 The member will be formalized after click.
*/
subject: Welcome to your sign up, /*pmb.memberName*/
>>>
Hello, /*pmb.memberName*/

How are you?
/*IF pmb.birthdate != null*/
Happy birthdate! Today is /*pmb.birthdate*/.
/*END*/

Thanks

そして、FreeGenを叩き...

e.g. Manageで 12 (freegen) を叩く @Command
...$ sh manage.sh 12

mylasta.mail配下に自動生成されたクラスで実装します。 クラス名は、テンプレートファイルをキャメルケースにしたものになります。(welcome_member.dfmail なら WelcomeMemberPostcard)

e.g. 自動生成されたクラスで実装 @Java
WelcomeMemberPostcard.droppedInto(postbox, postcard -> {
    postcard.setFrom("from@example.com", LABELS_OFFICE_MAIL);
    postcard.addTo("to@example.com");
    postcard.setMemberName("sea");
    postcard.setBirthdate(birthdate);
    postcard.addReplyTo("replyto@example.com");
});

メールテンプレート

拡張子は .dfmail で、パラメーターコメント形式で書きます。

Body Meta

コメントや subject など、メールBodyのメタ情報 (Body Meta) を >>> 区切りで定義します。

*HeaderComment
ヘッダー部に書かれたメールに関する開発用コメント、タイトルと説明がある
*Title
メールを一行で要約する開発用コメント、[...]形式で書く
*Description
メールを自由に説明する開発用コメント、Titleの下に書く
*subject:
メールの件名、文言の中で動的パラメーターが利用できる
option:
メールのオプション、HTMLメールも飛ばすなら option: +html
-- !![type] abc!!
自動判別できないプロパティを明示的宣言をして自動生成
e.g. Body Meta の属性が勢ぞろい @welcome_member.dfmail
/*
 [New Member's Registration]
 The member will be formalized after click.
*/
subject: Welcome to your sign up, /*pmb.memberName*/
option: +html
-- !!List<Integer> abcList!!
>>>
Hello, /*pmb.memberName*/

...

ヘッダーコメント (タイトル、説明)

Title や Description は必須です。メールテンプレートには必ずタイトルと説明を入れます。 形式も決まっています。必ず /* [タイトル] 説明 */ という形式でないと、FreeGenも実行時もエラーで落ちます。

e.g. ヘッダーコメントの形式 @dfmail
/*
 [タイトル]
 説明
*/
subject: ...
...

タイトルと説明は、あくまで開発用コメントで、実装に送信されるメールの件名(subject)とは別です。

subject: (メールの件名)

さて、こちらは実際にメールされて受信者が目にするメールの件名です。

件名の中でも、パラメータコメントを使うことができます。

e.g. 件名の中で、パラメータコメント @dfmail
/*
 [タイトル]
 説明
*/
subject: Hello, /*pmb.memberName*/. How are you?
...

option: (メールのオプション)

option: +html
HTMLメールも飛ばすときに、Plainテキスト側のテンプレートの option: に指定します。
もし、Plainテキストのテンプレートファイルの welcome_member.dfmail だとしたら、HTMLメールのテンプレートファイルは、同じディレクトリに welcome_member_html.dfmail となります。
HTMLメールのテンプレートファイルには、ヘッダーを付与できません。(一行目から本文を書きます)
e.g. HTMLメールのテンプレートファイルの置き場所 @Directory
src/main/resources
 |-mail
 |  |-member
 |  |  |-welcome_member_html.dfmail // HTML text
 |  |  |-welcome_member.dfmail      // plain text
...

パラメータコメント

TODO jflute

Postcard, PostOffice

TODO jflute

PostalPersonnel

TODO jflute