编辑此页面

使用 SMTP 发送电子邮件

本指南演示了 Quarkus 应用程序如何使用 SMTP 服务器发送电子邮件。这是一个入门指南。有关邮件程序及其用法的更完整解释,请参阅 Quarkus Mailer 参考文档

先决条件

要完成本指南,您需要

  • 大约 15 分钟

  • 一个 IDE

  • 已安装 JDK 17+ 并正确配置了 JAVA_HOME

  • Apache Maven 3.9.9

  • 如果您想使用它,可以选择 Quarkus CLI

  • 如果您想构建本机可执行文件(或者如果您使用本机容器构建,则为 Docker),可以选择安装 Mandrel 或 GraalVM 并进行适当的配置

  • SMTP 主机名、端口和凭据,以及电子邮件地址

  • cURL

架构

在本指南中,我们将构建一个应用程序

  1. 公开一个 HTTP 端点,

  2. 在端点收到 HTTP 请求时发送电子邮件。

该应用程序将演示如何使用命令式响应式邮件程序 API 发送电子邮件。

附件、内联附件、模板、测试和更高级的配置涵盖在 Mailer 参考文档 中。

解决方案

我们建议您按照以下章节中的说明,逐步创建应用程序。但是,您可以直接转到完整的示例。

克隆 Git 存储库:git clone https://github.com/quarkusio/quarkus-quickstarts.git,或下载一个存档

解决方案位于 mailer-quickstart 目录中。

创建 Maven 项目

首先,我们需要一个新项目。使用以下命令创建一个新项目

CLI
quarkus create app org.acme:mailer-quickstart \
    --extension='rest,mailer,qute' \
    --no-code
cd mailer-quickstart

要创建 Gradle 项目,请添加 --gradle--gradle-kotlin-dsl 选项。

有关如何安装和使用 Quarkus CLI 的更多信息,请参阅 Quarkus CLI 指南。

Maven
mvn io.quarkus.platform:quarkus-maven-plugin:3.24.4:create \
    -DprojectGroupId=org.acme \
    -DprojectArtifactId=mailer-quickstart \
    -Dextensions='rest,mailer,qute' \
    -DnoCode
cd mailer-quickstart

要创建 Gradle 项目,请添加 -DbuildTool=gradle-DbuildTool=gradle-kotlin-dsl 选项。

对于 Windows 用户

  • 如果使用 cmd,(不要使用反斜杠 \ 并将所有内容放在同一行上)

  • 如果使用 Powershell,请将 -D 参数放在双引号中,例如 "-DprojectArtifactId=mailer-quickstart"

此命令会生成一个 Maven 结构,其中包括以下扩展

  • Quarkus REST(以前称为 RESTEasy Reactive),用于公开 REST 端点

  • Mailer,以便我们可以发送电子邮件

  • Qute,我们的模板引擎

如果您已经配置了 Quarkus 项目,则可以通过在项目根目录中运行以下命令将 mailer 扩展添加到项目中

CLI
quarkus extension add mailer
Maven
./mvnw quarkus:add-extension -Dextensions='mailer'
Gradle
./gradlew addExtension --extensions='mailer'

这会将以下内容添加到您的 pom.xml

pom.xml
<dependency>
    <groupId>io.quarkus</groupId>
    <artifactId>quarkus-mailer</artifactId>
</dependency>
build.gradle
implementation("io.quarkus:quarkus-mailer")

在 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 jakarta.inject.Inject;
import jakarta.ws.rs.GET;
import jakarta.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 由于我们使用的是 Quarkus REST 和命令式邮件程序,因此需要添加 @Blocking 注释。稍后我们将看到响应式变体。
5 通过配置收件人、主题和正文来创建 Mail 对象

MailResource 类实现了我们应用程序公开的 HTTP API。它处理 `https://:8080/mail` 上的 GET 请求。

因此,如果您在另一个终端中运行

> curl https://: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>

由于应用程序以开发模式运行,因此它会模拟发送电子邮件。它会在日志中打印出来,因此您可以检查将要发送的内容。

本节使用了命令式邮件程序 API。它会阻塞调用线程,直到电子邮件发送完毕。

Quarkus Mailpit 扩展对于测试电子邮件非常有用。它为 Mailpit 提供了开发服务,Mailpit 是一个用于测试和调试电子邮件发送的精美 UI。

使用响应式邮件程序

上一节使用了命令式邮件程序。Quarkus 还提供了响应式 API。

Mutiny

响应式邮件程序使用 Mutiny 响应式类型。如果您不熟悉 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 注入响应式邮件程序。要导入的类是 io.quarkus.mailer.reactive.ReactiveMailer
2 配置用于处理 /mail/reactive 上 GET 请求的路径。请注意,由于我们使用的是响应式 API,因此不需要 @Blocking
3 该方法返回一个 Uni<Void>,当邮件发送完成时它会完成。它不会阻塞调用线程。
4 API 与命令式 API 类似,只是 send 方法返回一个 Uni<Void>

现在,在您的终端中运行

> curl https://: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>

配置邮件程序

现在是时候配置邮件程序以模拟发送电子邮件了。Quarkus 邮件程序使用 SMTP,因此请确保您能够访问 SMTP 服务器。

src/main/resources/application.properties 文件中,您需要配置主机、端口、用户名、密码以及其他配置方面。请注意,密码也可以使用系统属性和环境变量进行配置。有关详细信息,请参阅 配置参考指南

流行的邮件服务的配置涵盖在 参考指南中。

配置好邮件程序后,如果您调用上面所示的 HTTP 端点,您将发送电子邮件。

相关内容

在相同的扩展上

关于相同主题