Я пытаюсь отправить уведомление по электронной почте, когда кто-то загружает что-то в мою базу данных Firebase. Я создал облачную функцию в файле index. JSON и, просматривая журналы на консоли Firebase, работает без ошибок. Однако письмо не отправляет, что бы я ни пытался. Я пробовал множество решений на Stack Overflow, а также на других сайтах.
Я исследовал и узнал, что gmail требует некоторых дополнительных настроек, чтобы разрешить автоматические c электронные письма, подобные этой. Я попытался включить "менее безопасные приложения" в Gmail, но это все равно не работает. В идеале я не хочу включать «менее безопасные приложения», но я проверял, будет ли моя функция работать с этим. Я также пытался сохранить учетные данные json в моем рабочем каталоге, но он все еще не работает.
Открывая URL-адрес, предоставленный в консоли Firebase, я получаю это сообщение об ошибке-
<Error>
<Code>SignatureDoesNotMatch</Code>
<Message>
The request signature we calculated does not match the signature you provided. Check your Google secret key and signing method.
</Message>
<StringToSign>
GET 1583951311 /gcf-upload-us-central1-c3352ebc-3178-42d3-b531-c1bfe1551623/29f9c13a-2d91-42a1-9be0-d75e466ef2c7.zip
</StringToSign>
</Error>
Я прикрепил свой код ниже. Есть ли шаг подписи, который я пропускаю? Мой firebase работает на облачном движке, поэтому из моего чтения не похоже, что мне нужно что-то добавить, но меня смущает сообщение об ошибке.
const functions = require('firebase-functions');
const admin = require('firebase-admin');
const nodemailer = require('nodemailer');
const slack = require('@slack/webhook')
const cors = require('cors')({origin: true});
admin.initializeApp({
credential: admin.credential.applicationDefault(),
});
var transporter = nodemailer.createTransport({
host: 'smtp.gmail.com',
port: 465,
secure: true,
auth: {
user: 'jackson______@gmail.com', // my email hard coded in
pass: '________' // my password hard coded in
}
});
exports.sendEmail = functions.firestore
.document('orders/{padUniqueID}')
.onCreate((snap, context) => {
const mailOptions = {
from: `jackson______@gmail.com`, // my email hard coded in
to: `jackson______@gmail.com`, // my email hard coded in
subject: 'test',
text: 'test'
};
return transporter.sendMail(mailOptions, (error, data) => {
if (error) {
console.log("email failed")
console.log(error)
return
}
console.log("Sent!")
});
});