使用 Cloud Functions 和 Nodemailer 发送电子邮件
Send email using Cloud Functions and Nodemailer
如何向使用 Cloud Functions 和 Nodemailer 的人发送电子邮件?
在我的应用程序上有一个联系人屏幕,用户可以在其中提出问题并向应用程序发送反馈,当用户按下按钮时,会触发 Cloud Function。但是,我似乎没有收到任何电子邮件,我什至检查了“垃圾邮件”文件夹。
我做错了什么?
我的 Cloud Function 代码如下所示:
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');
});
});
我明白你哪里做错了,你不能在你自己电脑以外的服务器环境中使用gmail的SMTP传输服务
Gmail has a limit of 500 recipients a day (a message with one To and
one Cc address counts as two messages since it has two recipients) for
@gmail.com addresses and 2000 for Google Apps customers, larger SMTP
providers usually offer about 200-300 recipients a day for free.
所以我建议你使用像EmailJS这样的服务来发送电子邮件
我做错了,我必须 return 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'
}
});
});
});
});
如何向使用 Cloud Functions 和 Nodemailer 的人发送电子邮件? 在我的应用程序上有一个联系人屏幕,用户可以在其中提出问题并向应用程序发送反馈,当用户按下按钮时,会触发 Cloud Function。但是,我似乎没有收到任何电子邮件,我什至检查了“垃圾邮件”文件夹。 我做错了什么?
我的 Cloud Function 代码如下所示:
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');
});
});
我明白你哪里做错了,你不能在你自己电脑以外的服务器环境中使用gmail的SMTP传输服务
Gmail has a limit of 500 recipients a day (a message with one To and one Cc address counts as two messages since it has two recipients) for @gmail.com addresses and 2000 for Google Apps customers, larger SMTP providers usually offer about 200-300 recipients a day for free.
所以我建议你使用像EmailJS这样的服务来发送电子邮件
我做错了,我必须 return 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'
}
});
});
});
});