无法使用 firebase 云功能发送电子邮件
Unable to sendEmail using firebase cloud function
创建 Firestore 文档后无法发送电子邮件。创建 firestore 上的文档后,我正在尝试向 webapp 管理员的电子邮件发送通知电子邮件。但是面临以下问题。
index.js
const functions = require('firebase-functions');
const admin = require("firebase-admin")
const nodemailer = require('nodemailer');
admin.initializeApp()
//google account credentials used to send email
var transporter = nodemailer.createTransport({
host: 'smtp.gmail.com',
port: 465,
secure: true,
auth: {
user: '*****@gmail.com',
pass: '******'
}
});
exports.sendEmail = functions.firestore
.document('stories/{sId}')
.onCreate((snap, context) => {
const mailOptions = {
from: `*******@gmail.com`,
to: snap.data().email,
subject: 'contact form message',
html: `<h1>Order Confirmation</h1>
<p>
<b>Email: </b>${snap.data().email}<br>
</p>`
};
return transporter.sendMail(mailOptions, (error, data) => {
if (error) {
return res.send(error.toString());
}
var data = JSON.stringify(data)
return res.send(`Sent! ${data}`);
});
});
Firebase 函数日志
*发送邮件
未配置结算帐号。外部网络无法访问且配额受到严格限制。配置结算帐户以移除这些限制
发送邮件
函数返回未定义、预期的 Promise 或值*
我假设忽略日志中的计费消息是安全的,因为计费计划不是强制性的?
如有任何帮助,我们将不胜感激。
错误消息告诉您,您的代码 return 编辑了一些不同于所需的承诺或值的内容。问题在于您使用 transporter.sendMail()
的方式。根据 nodemailer documentation,sendMail
只会 return 如果您 不 传递回调方法(您 正在做)否则它 return 未定义。所以你的函数是 returning undefined.
您应该做的是删除回调参数并处理 returned promise 的结果。您还可以 return 函数中的承诺。
return transporter.sendMail(mailOptions)
.then(data => {
// decide what you want to do on success
})
.catch(err => {
// decide what you want to do on failure
});
创建 Firestore 文档后无法发送电子邮件。创建 firestore 上的文档后,我正在尝试向 webapp 管理员的电子邮件发送通知电子邮件。但是面临以下问题。
index.js
const functions = require('firebase-functions');
const admin = require("firebase-admin")
const nodemailer = require('nodemailer');
admin.initializeApp()
//google account credentials used to send email
var transporter = nodemailer.createTransport({
host: 'smtp.gmail.com',
port: 465,
secure: true,
auth: {
user: '*****@gmail.com',
pass: '******'
}
});
exports.sendEmail = functions.firestore
.document('stories/{sId}')
.onCreate((snap, context) => {
const mailOptions = {
from: `*******@gmail.com`,
to: snap.data().email,
subject: 'contact form message',
html: `<h1>Order Confirmation</h1>
<p>
<b>Email: </b>${snap.data().email}<br>
</p>`
};
return transporter.sendMail(mailOptions, (error, data) => {
if (error) {
return res.send(error.toString());
}
var data = JSON.stringify(data)
return res.send(`Sent! ${data}`);
});
});
Firebase 函数日志
*发送邮件 未配置结算帐号。外部网络无法访问且配额受到严格限制。配置结算帐户以移除这些限制
发送邮件 函数返回未定义、预期的 Promise 或值*
我假设忽略日志中的计费消息是安全的,因为计费计划不是强制性的?
如有任何帮助,我们将不胜感激。
错误消息告诉您,您的代码 return 编辑了一些不同于所需的承诺或值的内容。问题在于您使用 transporter.sendMail()
的方式。根据 nodemailer documentation,sendMail
只会 return 如果您 不 传递回调方法(您 正在做)否则它 return 未定义。所以你的函数是 returning undefined.
您应该做的是删除回调参数并处理 returned promise 的结果。您还可以 return 函数中的承诺。
return transporter.sendMail(mailOptions)
.then(data => {
// decide what you want to do on success
})
.catch(err => {
// decide what you want to do on failure
});