Yandex 功能发送邮件

Yandex 功能发送邮件

今天我们将创造所谓的。 Yandex 函数 (官方名字 Yandex 云功能),与邮寄服务勾结 SendGrid 会向正在安静睡觉的用户发送“肥皂”(开玩笑 - 我知道我们都反对垃圾邮件)。

我也是传统服务器的反对者(但不是狂热),也是所谓的支持者。 无服务器 (无服务器)解决方案,因为我不喜欢(而且我真的不知道如何)管理服务器,更重要的是,为它们未加载的时间付费。 另一件事是功能。 有人在没有我的情况下为他们提供服务,我只支付电话费。 2019 年 XNUMX 月初,Yandex 推出了 Yandex 云功能 - 似乎是俄罗斯联邦的第一个 无服务器。 特别好的一点是,对于爱丽丝的技能来说,它们通常是免费的,所以从那时起它们就一直在我的余光中。 但让我们开始吧。

让我们想象一下这个场景。 您的应用程序(例如,Alice 的技能 记住和忘记 顺便说一句,这也适用于 Yandex 函数)邀请用户购买数字产品,例如附加选项,然后用户进行付款。 某种支付系统(令人困惑地类似于 Yandex的)处理付款并将其发送到您提供的地址(我们将有一个调用链接 Yandex 函数) HTTP- 包含付款详细信息的请求,例如付款人的金额、全名、电话号码和电子邮件。 我们希望以某种方式处理这些数据,例如:检查金额、在数据库中进行适当的输入、发送给用户 短信 и 电邮 并确认收到付款和进一步说明。 所以你自己 微服务.

关于如何从 Yandex 函数 在数据库中输入条目 云消防站 我们已经在教程中看过了 爱丽丝记得一切 (我认为,将来我们将考虑另一个数据库的示例 - Yandex 数据库)。 关于如何发送给用户 短信 并将我们的应用程序与 Yandex.Money ——我们会在不久的将来解决这个问题。 现在我们只处理发送信件的问题。

1. 在SendGrid中创建一个帐户

注意SendGrid 只是我的选择,我这样做有几个原因,最主要的一个是他们有一个现成的 Node.js SDK。 您可以选择任何其他邮寄服务。

继续前进 到账户注册页面 并在那里填写注册表。 然后我们去 卖家专用后台,在导航面板中选择 电子邮件 API -> 集成指南,并在主面板上 - 网络API инажимаем кнопку 。 一切都如图所示:

Yandex 功能发送邮件

在下一步中我们选择 Node.js的:

Yandex 功能发送邮件

接下来我们想出我们的 API-键名称(只会显示在控制台的键列表中,与我们以后的代码无关;我只是想出了一个不朽的 演示 API 密钥) 并按下按钮 创建密钥:

Yandex 功能发送邮件

密钥将生成,我们将复制它并严格保密。 我们将有一个带有按钮的屏幕 验证集成,如下图所示,不过我们先不点击它,我们继续写代码:

Yandex 功能发送邮件

2. 编写代码

但正如您所看到的,代码本身小得离谱 - 22 行!

Yandex 功能发送邮件

排队 #8 我的电子邮件是硬编码的(因此害羞地隐藏) - 请注明您的电子邮件。 在现实生活中,我们会收到所有的数据(包括 邮箱地址) 来自对象 活动。 例如,如果该方法 解决方案&帖子 一个对象被发送到我们的函数 用户 带字段(属性) 邮箱地址,该字段的值可以这样获取:

const { user } = event;
const email = user.email;

如果使用该方法将电子邮件地址传递给函数 的GET例如: https://functions.yandexcloud.net/123abc?[email protected]
参数值 邮箱地址 你可以这样得到它:

const email = event.queryStringParameters.email;

查看对象中到底包含什么 活动,你可以创建最简单的 Yandex 函数 并用查询来扭转它:

module.exports.handler = async function (event) {
  return {
   'statusCode': 200, 
   'body': JSON.stringify(event)
  };
};

官方文档对此进行了更详细的讨论(但不太清楚) 这里.

因此,创建一个项目目录(例如, 邮件),进入其中,初始化项目,安装依赖:

mkdir mailer
cd mailer
npm init -y
npm i @sendgrid/mail email-validator dotenv

这里只需要包 @sendgrid/邮件. 塑料袋 电子邮件验证器 检查电子邮件地址的有效性(我怎么没有立即猜到?),但如果我们确定它(它已经在没有我们的情况下检查了很长时间),我们就不必安装它(并且,当然,我们不必在代码中检查它)。 塑料袋 Dotenv 设计用于从文件中读取记录 .ENV 作为运行时变量。 但在 Yandex 函数 可以将这些变量直接放入运行时环境中。 如何? - 我将在下面展示它。 因此包 Dotenv 你也可以不安装它,并且该文件 .ENV - 不创建,同时代码在文件中 index.js 不要换。 但是这里我们已经安装了这个包,所以我们创建文件 index.js и .ENV:

touch index.js
touch .env

在文件中 index.js 编写 22 行代码,如上面的屏幕截图所示(仅在行 #8 更改您的电子邮件),并在文件中 .ENV - (不带任何引号或标点符号)指定键名/值对 API我们最近在控制台中收到的 SendGrid:
SENDGRID_API_KEY=您的秘密 sendgrid-api-key

如果您想要减少工作量,请克隆存储库并安装软件包:

git clone https://github.com/stmike/ycf-sendgrid-mailer-tutorial.git
cd ycf-sendgrid-mailer-tutorial
npm i

在文件中 index.js, 排队 #8 更改电子邮件; 在根目录下创建一个文件 .ENV,并在其中指示键的名称/值 API,如上所示。

3. 部署

或多或少清楚和详细地讲述了 Yandex.Cloud 以及如何将其放置在那里 Yandex 函数 我的文章中描述的 爱丽丝在 Bitrix 的土地 - 我将那些无知的人送到这个国家,并为其他所有人(以及那些已经返回的人) - 然后发送一本小漫画书(即一系列图片和文字)。

我们创造 拉链-archive(我们称之为,例如, 邮件程序.zip),其中我们包含目录 节点模块 和文件 .env、index.js - 我们项目目录中的所有内容:

Yandex 功能发送邮件

我们正确地创建了一个名为...的函数 - 邮件,在左侧导航菜单中我们输入 编者,填写必填字段,然后切换到选项卡 压缩包 下载我们的档案 邮件程序.zip:

Yandex 功能发送邮件

这是前面提到的下载选项 API密钥 直接在这里,而不是在项目中创建文件 .ENV,并且不安装该包 Dotenv。 但我们已经完成了所有这些,所以我展示它只是为了提供信息。 也就是说,不需要重复!

Yandex 功能发送邮件

现在点击右上角的按钮 创建版本,然后等待几秒钟。 当一切准备就绪后,我们将自动进入该部分 查看。 在那里我们将启用该选项 公共职能以便您可以从外部世界与它进行交互。

Yandex 功能发送邮件

您会看到铭文对面的蓝色链接 通话链接? 点击它。 将打开一个空的浏览器窗口...但是等等 - 我收到一封电子邮件:

Yandex 功能发送邮件

现在您可以返回控制台 SendGrid, 并按下按钮 验证集成。 系统将通过其通道检查所有内容,因此它应该返回如下屏幕:

Yandex 功能发送邮件

就是这样,伙计们(当然还有女孩)——一切都非常简单和优雅! 将会有更多文章。 如果有人有兴趣阅读此类内容,请订阅,这样您就不会错过。

4. 捐款

Yandex 功能发送邮件

来源: habr.com

添加评论