我正在尝试将 Sendgrid 的电子邮件 API 与我的 Firebase 网络应用程序集成。这是我所做的:
1 - 安装了 Sendgrid 的邮件包
npm install @sendgrid/mail
2 - 在我的 Sendgrid 帐户上创建了一个 API key
3 - 使用 Firebase 的环境配置将 API key 分配给环境变量:
firebase functions:config:set sendgrid.key=SG.xxxxxxxxxxxxxxxxxxxxxx.xxxxxxxxxxxxxxxxxxxx_xxxxxx_xxxxxxxxxxxxxxx
4 - 检查是否正确分配了环境变量:
firebase functions:config:get
结果:
5 - 导入 sendgrid 邮件并设置 API key :
import * as sgMail from '@sendgrid/mail';
const API_KEY = functions.config().sendgrid.key
const TEMPLATE_ID = functions.config().sendgrid.template
sgMail.setApiKey(API_KEY);
6 - 创建了一个新的用户触发器来发送测试邮件
export const welcomeEmail = functions.auth.user().onCreate(user => {
const msg = {
to: user.email,
from: 'contato@mycompanydomain.com.br',
templateId: TEMPLATE_ID,
dynamic_template_data: {
subject: 'test subject!',
name: user.displayName,
},
};
return sgMail.send(msg);
})
7 - 已部署的 Firebase 函数:
firebase deploy --only functions
完成此操作后,我希望至少可以正确设置 API key ,但我不断从 firebase 函数日志中收到以下错误:
我不知道哪里出了问题。我已经尝试了一些事情:
1- 创建一个新的 API key 并重新开始整个过程。
2- 将 API 直接粘贴到 sgMail.setApiKey() 方法中。喜欢:
sgMail.setApiKey("SG.xxxxxxxxxxxxxxxxxxxxxx.xxxxxxxxxxxxxxxxxxxx_xxxxxx_xxxxxxxxxxxxxxx")
所有这些都给出了相同的“API key does not start with SG”错误。
你们能帮我找出问题所在吗?
版本
"@sendgrid/mail": "^7.2.1",
"firebase-admin": "^8.10.0",
"firebase-functions": "^3.8.0"
非常感谢
最佳答案
对于遇到同样问题的人,我通过使用新的 firebase 包并从 firebase-functions 导入配置来解决它。 所以我的代码看起来像这样:
import functions, { config } from "firebase-functions";
import sendgrid from "@sendgrid/mail";
const MY_SENDGRID_API_KEY = config().sendgrid.key;
sendgrid.setApiKey(MY_SENDGRID_API_KEY);
关于firebase - 试图弄清楚为什么 Sendgrid 的电子邮件 API 与 Firebase 函数的集成返回 "API key does not start with SG.",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62986699/