使用云功能Firebase中的SendGrid发送交易电子邮件

时间:2018-05-06 23:22:13

标签: firebase google-cloud-firestore google-cloud-functions sendgrid

我按照本教程:https://angularfirebase.com/lessons/sendgrid-v3-nodejs-transactional-email-cloud-function/发送转发电子邮件。下一个功能正常工作,但谷歌云功能https://firebase.google.com/docs/functions/beta-v1-diff#cloud-firestore的新更新已停止工作。我应该改变什么?

const functions = require('firebase-functions');
const admin = require('firebase-admin');

admin.initializeApp(functions.config().firebase);
const SENDGRID_API_KEY = functions.config().sendgrid.key

const sgMail = require('@sendgrid/mail');
sgMail.setApiKey(SENDGRID_API_KEY);

exports.firestoreEmail = functions.firestore
.document('mensajes/{mensajeId}')
.onCreate(event => {

    const mensajeId = event.params.mensajeId;

    const db = admin.firestore()

    return db.collection('mensajes').doc(mensajeId)
        .get()
        .then(doc => {

            const mensaje = doc.data()

            const msg = {
                to: 'xx@xx.com',
                from: 'zz@zz.com',
                subject: 'Subject',
                templateId: 'myTemplateID',
                substitutionWrappers: ['{{', '}}'],
                substitutions: {

                    nombre: mensaje.nombre,
                    telefono: mensaje.telefono,
                    email: mensaje.email,
                    mensaje: mensaje.mensaje

                }
            };

            return sgMail.send(msg)
        })
        .then(() => console.log('email sent!'))
        .catch(err => console.log(err))


});

2 个答案:

答案 0 :(得分:0)

在Cloud Functions 1.0.x发布之后,Firestore的更改如下,因为您可以从doc推断:

之前(< = v0.9.1)

exports.dbCreate = functions.firestore.document('notes/{noteId}').onCreate((event) => {
    const newData = event.data.data();
    const param = event.params.noteId;
});

现在(v1.0.0)

exports.dbCreate = functions.firestore.document('notes/{noteId}').onCreate((snap, context) => {
  const newData = snap.data(); 
  const param = context.params.noteId;
});

因此,在您的情况下,这意味着您的Cloud功能将更改为:

exports.firestoreEmail = functions.firestore
.document('mensajes/{mensajeId}')
.onCreate(event => {

    const mensajeId = context.params.mensajeId;  // <- Here is the change

    const db = admin.firestore()

    return db.collection('mensajes').doc(mensajeId)
        .get()
        .then(doc => {...
        .....

答案 1 :(得分:-1)

Cloud Functions Documentation

SendGrid教程

本教程演示如何使用Cloud Functions通过SendGrid平台发送电子邮件,通过webhooks接收SendGrid分析数据,并将分析数据加载到Google BigQuery进行分析。

目标

  • 创建SendGrid帐户。
  • 编写并部署两个HTTP云功能。
  • 编写并部署一个背景云功能。
  • 通过SendGrid从已部署的功能发送电子邮件。
  • 通过webhooks从SendGrid接收分析数据。
  • 将SendGrid分析数据加载到BigQuery进行分析。

enter image description here