Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

MailFluteでメール送信を楽しもう!

598 views

Published on

MailFluteでメール送信を楽しもう!

Published in: Technology
  • Be the first to comment

  • Be the first to like this

MailFluteでメール送信を楽しもう!

  1. 1. MailFlute でメール送信を楽しもう!2016-11-27 Created by awane
  2. 2. Index 1. 自己紹介 2. ヒアリング 3. メール送信に必要なアーキテクチャ 4. MailFluteとは 5. 実装方法 6. MailFluteの便利な機能 7. MailFluteの機能追加予定 8. 質問タイム
  3. 3. 1. 自己紹介 Takeshi Awane (@p1us2er0) 株式会社リブゲートという会社で、 Web開発エンジニアをしています。
  4. 4. 1. 自己紹介 Javaメインの開発が多いです。 サーバサイド LastaFlute + LastaDi + DBFlute SpringMVC + Spring + DBFlute SAFlute(SAStruts) + Seasar2 + DBFlute RESTEasy(JAX-RS) + weld(CDI) + DBFlute ※buildscript gradle or maven フロントエンド AngularJs + Bootstrap ※buildscript yo + gulp + bower
  5. 5. 2. ヒアリング エンジニア目線 メール送信機能があるシステムを開発した経験があ りますか? メール送信機能を実装する時、困ったことありませ んか? アーキテクチャ目線 メール送信機能のアーキテクチャ(仕組み)を作った 経験ありますか? メール送信機能のアーキテクチャ(仕組み)を作る 時、困ったことありませんか?
  6. 6. 3. メール送信に必要なアーキテクチャ メール送信に必要なアーキテクチャ(仕組み)はたくさ んあります。 メールテンプレート モック フィルター 動作環境認識 非同期機能 ロギング etc. ※今回はメール送信にフォーカスを当てるので、メー ル受信関連は除外します。
  7. 7. 3. メール送信に必要なアーキテクチャ メールテンプレート メールのタイトル、本文などのテンプレート化。 以下がよくある?? Java テンプレートエンジン(velocity、freemarker) プロジェクト独自テンプレートエンジン Javaでべた書き モック メール送信ができない環境でもモック化することであ る程度の動作確認できるように。
  8. 8. 3. メール送信に必要なアーキテクチャ フィルター メールの送信先をフィルターして、送信先を除外した り、変更したり。 宛先によって、メール自体の送信をキャンセルする。 動作環境認識 メールのタイトルに、動作環境の環境名などを差し込 む。 非同期機能 メールを非同期で送る。 ロギング メールの送信内容を、DBやファイルに保存する。
  9. 9. 3. メール送信に必要なアーキテクチャ メール送信するだけなのに、システム化するとなる と、色々考えないといけないことがある。 メール送信のアーキテクチャにコストを変えてられな い。 ただ、何故かメール関連のフレームワークはあまりな い。 そこで...
  10. 10. 3. メール送信に必要なアーキテクチャ そこで... メール送信に必要なアーキテクチャを備えたシンプルな メール送信ライブラリ MailFlute
  11. 11. 4. MailFluteとは MailFluteとは以下の機能を備えたシンプルなメール送 信ライブラリです。 メールテンプレート モック フィルター 動作環境認識 非同期機能 ロギング ※MailFlute単独での利用はもちろんできますが、すべ ての機能を簡単に使うためにはLastaFluteを使うこと をおすすめします。
  12. 12. 4. MailFluteとは GitHub 概要 https://github.com/dbflute-session/mailflute http://dbflute.seasar.org/ja/manual/function/helper/mailflute/index.html http://dbflute.seasar.org/ja/lastaflute/howto/architecture/typesafemail.html
  13. 13. 4. MailFluteとは MailFluteのアーキテクチャ
  14. 14. 5. 実装方法 メールの実装方法は、4ステップです。 step0. プロジェクト準備 step1. テンプレート作成 step2. 自動生成 step3. 自動生成クラスを呼び出す step4. 動作確認
  15. 15. 5. 実装方法step0. プロジェクト準備 今回は、Githubのサンプルプロジェクトを使います。 lastaflute-example-maihama example project for LastaFlute as multi-project (with MySQL) lastaflute-example-harbor ★これを使います。 example project for LastaFlute as single project (with H2) lastaflute-example-waterfront example project for LastaFlute, ESFlute (with Elasticsearch, also JSP) https://github.com/lastaflute
  16. 16. 5. 実装方法step0. プロジェクト準備 Githubからclone DBマイグレーション ※DBはH2のため、別途ダウンロードなどは不要です。 アプリを起動。 org.docksidestage.HarborBootをmain実行。 アプリにアクセス。 git clone https://github.com/lastaflute/lastaflute-example-harbor.git cd lastaflute-example-harbor/dbflute_maihamadb sh manage.sh 0 http://localhost:8090/harbor
  17. 17. 5. 実装方法step0. プロジェクト準備 まず、流れを把握するため、サンプルプロジェクトで すでにあるファイルを見ながら説明します。 その後、改めて新しいファイルを作りながら説明しま す。
  18. 18. 5. 実装方法step1. テンプレート作成 src/main/resources/mail配下に、dfmailのメールテンプ レートを書きます。DBFluteの外だしSQLに非常によく 似たパラメータコメント形式(pmfile形式) で書きま す。
  19. 19. 5. 実装方法step1. テンプレート作成 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? Thank you for signing up to Maihama! You are now temporaly registered to the site. Please click on the link below to become a formal member. http:///*pmb.domain*//signup/register/?account=/*pmb.account*///*pmb.token*/ We hope you will enjoy your time in Maihama. Thank you. ※Eclipseプラグインの「EMecha」が入ってれば、ハイラ イト表示されます。
  20. 20. 5. 実装方法step2. 自動生成 DBFluteのFreeGenタスクを実行 org.docksidestage.mylasta.mail配下に自動生成されま す。 sh manage.sh 12 org.docksidestage.mylasta.mail.member.WelcomeMemberPostcard
  21. 21. 5. 実装方法step3. 自動生成クラスを呼び出 す 自動生成されたクラスを呼び出す org.docksidestage.app.web.signup.SignupAction#sendSignupMail WelcomeMemberPostcard.droppedInto(postbox, postcard -> { postcard.setFrom(config.getMailAddressSupport(), "Hangar Support"); // #simple_for_example postcard.addTo(body.memberAccount + "@docksidestage.org"); // #simple_for_example postcard.setDomain(config.getServerDomain()); postcard.setMemberName(body.memberName); postcard.setAccount(body.memberAccount); postcard.setToken(signupToken); });
  22. 22. 5. 実装方法step4. 動作確認 サインアップ画面にアクセス サインアップに必要な情報を入れて、サインアップ ※メール送信されます。設定がモック実行のため、ロ グで確認します。 http://localhost:8090/harbor/signup/
  23. 23. 5. 実装方法step4. 動作確認 ログ確認 2016-11-27 03:00:46,838 [qtp1900164709-13] DEBUG (SMailTypicalLoggingStrategy@showMessage():57) - ...Sending mail as training: /= = = = = = = = = = = = = = = = = = = = = = = = = = Mail Message subject: [Test]Welcome to your sign up, a from: Harbor Support <harbor-support@annie.example.com> to: a@docksidestage.org return: returnpath@docksidestage.org sysInfo: {dfmail=member/welcome_member.dfmail, locale=none, category=main} >>> Hello, a How are you? Thank you for signing up to Maihama! You are now temporaly registered to the site. Please click on the link below to become a formal member. http://localhost:8090/harbor/signup/register/a/38d1f7ff94904e4956d2afc8c99fe22d/ We hope you will enjoy your time in Maihama.
  24. 24. 5. 実装方法 今のステップを、新しいファイルを作りながら説明し ていきます。
  25. 25. 5. 実装方法step1. テンプレート作成 e.g. デモメールテンプレート @src/main/resources/mail/demo/demo.dfmail /* [ ] */ subject: testInteger=/*pmb.testInteger*/ -- !!Integer testInteger!! -- !!List<String> testList!! >>> If文 /*IF pmb.testIf != null*/ /*pmb.testIf*/ /*END*/ For文 /*FOR pmb.testList*//*#current*//*END*/
  26. 26. 5. 実装方法step2. 自動生成 DBFluteのFreeGenタスクを実行 org.docksidestage.mylasta.mail配下に自動生成されま す。 org.docksidestage.mylasta.mail.demo.DemoPostcard sh manage.sh 12
  27. 27. 5. 実装方法step3. 自動生成クラスを呼び出 す 自動生成されたクラスを呼び出す テストケースを書く。 org.docksidestage.mylasta.mail.demo.DemoPostcardTest public class DemoPostcardTest extends UnitHarborTestCase { @Resource private Postbox postbox; public void testDemoMail() throws Exception { DemoPostcard.droppedInto(postbox, postcard -> { postcard.setFrom("from@test", "FROM_TEST"); postcard.addTo("to@test", "TO_TEST"); postcard.setTestInteger(1); postcard.setTestList(Arrays.asList("TEST1", "TEST2")); }); } }
  28. 28. 6. MailFluteの便利な機能 メールテンプレート モック フィルター 動作環境認識 非同期機能 ロギング
  29. 29. 6. MailFluteの便利な機能 メールテンプレート ※「実装方法」で説明済み DBFluteの外出しSQLライクで書ける。 メールテンプレート内で、IF文、FOR文も書け る。 メールテンプレートからクラスが自動生成されるた め、タイプセーフで実装できる。
  30. 30. 6. MailFluteの便利な機能 モック harbor_env.propertiesのmail.send.mockで制御。 FakeSMTPで確認 FakeSMTPのダウンロード FakeSMTPの実行 立ち上がったGUIのサーバー起動ボタンを押下。 mail.send.mock=falseにして、「実装方法step4. 動 作確認」を実施。 https://nilhcem.github.io/FakeSMTP/ sudo java -jar fakeSMTP-2.0.jar
  31. 31. 6. MailFluteの便利な機能 以下の機能は、SMailDogmaticPostalPersonnelで制御で きます。 HarborMailDeliveryDepartmentCreatorを参考にして、 実際設定を変えながら説明します。 フィルター 動作環境認識 非同期機能 ロギング
  32. 32. 6. MailFluteの便利な機能 この他にも便利な機能があります。 ファイル添付(テキスト、バイナリ) メールアドレスのpersonal(別名)指定 テキスト、HTMLメールの出し分け 国際化対応(日本語、英語などの出し分け) プレビュー&内容編集機能(ある程度実装が必要) etc. ぜひMailFluteを使ってみてください!
  33. 33. 7. MailFluteの機能追加予定 DBFluteのSchemaHTML、LastaFluteのLastaDoc相当の ドキュメント(mailDoc(仮))を自動生成します。(近日公 開)
  34. 34. 8. 質問タイム
  35. 35. End ご清聴ありがとうございました。

×