The English version of quarkus.io is the official project site. Translated sites are community supported on a best-effort basis.

SMTPでのメールの送信

このガイドでは、QuarkusアプリケーションがSMTPサーバーを使用して電子メールを送信する方法を説明します。このガイドは入門編です。mailerの詳細やその使用方法については、 Quarkus Mailer リファレンスドキュメントをご確認ください。

前提条件

このガイドを完成させるには、以下が必要です:

  • 約15分

  • IDE

  • JDK 11+ がインストールされ、 JAVA_HOME が適切に設定されていること

  • Apache Maven 3.8.1+

  • 使用したい場合、 Quarkus CLI

  • ネイティブ実行可能ファイルをビルドしたい場合、MandrelまたはGraalVM(あるいはネイティブなコンテナビルドを使用する場合はDocker)をインストールし、 適切に設定していること

  • SMTPホスト名、ポート、資格情報、および電子メール アドレス

  • cURL

アーキテクチャ

このガイドでは、次のアプリケーションを作成します:

  1. HTTPエンドポイントを公開している

  2. エンドポイントがHTTPリクエストを受信したときにメールを送信

このアプリケーションでは、 命令型 および リアクティブ型 のmailer APIを使用して電子メールを送信する方法をデモします。

添付ファイル、インライン化された添付ファイル、テンプレート化、テスト、より高度な設定については、 Mailer Referenceドキュメントで説明されています。

ソリューション

次のセクションの指示に従って、段階的にアプリケーションを作成していくことをお勧めします。ただし、完成した例にすぐにアクセスすることもできます。

Gitリポジトリをクローンする: git clone https://github.com/quarkusio/quarkus-quickstarts.git 、または archive をダウンロードする。

このソリューションは mailer-quickstart ディレクトリにあります。

Mavenプロジェクトの作成

まず、プロジェクトを用意します。ブラウザで https://code.quarkus.io を開き、以下のエクステンションを選択します。

  1. RESTEasy Reactive - HTTPエンドポイントを公開するために使用しています。

  2. Mailer - 電子メールの送信を可能にします。

  3. Qute - Quarkusのテンプレートエンジン

あるいは、この リンク からアプリケーションを事前に設定することもできます。"Generate your application" をクリックして、ZIPファイルをダウンロードし、お使いのファイルシステムで解凍します。生成されたプロジェクトをお使いのIDEで開きます。ターミナルで、プロジェクトに移動し、開発モードを開始します。

CLI
quarkus dev
Maven
./mvnw quarkus:dev
Gradle
./gradlew --console=plain quarkusDev

HTTPエンドポイントの実装

まず、以下の内容で src/main/java/org/acme/MailResource.java というファイルを作成します。

package org.acme;

import io.quarkus.mailer.Mail;
import io.quarkus.mailer.Mailer;
import io.smallrye.common.annotation.Blocking;

import javax.inject.Inject;
import javax.ws.rs.GET;
import javax.ws.rs.Path;

@Path("/mail")                                                          (1)
public class MailResource {

    @Inject Mailer mailer;                                              (2)

    @GET                                                                (3)
    @Blocking                                                           (4)
    public void sendEmail() {
        mailer.send(
                Mail.withText("quarkus@quarkus.io",                     (5)
                    "Ahoy from Quarkus",
                    "A simple email sent from a Quarkus application."
                )
        );
    }

}
1 HTTPエンドポイントのルートパスの設定
2 Quarkusが管理する Mailer オブジェクトを注入
3 /mail へのHTTP GETリクエストを処理するメソッドを作成
4 RESTEasy Reactiveと 命令型 mailerを使用しているので、 @Blocking アノテーションを追加する必要があります。リアクティブ型バージョンについては後ほど説明します。
5 to (受信者)、件名、本文を設定して、 Mail オブジェクトを作成

MailResource クラスは,アプリケーションが公開しているHTTP APIを実装します。このクラスは http://localhost:8080/mail に対する GET のリクエストを扱います。

つまり、別の端末で、次を実行すると

> curl http://localhost:8080/mail

アプリケーションログに以下のような内容が表示されているはずです。

INFO  [quarkus-mailer] (executor-thread-0) Sending email Ahoy from Quarkus from null to [quarkus@quarkus.io], text body:
A simple email sent from a Quarkus application.
html body:
<empty>

このアプリケーションは 開発モード で動作しているので、メール送信のシミュレーションを行います。それをログに出力するので、何が送信されようとしているのかを確認することができます。

このセクションでは、 命令型 mailer APIを使用しました。メールが送信されるまで呼び出し元のスレッドをブロックします。

リアクティブmailerの使用

最後のセクションでは、 命令型の メーラーを使用しています。QuarkusはリアクティブなAPIも提供しています。

Mutiny

リアクティブ MailerはMutiny リアクティブ型 を使用しています。Mutiny - 直感的リアクティブプログラミングライブラリ をチェックしてください。

同じクラスに以下を追加します。

@Inject
ReactiveMailer reactiveMailer;                          (1)

@GET
@Path("/reactive")                                      (2)
public Uni<Void> sendEmailUsingReactiveMailer() {       (3)
    return reactiveMailer.send(                         (4)
                Mail.withText("quarkus@quarkus.io",
                    "Ahoy from Quarkus",
                    "A simple email sent from a Quarkus application using the reactive API."
                )
        );
}
1 リアクティブmailerをインジェクトします。インポートされるクラスは io.quarkus.mailer.reactive.ReactiveMailer です。
2 /mail/reactive への GET リクエストを処理するためのパスを設定します。なお、ここではリアクティブAPIを使用しているため、 @Blocking は必要ありません。
3 このメソッドは、メールが送信されたときに完了する Uni<Void> を返します。このメソッドは、呼び出し元のスレッドをブロックしません。
4 APIは、 send メソッドが Uni<Void> を返すことを除いて、 _命令型_のものと似ています。

次に、ターミナルで以下を実行します。

> curl http://localhost:8080/mail/reactive

アプリケーションログに以下のような内容が表示されているはずです。

INFO  [quarkus-mailer] (vert.x-eventloop-thread-11) Sending email Ahoy from Quarkus from null to [quarkus@quarkus.io], text body:
A simple email sent from a Quarkus application using the reactive API.
html body:
<empty>

mailerの設定

It’s time to configure the mailer to not simulate the sending of the emails. The Quarkus mailer is using SMTP, so make sure you have access to an SMTP server.

Quarkus mailerはSMTPを使用しています。 src/main/resources/application.properties ファイルでは、ホスト、ポート、ユーザー名、パスワードだけでなく、他の設定面も設定する必要があります。パスワードは、システムのプロパティーや環境変数を使って設定することもできるのを覚えておいてください。詳しくは設定リファレンスガイド を参照して下さい。

ここでは sendgrid を使用する例を示します。

# Your email address you send from - must match the "from" address from sendgrid.
quarkus.mailer.from=test@quarkus.io

# The SMTP host
quarkus.mailer.host=smtp.sendgrid.net
# The SMTP port
quarkus.mailer.port=465
# If the SMTP connection requires SSL/TLS
quarkus.mailer.ssl=true
# Your username
quarkus.mailer.username=....
# Your password
quarkus.mailer.password=....

# By default, in dev mode, the mailer is a mock. This disables the mock and use the configured mailer.
quarkus.mailer.mock=false

mailerの設定が完了したら、上記のようにHTTPエンドポイントを呼び出すと、メールが送信されます。

まとめ

このガイドでは、Quarkusアプリケーションからメールを送信する方法を紹介しました。 mailer エクステンションは、JVMとネイティブモードで動作します。