Функции Sendgrid и Firebase: ошибка отправки транзакционной электронной почты с данными динамического шаблона - PullRequest
0 голосов
/ 08 мая 2019

Как только новый поставщик зарегистрирован в моей базе данных Firebase Realtime, я хочу отправить новому поставщику приветственное письмо по электронной почте через Sendgrid.Я создал функцию Firebase newVendorEmail () для этого в папке functions / src / index.ts моего приложения и настроил там все в соответствии с https://app.sendgrid.com/guide/integrate/langs/nodejs/verify.. Я также могу получать информацию о поставщике из Firebase через onCreate () в newVendorEmail () и без проблем передайте их в часть dynamic_template_data объекта msg.Но когда функция newVendorEmail () была запущена в функциях Firebase, электронное письмо не было отправлено, и я получил этот ответ вместо этого в моей консоли функций Firebase: TypeError: Object.values ​​не является функцией в Mail.setDynamicTemplateData (/ user_code / node_modules / @ sendgrid)/mail/node_modules/@sendgrid/helpers/classes/mail.js:342:12).Помогите, пожалуйста?

Я пытался обновиться до последней версии пакета @ sendgrid / mail npm v6.4.0, пытался перейти на новый ключ API Sendgrid, пытался сохранить этот новый ключ API в process.env в соответствии с инструкциями Sendgrid.Пример github https://github.com/sendgrid/sendgrid-nodejs/blob/master/use-cases/kitchen-sink.md вместо functions.config (), но безрезультатно.

in node/process.env:

{ SENDGRID_API_KEY:
   'SG....E',
...
}

in functions/src/index.ts:

'use strict'

const functions = require('firebase-functions')
const admin = require('firebase-admin')
const sendgrid = require('@sendgrid/mail')

// init function
admin.initializeApp()

//init firebase ref const
const ref = admin.database().ref()

// set sendgrid api from process env
sendgrid.setApiKey(process.env.SENDGRID_API_KEY)

export const newVendorEmail = functions.database
.ref('users/{userId}/profile')
.onCreate((snapshot, context) => {
  // call field data using snapshot.val()
  let msg
  const userData = snapshot.val()
  if (userData.type === 'vendor') {
    // set email data
    msg = {
      to: userData.email,
      from: {
        name: 'Blk. Party',
        email: '...@blkparty.com'
      },
      // custom templates
      templateId: '...',
      dynamic_template_data: {
        subject: 'Welcome to Blk. Party!',
        name: userData.name,
        regLink: userData.regLink
      },
    }    
  }
  // send email via sendgrid
  return sendgrid.send(msg) 
})

in package.json:
...
"dependencies": {
  "@sendgrid/mail": "^6.4.0",
  "firebase-admin": "~6.0.0",
  "firebase-functions": "^2.1.0"
},
"devDependencies": {
  "@sendgrid/mail": "^6.4.0",
  ...
}
...

Я ожидаю, что письма будут отправлены без ошибок.

1 Ответ

5 голосов
/ 08 мая 2019

У меня была такая же проблема. В моем случае решением было переключиться с узла 6 на узел 8 в функциях firebase.

...