Serverless 架构下的邮件发送服务

阅读时长 9 分钟读完

随着服务器成本的上升,Serverless 架构凭借其低成本、高可靠性等优势,逐渐成为Web应用开发的首选架构之一。在 Serverless 架构中有着许多服务可以供我们使用,比如,AWS Lambda、Google Cloud Functions 等等。现在,我们来探讨一下 Serverless 架构下如何实现邮件发送服务。

Serverless 架构下的优势

Serverless 架构的优势在于可以快速部署、快速扩容和无需维护服务器,同时也不要求开发人员去了解服务器配置等一系列问题。对于 Web 开发者来说,这意味着他们可以专注于开发,无需关心基础架构,从而提高了开发效率。

邮件发送服务的需求

在 Web 应用中,邮件发送是必不可少的一个功能,邮件发送服务可以用于各种用途,比如注册、登录、密码重置等等。邮件发送服务需要的功能主要包括:

  1. 支持各种 MIME 类型:邮件头、正文、附件等;
  2. 支持各种邮件服务器:SMTP、SendGrid、SES等;
  3. 支持邮件发送任务的异步处理;
  4. 防止滥用:**应用对邮件内容进行验证,并进行安全加密,保证信息的安全性。

接下来,我们通过一个实际的案例来演示如何在 Serverless 架构下完成邮件发送服务。

使用 Serverless 框架

Serverless 框架是一个构建和部署 Serverless 应用的开源框架。这个框架可以帮助我们快速创建和部署 Serverless 应用程序,减少了错误率和时间成本。

在本例中,我们将选择 AWS Lambda 作为后端服务,并使用 Serverless 框架来快速完成邮件发送服务。

安装 Serverless

首先,我们需要安装 Serverless。可以使用以下命令从 npm 安装 Serverless:

Serverless CLI 需要 Node.js 版本 6 或更高版本。

创建 Serverless 项目

创建一个 Serverless 项目非常简单,可以使用以下命令:

这个命令将会创建一个 Node.js 示例服务,位于 my-service 目录中。

配置 Serverless 项目

我们在服务根目录中创建 serverless.yml 文件,以配置 Serverless 项目:

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

在这里,我们定义了我们的 Serverless 服务的名称,并指定了我们将使用的 Provider 和 Runtime。我们还定义了 Serverless 服务中一个名为 sendEmail 的函数。最后,我们在Plugins中添加了几个必须的插件,用于本地开发环境的测试使用。

实现邮件发送服务

接下来是最关键的一步 - 编写邮件发送代码。在此之前,我们需要明确要实现的邮件发送功能。我们使用 AWS SES 来作为邮件服务器,并编写 Node.js 代码来发送邮件。我们这里采用 AWS SES 的 SDK。

以下是我们的示例测试邮件:

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

以下是我们的 Node.js 代码:

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

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

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

在此代码中,我们定义了一个名为 handler 的函数,该函数接收有关邮件的信息并将其发送到 AWS SES 邮件服务器。我们还编写了函数以返回响应。最后,我们在此处将自定义“发件人”地址与发送邮件信息相关联。

部署 Serverless 服务

部署 Serverless 服务非常简单,只需要使用以下命令即可:

在部署完成之后,我们可以使用以下代码测试发送邮件:

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

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

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

在这里,我们定义了一个名为 email 的对象,其中包含有关邮件的信息。我们随后使用 AXIOS JavaScript 库发送 HTTP POST 请求,并将其发送到我们的 Serverless 服务中。在 Serverless 服务中,我们通过解码的 JSON 数据来对邮件消息进行验证,并对邮件消息进行处理。

本地开发与测试

我们可以在本地开发环境中模拟发送邮件的各种情况, Serverless 框架中的 serverless-offline 插件可以帮助我们开发和测试本地 Serverless 服务。只需要使用以下命令即可启动本地 Serverless 服务:

使用以下命令可以在本地运行功能测试:

在这里,我们只是测试了我们的 Handler 是否能够通过 SES 正确发送电子邮件。在开发代码时,我们还需要考虑邮件发送请求的错误、防止恶意访问等安全问题。

总结

在这篇文章中,我们介绍了 Serverless 架构和 Serverless 框架,并探讨了如何使用 AWS Lambda、AWS SES 来发送电子邮件。我们使用 Serverless 框架帮助我们快速创建和部署了 Serverless 应用程,同时也测试了一些本地开发和测试工具。

通过本文的学习,你已经知道如何在 Serverless 架构下使用 Serverless 框架实现邮件发送服务,并可以使用这些技术来改善您的工作流。使用 Serverless 架构的主要好处是可以提高开发速度,减少成本,增加可靠性和安全性。

参考资料

[1] Serverless架构:https://serverless.com/learn/overview/

[2] Serverless框架:https://serverless.com/framework/docs/

[3] AWS SDK for JavaScript:https://aws.amazon.com/sdk-for-node-js/

[4] AWS SES开发人员文档:https://docs.aws.amazon.com/ses/latest/DeveloperGuide/Welcome.html

[5] Serverless with AWS Lambda – Developing a Serverless Email Sender Service:https://medium.com/@yashishdua/serverless-with-aws-lambda-developing-a-serverless-email-sender-service-e4e4e4b0844b

[6] Serverless邮件服务 - AWS Lambda + SES:http://iamzhongyong.com/iot-craft-tutorials/serverless-serverless-mail-service-with-aws-lambda-ses-aws-tutorial.pdf

[7] Serverless Email Service with AWS SES:https://trio.dev/blog/serverless-email-service-with-aws-ses/

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

纠错
反馈