每次Firestore中有新记录时,我都在Firebase中使用一个函数发送电子邮件,这工作正常,但似乎SendGrid已更新到新版本的事务模板。
我之前在 SendGrid 交易模板的正文中拥有的是:
nombre: {{nombre}}
email: {{email}}
celular: {{celular}}
valorPropiedad: {{valorPropiedad}}
这工作正常,也就是说,它使用新记录的数据发送邮件(每次 Firestore 中有新记录时(,但现在它只发送邮件,但到达时没有任何数据。我认为 SendGrid 发生了一些变化?还是我的功能主题?
在我使用 Angular 5 之前,我现在使用的是版本 6。
这是我的函数索引的代码.js:
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();
const SENDGRID_API_KEY = functions.config().sendgrid.key
const sgMail = require('@sendgrid/mail');
sgMail.setApiKey(SENDGRID_API_KEY);
exports.firestoreEmail2 = functions.firestore
.document('domiciliarios/{domiciliarioId}')
.onCreate((snap, context) => {
const domiciliarioId = context.params.domiciliarioId;
const db = admin.firestore()
return db.collection('domiciliarios').doc(domiciliarioId)
.get()
.then(doc => {
const domiciliario = doc.data();
const msg = {
from: 'mail1@mail.com',
to: 'mail2@mail.com',
subject: 'mySubject',
templateId: 'myTemplateId',
substitutionWrappers: ['{{', '}}'],
substitutions: {
nombre: domiciliario.nombre,
email: domiciliario.email,
celular: domiciliario.celular,
valorPropiedad: `US$ ${domiciliario.valorPropiedad}`,
}
};
return sgMail.send(msg)
})
.then(() => console.log('email sent!'))
.catch(err => console.log(err))
});
经过一些蛮力测试,这种组合奏效了。
exports.firestoreEmail = functions.firestore
.document( 'members/{memberId}' )
.onCreate( ( snap, context ) => {
const member = snap.data();
mail.setApiKey( SENDGRID_API_KEY );
const msg = {
to: member.email,
from: "hello@angularfirebase.com",
subject: "Welcome",
templateId: "xxx",
substitutions: {
name: member.name,
email: member.email,
membershipId: member.memberId
},
dynamic_template_data:
{
name: member.name,
email: member.email,
membershipId: member.memberId
}
};
return mail.send( msg ).then( () => console.log( 'email sent to receiver2!' ) )
.catch( err => console.log( err ) );
} );