在 Fastify 中使用 Nodemailer 发送邮件

阅读时长 7 分钟读完

邮件服务是现在互联网产品中不可或缺的一部分,例如注册验证、密码找回等等都需要发送邮件。而邮件服务是一个比较比较复杂的系统,并不是每个开发者都能熟练掌握。在前端领域中,Node.js 相关应用越来越广泛,Nodemailer 是一款比较常用的 Node.js 的邮件库,通过 Fastify 与 Nodemailer 的结合,可以方便地实现邮件服务。

Nodemailer 简介

Nodemailer 是一款使用 Node.js 实现的邮件库,它支持多种邮件传输方式,例如 SMTP、Gmail、Hotmail 等等。Nodemailer 不仅仅只是发送邮件的功能,它还支持邮件模板定制、附件添加等更加复杂的操作。

Fastify 简介

Fastify 是一个针对 Node.js 的高性能 Web 框架,它的设计初衷是保持开发简单和处理速度快,并支持插件扩展。Fastify 的优势在于:HTTP 的请求和响应采用 JSON Schema 进行标准化验证,表现层的设计采用了利于前端熟悉的接口设计模式,性能方面的考虑也非常出色。

Fastify 与 Nodemailer 结合

我们可以通过 Nodemailer 的 API 功能,将邮件发送添加到 Fastify 的路由逻辑中,从而 实现邮件服务。下面是一个简单的使用场景,当 Fastify 接收到客户端的 GET 请求后,调用 Nodemailer 发送邮件。

-- -------------------- ---- -------
----- ------- - -------------------- ------- ---- ---
----- ---------- - ----------------------

-- ------- ---------- --
----- ----------- - ----------------------------
  ----- -----------------
  ----- ----
  ----- -
    ----- ---------------------
    ----- -----------
  --
  ------- -----
---

-- --------- ---
------------------------------ ----- --------- ------ -- -
  ----- - -- - - ---------------
  ----- ----------- - -
    ----- ---------------------
    ---
    -------- -------- - ---------- ----
    ----- ------ ---- ------- - ------------
  --
  --- -
    ----- ---- - ----- ----------------------------------
    -------------------- ----- --------------------
    -------------------------------
  - ----- ------- -
    -------------------- ------ -----------
    ----------------------
  -
---

-------------------- ----- -------- -- -
  -- ----- -
    -----------------------
    ----------------
  -
  ------------------- --------- -- -------------
---

在上面的代码中,我们首先创建了一个发送邮件的 transporter 对象,在这里我们选择了 Gmail 服务器进行发送,并完成了用户认证。然后添加一个路由,当客户端请求 /send-email/:to 时,会将请求的参数 to 和邮件参数 mailOptions 传递给 sendMail API ,当邮件发送成功后,会在控制台输出 Message Sent: [id],客户端会收到回复邮件发送成功,否则客户端会收到回复邮件发送失败。需要注意的是,为了方便,这里我们使用了 async 和 await 的方式来异步处理函数返回值。

Nodemailer 的高级用法

除了发送简单邮件之外,Nodemailer 还有许多高级用法,例如发送 HTML 邮件、邮件模板、邮件转发等功能。下面我们来介绍一下如何通过 Nodemailer 添加带有模板的 HTML 邮件发送功能。

添加 HTML 模板

在发送邮件时,HTML 模板的作用是可以让我们自定义邮件的内容,并将数据作为模板变量传递到模板中。在 Nodemailer 中,我们可以通过使用 Handlebars 模板库来完成这一个功能。

首先,我们需要安装 Handlebars 模板库。

然后,添加渲染模板的函数。

-- -------------------- ---- -------
----- ------ - ------------------------------

----- --- - ---------------
  -------- -------
  -------------- -----------
  ----------- -------------------- -------- -----------
  ------------ -------------------- -------- ------------
---

----------------
  ----------
  -----
    ----------- -
      -------- -------
      ------------ -------------------- -------- ------------
      ----------- -------------------- -------- -----------
      -------------- -----------
    --
    --------- -------------------- ---------
    -------- -------
  ---
--

在上面的代码中,我们使用 express-handlebars 和 nodemailer-express-handlebars 两个库来处理邮件的 HTML 模板。

使用 HTML 模板发送邮件

-- -------------------- ---- -------
------------------------------ ----- --------- ------ -- -
  ----- - -- - - ---------------
  ----- -------- - -
    ---
    -------- -------- - ---------- ----
    --------- --------
    -------- -
      ------ -------- - ---------- ----
      ----- ------ ------- - ---------- --------
    --
  --
  --- -
    ----- ---- - ----- -------------------------------
    -------------------- ----- --------------------
    -------------------------------
  - ----- ------- -
    -------------------- ------ -----------
    ----------------------
  -
---

在上面的代码中,我们首先定义了一个包含邮件相关信息的对象 mailData,其中包括了邮件主题、收件人、模板的名称和模板变量的值。这里的模板名称是指在 views 目录下对应的模板文件名称,context 是模板中需要替换的变量值,例如,title 和 body 都是模板中的变量,我们可以在模板中使用 {{title}} 和 {{body}} 来将模板中的变量渲染出来,最后调用 sendMail 方法就可以发送 HTML 邮件了。

总结

通过以上的介绍,我们了解到了如何在 Fastify 中使用 Nodemailer 框架来实现邮件服务,并且我们还介绍了 Nodemailer 的高级用法,使用 Nodemailer 可以轻松实现图片、附件上传及发送的功能,极大地方便后续的开发。这样可以帮助开发者更好地理解 Fastify 和 Nodemailer 的优势,从而可以快速实现邮件发送功能。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6498fb5048841e98945ebbb6

纠错
反馈