当我基于vue应用程序中提交的表单在Firestore集合中创建文档时,我希望Firebase后端向我发送电子邮件。
我发现sendgrid是最容易完成工作的地方,打包页面中提到的示例建议我将API密钥存储在Environment变量中。
由于这将从云功能运行,因此我使用了以下命令firebase functions:config:set sendGrid.key="THE API GOES HERE"
,如Firebase文档here
云功能
我在本地初始化了Firebase Cloud函数,然后调用了admin模块,以便在Firestore中创建文档时可以收听onCreate()
,
我在sendGrid
的回调函数中使用了onCreate()
。
我测试了代码并检查了Firebase项目中的功能日志,并成功调用了状态为ok
的代码,这意味着一切都应该正常工作。
这是我在项目根目录index.js
文件夹中的/functions
代码
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
// sendGrid
const sgMail = require('@sendgrid/mail');
// the cloud function
exports.formSubmitted = functions.firestore.document('message/{messageId}').onCreate(doc => {
// referencing the form data
const formData = doc.data();
// the following should be logged in the function logs in my firebase project
console.log(formData);
// retrieving the environment variable
sgMail.setApiKey(functions.config().sendgrid.key);
// the message to be sent
const msg = {
to: 'MY-EMAIL@gmail.com',
from: formData.email,
subject: 'new user submitted our contact form',
text: formData.message,
html: '<h3> test email from sendGrid </h3>'
}
return sgMail.send(msg);
})
结果: 一切正常,除非我没有收到电子邮件。
如果需要进一步的代码/解释,请在下面留下评论。 非常感谢您提供任何帮助或提示。