SlideShare a Scribd company logo
1 of 35
Download to read offline
MailFlute
でメール送信を楽しもう!2016-11-27
Created by awane
Index
1. 自己紹介
2. ヒアリング
3. メール送信に必要なアーキテクチャ
4. MailFluteとは
5. 実装方法
6. MailFluteの便利な機能
7. MailFluteの機能追加予定
8. 質問タイム
1. 自己紹介
Takeshi Awane (@p1us2er0)
株式会社リブゲートという会社で、
Web開発エンジニアをしています。
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
2. ヒアリング
エンジニア目線
メール送信機能があるシステムを開発した経験があ
りますか?
メール送信機能を実装する時、困ったことありませ
んか?
アーキテクチャ目線
メール送信機能のアーキテクチャ(仕組み)を作った
経験ありますか?
メール送信機能のアーキテクチャ(仕組み)を作る
時、困ったことありませんか?
3. メール送信に必要なアーキテクチャ
メール送信に必要なアーキテクチャ(仕組み)はたくさ
んあります。
メールテンプレート
モック
フィルター
動作環境認識
非同期機能
ロギング
etc.
※今回はメール送信にフォーカスを当てるので、メー
ル受信関連は除外します。
3. メール送信に必要なアーキテクチャ
メールテンプレート
メールのタイトル、本文などのテンプレート化。
以下がよくある??
Java テンプレートエンジン(velocity、freemarker)
プロジェクト独自テンプレートエンジン
Javaでべた書き
モック
メール送信ができない環境でもモック化することであ
る程度の動作確認できるように。
3. メール送信に必要なアーキテクチャ
フィルター
メールの送信先をフィルターして、送信先を除外した
り、変更したり。
宛先によって、メール自体の送信をキャンセルする。
動作環境認識
メールのタイトルに、動作環境の環境名などを差し込
む。
非同期機能
メールを非同期で送る。
ロギング
メールの送信内容を、DBやファイルに保存する。
3. メール送信に必要なアーキテクチャ
メール送信するだけなのに、システム化するとなる
と、色々考えないといけないことがある。
メール送信のアーキテクチャにコストを変えてられな
い。
ただ、何故かメール関連のフレームワークはあまりな
い。
そこで...
3. メール送信に必要なアーキテクチャ
そこで...
メール送信に必要なアーキテクチャを備えたシンプルな
メール送信ライブラリ
MailFlute
4. MailFluteとは
MailFluteとは以下の機能を備えたシンプルなメール送
信ライブラリです。
メールテンプレート
モック
フィルター
動作環境認識
非同期機能
ロギング
※MailFlute単独での利用はもちろんできますが、すべ
ての機能を簡単に使うためにはLastaFluteを使うこと
をおすすめします。
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
4. MailFluteとは
MailFluteのアーキテクチャ
5. 実装方法
メールの実装方法は、4ステップです。
step0. プロジェクト準備
step1. テンプレート作成
step2. 自動生成
step3. 自動生成クラスを呼び出す
step4. 動作確認
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
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
5. 実装方法step0. プロジェクト準備
まず、流れを把握するため、サンプルプロジェクトで
すでにあるファイルを見ながら説明します。
その後、改めて新しいファイルを作りながら説明しま
す。
5. 実装方法step1. テンプレート作成
src/main/resources/mail配下に、dfmailのメールテンプ
レートを書きます。DBFluteの外だしSQLに非常によく
似たパラメータコメント形式(pmfile形式) で書きま
す。
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」が入ってれば、ハイラ
イト表示されます。
5. 実装方法step2. 自動生成
DBFluteのFreeGenタスクを実行
org.docksidestage.mylasta.mail配下に自動生成されま
す。
sh manage.sh 12
org.docksidestage.mylasta.mail.member.WelcomeMemberPostcard
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);
});
5. 実装方法step4. 動作確認
サインアップ画面にアクセス
サインアップに必要な情報を入れて、サインアップ
※メール送信されます。設定がモック実行のため、ロ
グで確認します。
http://localhost:8090/harbor/signup/
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.
5. 実装方法
今のステップを、新しいファイルを作りながら説明し
ていきます。
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*/
5. 実装方法step2. 自動生成
DBFluteのFreeGenタスクを実行
org.docksidestage.mylasta.mail配下に自動生成されま
す。
org.docksidestage.mylasta.mail.demo.DemoPostcard
sh manage.sh 12
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"));
});
}
}
6. MailFluteの便利な機能
メールテンプレート
モック
フィルター
動作環境認識
非同期機能
ロギング
6. MailFluteの便利な機能
メールテンプレート
※「実装方法」で説明済み
DBFluteの外出しSQLライクで書ける。
メールテンプレート内で、IF文、FOR文も書け
る。
メールテンプレートからクラスが自動生成されるた
め、タイプセーフで実装できる。
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
6. MailFluteの便利な機能
以下の機能は、SMailDogmaticPostalPersonnelで制御で
きます。
HarborMailDeliveryDepartmentCreatorを参考にして、
実際設定を変えながら説明します。
フィルター
動作環境認識
非同期機能
ロギング
6. MailFluteの便利な機能
この他にも便利な機能があります。
ファイル添付(テキスト、バイナリ)
メールアドレスのpersonal(別名)指定
テキスト、HTMLメールの出し分け
国際化対応(日本語、英語などの出し分け)
プレビュー&内容編集機能(ある程度実装が必要)
etc.
ぜひMailFluteを使ってみてください!
7. MailFluteの機能追加予定
DBFluteのSchemaHTML、LastaFluteのLastaDoc相当の
ドキュメント(mailDoc(仮))を自動生成します。(近日公
開)
8. 質問タイム
End
ご清聴ありがとうございました。

More Related Content

What's hot

Seasar2で作った俺たちのサービスの今
Seasar2で作った俺たちのサービスの今Seasar2で作った俺たちのサービスの今
Seasar2で作った俺たちのサービスの今
Koichi Sakata
 

What's hot (20)

おれおれブログシステムにServiceWorkerを導入してみた #serviceworker
おれおれブログシステムにServiceWorkerを導入してみた #serviceworkerおれおれブログシステムにServiceWorkerを導入してみた #serviceworker
おれおれブログシステムにServiceWorkerを導入してみた #serviceworker
 
Jsug 20160422 slides
Jsug 20160422 slidesJsug 20160422 slides
Jsug 20160422 slides
 
Ansible ネットワーク自動化チュートリアル (JANOG42)
Ansible ネットワーク自動化チュートリアル (JANOG42)Ansible ネットワーク自動化チュートリアル (JANOG42)
Ansible ネットワーク自動化チュートリアル (JANOG42)
 
ドキュメント週末趣味のAWS Elastic Beanstalk 編
ドキュメント週末趣味のAWS Elastic Beanstalk 編ドキュメント週末趣味のAWS Elastic Beanstalk 編
ドキュメント週末趣味のAWS Elastic Beanstalk 編
 
Seasar2で作った俺たちのサービスの今
Seasar2で作った俺たちのサービスの今Seasar2で作った俺たちのサービスの今
Seasar2で作った俺たちのサービスの今
 
Service worker が拓く mobile web の新しいかたち
Service worker が拓く mobile web の新しいかたちService worker が拓く mobile web の新しいかたち
Service worker が拓く mobile web の新しいかたち
 
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
 
Zabbixを使った効果的な運用管理の実現
Zabbixを使った効果的な運用管理の実現Zabbixを使った効果的な運用管理の実現
Zabbixを使った効果的な運用管理の実現
 
Ansible night
Ansible nightAnsible night
Ansible night
 
アメーバブログを支えるデータセンターとインフラ技術
アメーバブログを支えるデータセンターとインフラ技術 アメーバブログを支えるデータセンターとインフラ技術
アメーバブログを支えるデータセンターとインフラ技術
 
Spring Framework ふりかえりと4.3新機能
Spring Framework ふりかえりと4.3新機能Spring Framework ふりかえりと4.3新機能
Spring Framework ふりかえりと4.3新機能
 
[JavaDo] JAX-RS ハンズオン 第2部
[JavaDo] JAX-RS ハンズオン 第2部[JavaDo] JAX-RS ハンズオン 第2部
[JavaDo] JAX-RS ハンズオン 第2部
 
AWS入門編 EC2/ELBを使った、ブログシステム構築ハンズオントレーニング
AWS入門編 EC2/ELBを使った、ブログシステム構築ハンズオントレーニングAWS入門編 EC2/ELBを使った、ブログシステム構築ハンズオントレーニング
AWS入門編 EC2/ELBを使った、ブログシステム構築ハンズオントレーニング
 
S16 Microsoft Azure 上での Chef 環境の構成
S16 Microsoft Azure 上での Chef 環境の構成S16 Microsoft Azure 上での Chef 環境の構成
S16 Microsoft Azure 上での Chef 環境の構成
 
ElasticBeanstalkでのRailsアプリ運用
ElasticBeanstalkでのRailsアプリ運用ElasticBeanstalkでのRailsアプリ運用
ElasticBeanstalkでのRailsアプリ運用
 
cloudpackサーバ仕様書(サンプル)
cloudpackサーバ仕様書(サンプル)cloudpackサーバ仕様書(サンプル)
cloudpackサーバ仕様書(サンプル)
 
Osc2016 tokyo sprint-jobschedulerを活用したoperations as codeの世界
Osc2016 tokyo sprint-jobschedulerを活用したoperations as codeの世界Osc2016 tokyo sprint-jobschedulerを活用したoperations as codeの世界
Osc2016 tokyo sprint-jobschedulerを活用したoperations as codeの世界
 
Service Workerとの戦い ~ 実装編 ~ #scripty03
Service Workerとの戦い ~ 実装編 ~ #scripty03Service Workerとの戦い ~ 実装編 ~ #scripty03
Service Workerとの戦い ~ 実装編 ~ #scripty03
 
20160521 大規模映像配信サービスの Java8による全面リニューアルの裏側
20160521 大規模映像配信サービスの Java8による全面リニューアルの裏側20160521 大規模映像配信サービスの Java8による全面リニューアルの裏側
20160521 大規模映像配信サービスの Java8による全面リニューアルの裏側
 
Spring Integration 超入門
Spring Integration 超入門Spring Integration 超入門
Spring Integration 超入門
 

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

Azure サポート エンジニア直伝 ~ PowerShell 実践活用術 ~
Azure サポート エンジニア直伝 ~ PowerShell 実践活用術 ~Azure サポート エンジニア直伝 ~ PowerShell 実践活用術 ~
Azure サポート エンジニア直伝 ~ PowerShell 実践活用術 ~
ShuheiUda
 
Ec cube開発合宿 プラグインセミナー
Ec cube開発合宿 プラグインセミナーEc cube開発合宿 プラグインセミナー
Ec cube開発合宿 プラグインセミナー
Ayumu Kawaguchi
 
gulp + sass で目指せ倍速コーディング(第2回 gulpfile.jsの分割管理と画像作成の効率化)
gulp + sass で目指せ倍速コーディング(第2回 gulpfile.jsの分割管理と画像作成の効率化)gulp + sass で目指せ倍速コーディング(第2回 gulpfile.jsの分割管理と画像作成の効率化)
gulp + sass で目指せ倍速コーディング(第2回 gulpfile.jsの分割管理と画像作成の効率化)
Toshimichi Suekane
 
勉強会force#4 Chatter Integration
勉強会force#4 Chatter Integration勉強会force#4 Chatter Integration
勉強会force#4 Chatter Integration
Kazuki Nakajima
 
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
linzhixing
 

Similar to MailFluteでメール送信を楽しもう! (20)

どこよりも早い Spring Boot 1.2 解説 #渋谷Java
どこよりも早い Spring Boot 1.2 解説 #渋谷Javaどこよりも早い Spring Boot 1.2 解説 #渋谷Java
どこよりも早い Spring Boot 1.2 解説 #渋谷Java
 
Seasarプロジェクト徹底攻略
Seasarプロジェクト徹底攻略Seasarプロジェクト徹底攻略
Seasarプロジェクト徹底攻略
 
Azure サポート エンジニア直伝 ~ PowerShell 実践活用術 ~
Azure サポート エンジニア直伝 ~ PowerShell 実践活用術 ~Azure サポート エンジニア直伝 ~ PowerShell 実践活用術 ~
Azure サポート エンジニア直伝 ~ PowerShell 実践活用術 ~
 
使ってみた!ioMemoryで実現する噂のAtomic write!
使ってみた!ioMemoryで実現する噂のAtomic write!使ってみた!ioMemoryで実現する噂のAtomic write!
使ってみた!ioMemoryで実現する噂のAtomic write!
 
Ec cube開発合宿 プラグインセミナー
Ec cube開発合宿 プラグインセミナーEc cube開発合宿 プラグインセミナー
Ec cube開発合宿 プラグインセミナー
 
Use JWT access-token on Grails REST API
Use JWT access-token on Grails REST APIUse JWT access-token on Grails REST API
Use JWT access-token on Grails REST API
 
Node.js勉強会 Framework Koa
Node.js勉強会 Framework KoaNode.js勉強会 Framework Koa
Node.js勉強会 Framework Koa
 
Xamarin with Entity Framework Core
Xamarin with Entity Framework CoreXamarin with Entity Framework Core
Xamarin with Entity Framework Core
 
gulp + sass で目指せ倍速コーディング(第2回 gulpfile.jsの分割管理と画像作成の効率化)
gulp + sass で目指せ倍速コーディング(第2回 gulpfile.jsの分割管理と画像作成の効率化)gulp + sass で目指せ倍速コーディング(第2回 gulpfile.jsの分割管理と画像作成の効率化)
gulp + sass で目指せ倍速コーディング(第2回 gulpfile.jsの分割管理と画像作成の効率化)
 
商用ミドルウェアのPuppet化で気を付けたい5つのこと
商用ミドルウェアのPuppet化で気を付けたい5つのこと商用ミドルウェアのPuppet化で気を付けたい5つのこと
商用ミドルウェアのPuppet化で気を付けたい5つのこと
 
Let's build a simple app with .net 6 asp.net core web api, react, and elasti...
Let's build a simple app with  .net 6 asp.net core web api, react, and elasti...Let's build a simple app with  .net 6 asp.net core web api, react, and elasti...
Let's build a simple app with .net 6 asp.net core web api, react, and elasti...
 
初めての Data api cms どうでしょう - 大阪夏の陣
初めての Data api   cms どうでしょう - 大阪夏の陣初めての Data api   cms どうでしょう - 大阪夏の陣
初めての Data api cms どうでしょう - 大阪夏の陣
 
Data apiで実現 進化するwebの世界
Data apiで実現 進化するwebの世界Data apiで実現 進化するwebの世界
Data apiで実現 進化するwebの世界
 
Apache Torqueについて
Apache TorqueについてApache Torqueについて
Apache Torqueについて
 
勉強会force#4 Chatter Integration
勉強会force#4 Chatter Integration勉強会force#4 Chatter Integration
勉強会force#4 Chatter Integration
 
エンジニアのための Azure 基礎知識
エンジニアのための Azure 基礎知識エンジニアのための Azure 基礎知識
エンジニアのための Azure 基礎知識
 
zabbixを使ったクラウド環境の監視とツール連携
zabbixを使ったクラウド環境の監視とツール連携zabbixを使ったクラウド環境の監視とツール連携
zabbixを使ったクラウド環境の監視とツール連携
 
初めての Data API CMS どうでしょう - 仙台編 -
初めての Data API   CMS どうでしょう - 仙台編 -初めての Data API   CMS どうでしょう - 仙台編 -
初めての Data API CMS どうでしょう - 仙台編 -
 
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
 
[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24
[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24
[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24
 

Recently uploaded

Recently uploaded (11)

論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 

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