Шаблон SendGrid для транзакционных функций v3 Firebase - PullRequest
0 голосов
/ 25 сентября 2018

Я использую функцию в Firebase для отправки электронной почты каждый раз, когда в Firestore появляется новая запись, это работало нормально, но похоже, что SendGrid был обновлен до новой версии транзакционных шаблонов.

То, что у меня было раньше в теле моего шаблона транзакции SendGrid, было:

nombre: {{nombre}}
email: {{email}}
celular: {{celular}}
valorPropiedad: {{valorPropiedad}}

Это работало правильно, то есть отправляло почту (каждый раз, когда в Firestore появлялась новая запись) с данныминовая запись, но теперь она только отправляет почту, но приходит без каких-либо данных.Я думаю, что-то изменилось в SendGrid?или это тема моей функции?

До того, как я использовал Angular 5, я сейчас использую версию 6.

Вот код моей функции index.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))

});

1 Ответ

0 голосов
/ 06 октября 2018

После некоторого тестирования методом грубой силы эта комбинация сработала.

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 ) );
    } );
...