Firebase云功能可在联系表单提交到Firestore时使用sendgrid发送电子邮件

时间:2018-12-29 17:12:59

标签: firebase vue.js environment-variables google-cloud-functions sendgrid

当我基于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);
})

结果: 一切正常,除非我没有收到电子邮件。

如果需要进一步的代码/解释,请在下面留下评论。 非常感谢您提供任何帮助或提示。

0 个答案:

没有答案