我的网站托管在Firebase上,我希望从no-reply@mydomain.com
之类的电子邮件发送给收件人。我是否被迫创建此电子邮件并提供SMTP连接的登录信息,还是有一种方法可以发送邮件而无需实际创建邮件(没有AUTH凭据),就像在PHP中mail()
一样。
目前,我正在使用nodemailer
从我的GMail发送邮件:
var transporter = nodemailer.createTransport('smtps://USER@gmail.com:PASSWORD@smtp.gmail.com');
exports.sendMail = functions.https.onRequest((req, res) => {
var mailOptions = {
to: 'someone@gmail.com',
subject: 'Test Mail',
html: 'Testing the Mail'
}
transporter.sendMail(mailOptions, function (err, response) {
if (err) {
res.end('Mail not sent');
} else {
res.end('Mail sent');
}
});
});
有没有出路?感谢您的帮助。
答案 0 :(得分:3)
这可以使用Sendgrid轻松完成,如下所示。以下是node.js库文档:https://github.com/sendgrid/sendgrid-nodejs
Sendgrid是Firebase推荐的选项,请参见https://github.com/firebase/functions-samples/tree/Node-8/quickstarts/email-users,其内容如下:
如果您打算发送大量电子邮件,则应使用 专业的电子邮件发送平台,例如Sendgrid,Mailjet或 Mailgun。
有一个“慷慨的”免费计划,每月有12.000封免费电子邮件,请参阅https://console.cloud.google.com/marketplace/details/sendgrid-app/sendgrid-email
const functions = require('firebase-functions');
const admin = require('firebase-admin');
......
const sgMail = require('@sendgrid/mail');
const sengridkey =
'SG.............................................';
sgMail.setApiKey(sengridkey);
......
exports.sendMail = functions.https.onRequest((req, res) => {
const msg = {
to: 'someone@gmail.com',
from: 'originator@gmail.com', // <- HERE, set the from
subject: 'Test Mail',
html: '<h1>Test Mail</h1>',
};
sgMail
.send(msg)
.then(() => {
res.status(200).send('Mail sent');
})
.catch(err => {
console.error('ERROR:', err);
res.status(500).send('Mail not sent: ' + err);
});
});
请注意,您需要使用“ Flame”或“ Blaze” Firebase定价计划。
事实上,免费的“ Spark”计划“仅允许对Google拥有的服务进行出站网络请求”。请参见https://firebase.google.com/pricing/(将鼠标悬停在“云函数”标题之后的问号上)
由于Sendgrid不是Google拥有的服务,因此您需要切换到“火焰”或“大火”计划。