【问题标题】:Firebase nodemailer - problem with snapshot dataFirebase nodemailer - 快照数据问题
【发布时间】:2020-06-11 07:44:27
【问题描述】:

我想收到带有变量“mail”“message”“name”的电子邮件......就像“你好{name}你好吗?你的电子邮件是{mail},这是你的{message}联系人的副本form" .....问题是我只收到 {mail} 而不是 {message} {name}

const functions = require('firebase-functions');
const admin = require('firebase-admin');
const nodemailer = require('nodemailer');

const gmailEmail = functions.config().gmail.login;
const gmailPassword = functions.config().gmail.pass;

admin.initializeApp();


var goMail = function (message) {


    const transporter = nodemailer.createTransport({
        service: 'gmail',
        auth: {
            user: gmailEmail,
            pass: gmailPassword
        }
    });

    const mailOptions = {
        from: gmailEmail, 
        to: 'la***@gmail.com', 
        subject: 'Hello ✔', 
        text: '!' + message, 
        html: '!' + message 
    };

    const getDeliveryStatus = function (error, info) {
        if (error) {
            return console.log(error);
        }
        console.log('Message sent: %s', info.messageId);

    };

    transporter.sendMail(mailOptions, getDeliveryStatus);
}; 
exports.onDataAdded = functions.database.ref('/emails/{sessionId}').onCreate(function (snap, context) {

    const createdData = snap.val();
    var text = createdData.mail;
        goMail(text);
});

这就是我的 firebase 实时数据库的外观

 emails
     -**sesionID*
        mail: "randommail@gmail.com"
        message:"test"
        name:"testname"

我尝试从代码中添加/编辑它,但这无济于事:-/

   var goMail = function (message, secondmessage)


   const mailOptions = {
        from: gmailEmail, 
        to: 'la***@gmail.com', 
        subject: 'Hello ✔', 
        text: '!' + message +  secondmessage, 
        html: '!' + message +  secondmessage
    };


 var text = createdData.mail;
 var secondtext = createdData.name
 goMail(text, secondtext);

谢谢大家的回答,祝你有美好的一天!

【问题讨论】:

  • 您好 Radek,欢迎来到 Stack Overflow,我不太了解您的代码发生了什么,您是否收到任何错误消息,或者结果不是您所期望的?您可以编辑带有错误消息的问题或您期望的结果/您得到的结果吗?请参阅此link 以查看有关您应在问题中添加内容的更多信息。另外,我在您的代码中注意到您正在使用 2 个参数调用您的 gomail 函数,即使预期只有 1 个,对吗?
  • 感谢 Ralemos,感谢您提供的链接,我下次会更好:-)。我没有收到我期望的结果...我想收到带有变量“mail”“message”“name”的电子邮件......就像“你好{name}你好吗?你的电子邮件是{mail},这是一个从联系表中复制您的 {message}” .....问题是我只收到 {mail} 而不是 {message} {name}

标签: javascript reactjs firebase google-cloud-functions nodemailer


【解决方案1】:

您只收到 {{mail}},因为该值已在您的云函数上设置为常量值,也在您的代码调用 goMail 函数时,您发送 2 个参数而不是预期的 1 个参数.尝试将您的 goMail 功能更改为(例如):

var goMail = function (name, message) {


    const transporter = nodemailer.createTransport({
        service: 'gmail',
        auth: {
            user: gmailEmail,
            pass: gmailPassword
        }
    });

    const mailOptions = {
        from: gmailEmail, 
        to: 'la***@gmail.com', 
        subject: 'Hello ✔', 
        text: '!' + name + message, 
        html: '!' + name + message 
    };

    const getDeliveryStatus = function (error, info) {
        if (error) {
            return console.log(error);
        }
        console.log('Message sent: %s', info.messageId);

    };

    transporter.sendMail(mailOptions, getDeliveryStatus);
}; 

如果它有效,请告诉我。

【讨论】:

  • 再次感谢 Ralemos... 我试了一下并收到带有“!undefinedundefined”的电子邮件:(
  • 好的,我们正在取得进展,你正在使用这个电话,对吧? goMail(text, secondtext);。如果是,这意味着 createdData.mailcreatedData.name 返回未定义,这是您必须检查的内容,请尝试记录您的 createdData 对象以查看它显示的内容。
  • 这里是一个console.log(createdData); onDataAdded { email: 'spider@avenger.com', loading: false, message: 'tsss spider silk .....', name: 'Petr Parker' } 我在控制台中看到一个错误“onDataAdded 函数返回未定义,预期承诺或价值”
  • 我相信问题是你在onDataAdded函数内调用gomail()调用仍然只使用一个参数,将其更改为goMail(text,createdData.name)(这是一个例子,不知道逻辑是什么你想做的是)。试试看,如果是这样,请告诉我。
猜你喜欢
  • 1970-01-01
  • 2019-07-31
  • 2017-01-30
  • 2017-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-09
  • 2022-01-21
相关资源
最近更新 更多