一旦检测到数据库中有写入,我就无法从 Firebase 函数发送电子邮件。
firebase functions:config:set
尽管如此,我的控制台上总是出现 403 错误。
加载资源失败:服务器响应状态为403()
当然我的应用程序已正确初始化和部署, 我运行了
npm install -g firebase-tools
并检查了 package.json 文件夹中的 sendgrid 依赖项。
我什至在 firebase.json 中添加了:`
"functions": [
{
"sendEmail": {
"allow": "true"
},`
我的代码:
import * as functions from 'firebase-functions';
import admin = require('firebase-admin');
admin.initializeApp();
import * as sgMail from '@sendgrid/mail';
// Configure SendGrid with your API key
const sendgridApiKey = functions.config().sendgrid.api_key;
sgMail.setApiKey(sendgridApiKey);
export const sendEmail = functions.database
.ref('{Client}')
.onCreate(async (snapshot, context) => {
try {
const writeData = snapshot.val();
// Retrieve necessary information from the database
const fromEmail = functions.config().sendgrid.sender_email;
const toEmail = writeData.email;
const message = writeData.message;
const msg = {
to: toEmail,
from: fromEmail,
subject: 'Nouvelle écriture détectée dans la base de données',
text: `Un nouvel enregistrement a été ajouté à la base de données : ${message}`,
html: `Un nouvel enregistrement a été ajouté à la base de données : ${message}`,
templateId: functions.config().sendgrid.sender_templates,
};
// Send the email via SendGrid
await sgMail.send(msg);
console.log('E-mail envoyé avec succès !');
} catch (error) {
console.error('Erreur lors de l\'envoi de l\'e-mail :', error);
}
});
我没有尝试你的云功能代码,但我可以看到两个潜在的问题:
require()
和 import()
语句。您应该执行以下操作:import * as functions from 'firebase-functions';
import * as admin from 'firebase-admin';
admin.initializeApp();
import * as sgMail from '@sendgrid/mail';
sgMail.send()
)已完成。有关此关键点的更多详细信息,请参阅 Firebase 文档。export const sendEmail = functions.database
.ref('{Client}')
.onCreate(async (snapshot, context) => {
try {
const writeData = snapshot.val();
// Retrieve necessary information from the database
const fromEmail = functions.config().sendgrid.sender_email;
const toEmail = writeData.email;
const message = writeData.message;
const msg = {
to: toEmail,
from: fromEmail,
subject: 'Nouvelle écriture détectée dans la base de données',
text: `Un nouvel enregistrement a été ajouté à la base de données : ${message}`,
html: `Un nouvel enregistrement a été ajouté à la base de données : ${message}`,
templateId: functions.config().sendgrid.sender_templates,
};
// Send the email via SendGrid
await sgMail.send(msg);
console.log('E-mail envoyé avec succès !');
return true; <==== See addition here
} catch (error) {
console.error('Erreur lors de l\'envoi de l\'e-mail :', error);
return true; <==== See addition here
}
});
我也会尝试不使用
templateId
选项,只是为了检查这是否是问题的原因。