使用 Netlify Functions 发送邮件

❥ 赞助

假设您正在使用 JAMstack 风格的网站(不使用服务器端语言),但您想执行一些动态操作,例如 **发送电子邮件**。没问题!这就是 JAMstack 的核心所在。它不仅仅是静态托管。它是静态托管 **加上** 通过 JavaScript 和 API 执行任何您想执行的操作。

以下是设置方法:您需要一个服务来帮助您发送电子邮件。让我们从众多服务中随机选择 Sparkpost。有很多此类服务,我将把比较其功能和定价留给您,因为我们在这里执行的操作非常基本且发送量较低。要使用 Sparkpost 发送电子邮件,您可以使用您的 API 密钥访问其 API,提供有关您要发送的电子邮件的信息,然后 Sparkpost 会发送该邮件。

因此,您需要运行一些服务器端代码来在 API 请求期间保护您的 API 密钥。您可以在哪里运行此代码?Lambda 非常适合此目的( 无服务器函数或云函数)。有很多服务可以帮助您运行这些函数,但没有比 Netlify 更简单的了,您可能已经在 Netlify 上托管您的网站。

准备 Sparkpost

我注册了 Sparkpost 并确保我的帐户已全部设置并已验证。那里的仪表板将为您提供一个 API 密钥

将 API 密钥放入 Netlify

保护 API 密钥的一部分是确保它仅在服务器端代码中使用,**同时也要将其保留在 Git 存储库之外**。Netlify 具有环境变量,这些变量可根据需要将 API 密钥公开给函数,因此我们将将其放置在那里。

启动 Netlify Dev,这将使操作变得更容易

Netlify Dev 是一款神奇的小工具,可以执行诸如运行我们的静态网站生成器等操作。对于我正在开发的 网站,我使用的是 Eleventy,Netlify Dev 会自动检测并自动运行它,这非常棒。但更重要的是,对我们来说,它为我们提供了一个本地 URL,用于运行我们的函数进行测试。

安装完成后,运行它应该如下所示

在上面的终端屏幕截图中,它显示网站本身在 localhost:8080 上启动,但也显示

◈ Lambda server is listening on 59629

这在稍后编写和测试我们的新函数时会非常有用——顺便说一下,如果我们愿意,我们可以构建它。例如

netlify functions:create --name hello-world

然后,它会问一些问题,然后创建一个函数。快速入门非常有用。我们将在稍后介绍编写该函数,但首先,让我们使用此功能……

Sparkpost 有自己的 Node 库

Sparkpost 当然有一个 API 用于发送这些电子邮件。我们可以查看这些文档并了解如何使用正确的数据访问其 URL 端点。

但使用 其 Node.js 绑定 会使操作变得更加容易。让我们通过创建所有需要的文件夹和文件来设置它。

/project
   ... your entire website or whatever ...
   /functions/
      /send-email/
         package.json
         send-email.js

我们只需要 package.json 文件来获取 Sparkpost 库,因此 npm install sparkpost --save-dev 将在这里完成这项工作。

然后 send-email.js 导入该库并使用它

const SparkPost = require('sparkpost');
const client = new SparkPost(process.env.SPARKPOST);

exports.handler = function(event, context, callback) {
  client.transmissions
    .send({
      content: {
        from: '[email protected]',
        subject: 'Hello, World!',
        html:
          "<html><body><p>My cool email.</p></body></html>"
      },
    recipients: [{ address: '[email protected]' }]
  });
}

您需要 查看其文档 以了解错误处理等信息。再说一次,我们只是从众多服务中随机选择了 Sparkpost。任何电子邮件发送服务都将拥有一个 API 和针对流行语言的辅助代码。

注意第 2 行!这就是我们需要 API 密钥的地方,我们不需要对其进行硬编码,因为 Netlify Dev 非常棒,它会**连接到 Netlify** 并让我们从那里使用环境变量。

测试函数

当 Netlify Dev 运行时,我们的 Lambda 函数具有其正在运行的特殊端口。我们将能够使用如下 URL 来运行该函数

http://localhost:34567/.netlify/functions/send-email

此函数在被访问时会运行,因此我们只需在浏览器中访问它即可运行它。

测试

也许您会向此 URL 发送 POST 请求。也许您会发送电子邮件正文。也许您会发送收件人的电子邮件地址。为所有这些操作提供一个测试环境会很好。

好吧,我们可以使用 console.log() 打印内容并在终端中查看它,这始终很方便。此外,我们可以编写函数以返回任何内容,我们可以在某种 API 测试工具(例如 PostmanInsomnia)中查看这些响应。

它有效!

我会把更复杂的操作留给您来完成;)