使用 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'
        }
      });
    });
  });
});