如何使用Cloud Functions和Nodemailer向某人发送电子邮件?在我的应用上有一个联系人界面,用户可以在那里提问并向应用发送反馈,当用户按下一个按钮时,云功能就会被触发。然而,我似乎没有收到任何电子邮件,我甚至检查了"垃圾邮件"。文件夹中。我做错了什么?
我的云函数代码是这样的:
const functions = require('firebase-functions');
const admin = require('firebase-admin');
const nodemailer = require('nodemailer');
admin.initializeApp(functions.config().firebase);
const transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
user: 'exampleemail@gmail.com',
pass: 'exampleemailpassword'
}
});
exports.sendEmail = functions.https.onRequest((request, response) => {
const { sender, phone, message } = request.query;
const mailOptions = {
from: sender.toLowerCase(),
to: 'exampleemail@gmail.com',
subject: 'New feedback email',
text: `${message} Phone: ${phone}`
};
// eslint-disable-next-line consistent-return
transporter.sendMail(mailOptions, (err, info) => {
if (err) {
response.send(err.toString());
}
response.send('Email sent');
});
});
我做错了,我必须返回一个代码到HttpRequest,以便运行函数属性。然后,它工作
exports.sendEmail = functions.https.onRequest((request, response) => {
cors(request, response, () => {
const { sender, phone, message } = request.query;
const mailOptions = {
from: sender.toLowerCase(),
to: 'exampleemail@gmail.com',
subject: 'New feedback email',
text: `${message} nEmail: ${sender.toLowerCase()}nPhone: ${phone}`
};
return transporter.sendMail(mailOptions, (error, info) => {
if (error) {
return response.status(500).send({
data: {
status: 500,
message: error.toString()
}
});
}
return response.status(200).send({
data: {
status: 200,
message: 'sent'
}
});
});
});
});
我知道你做错了什么,你不能在服务器环境中使用gmail的SMTP传输服务,除了你自己的电脑
Gmail每天限制500个收件人(一条消息有一个To和)一个抄送地址算作两条消息(因为它有两个收件人)@gmail.com地址和2000的Google Apps客户,更大的SMTP提供者通常每天免费提供大约200-300个收件人。
所以我建议你使用EmailJS这样的服务来发送邮件