Я хочу, чтобы мой сервер Firebase отправлял мне электронное письмо, когда документ создается в коллекции Firestore на основе отправки формы в моем приложении vue.
Я нашел sendgrid дляЧтобы сделать работу проще всего, пример, упомянутый на странице пакета, предполагает, что я храню ключ API в переменной среды.
Поскольку это будет выполняться из облачной функции, я использовал следующую команду firebase functions:config:set sendGrid.key="THE API GOES HERE"
, как упоминалосьв документации Firebase здесь
облачная функция
Я инициализировал облачные функции Firebase локально, затем я вызвал модуль администратора, чтобы я мог слушать onCreate()
, когдадокумент создан в firestore, я использовал 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);
})
результат : все работало нормально, за исключением того, что я не получил письмо.
Если требуется дополнительный код / объяснение, пожалуйста,оставьте комментарий ниже.любая помощь или подсказки высоко ценится, заранее спасибо.