Quarkus MailerでTwilio SendGridのメールを送信する
- 2022年12月1日
- by 菊田 洋一
- Category: 技術ネタ

SendGridサポートエンジニアの菊田(@kikutaro_)です。先日、Javaのフレームワークの1つであるQuarkusを調べていたところ、Quarkus Mailerというエクステンションがあることを知りました。早速Twilio SendGridのメールを送ってみたので手順をまとめます。
Quarkusのプロジェクトを作成する
Quarkusはコンテナ環境の動作に最適化されたオープンソースのJavaアプリケーションフレームワークです。Red Hatが主導していて、日本語版のサイトも公開されています。
プロジェクトのセットアップはとても簡単です。https://code.quarkus.io/ にアクセスして使いたいエクステンションを選ぶと、MavenやGradleのプロジェクトを作成してくれます。
今回のブログでは、Webフォームに入力したメールアドレスに通知を送るサンプルを作りました。

プロジェクトはMavenを選び、エクステンションは「Quarkus Mailer」の他、Web APIを作成する「RESTEasy Reactive」を選択しました。
なお、私の開発環境はUbuntu 22.04 LTS(Jammy Jellyfish)でJDKはEclipse Temurin 19.0.1+10です。
ダウンロードしたプロジェクトを実行します。
quarkus dev
http://localhost:8080/ にアクセスして次のページが表示されたら準備完了です。
Quarkus Mailerによる送信
最初に、SendGridのSMTP接続情報をapplication.propertiesファイルに設定します。quarkus.mailer.passwordの部分にはSendGridのアカウントで発行したAPIキー、quarkus.mailer.fromには送信元のメールアドレスを設定してください。
quarkus.mailer.host=smtp.sendgrid.net quarkus.mailer.port=587 quarkus.mailer.username=apikey quarkus.mailer.password=SG.xxxxxxxxxxxxxxxxxxxx quarkus.mailer.login=REQUIRED quarkus.mailer.from=kikutaro@kikutaro.tech quarkus.mailer.mock=false # In dev mode, prevent from using the mock SMTP server
実装はシンプルです。POSTリクエストのボディに指定されたメールアドレス宛てにメールを送ります。
package tech.kikutaro;
import io.quarkus.mailer.Mail;
import io.quarkus.mailer.Mailer;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.inject.Inject;
import org.jboss.resteasy.reactive.RestForm;
@Path("/form")
public class FormResource {
@Inject Mailer mailer;
@POST
@Produces(MediaType.TEXT_PLAIN)
public String form(@RestForm String email) {
mailer.send(Mail.withText(email, "メルマガ購読の登録完了", "登録いただき、ありがとうございました。"));
return "登録を受け付けました。メールをご確認ください。";
}
}
HTMLのフォームを用意します。
<form action="form" method="post" enctype="multipart/form-data">
<input type="email" name="email" placeholder="Email" />
<button>送信</button>
</form>
メールアドレスを入力してボタンを押すと、Quarkus Mailerを使ってSendGridからのメールが送られます。

Quarkus Mailerの機能はまた別のブログで紹介していこうと思います。




