node.js - 如何异步使用 Nodemailer 和 Firebase 向多个用户发送邮件

标签 node.js firebase google-cloud-functions nodemailer

我尝试了不同的循环功能来从我的云数据库发送邮件。 下面的代码发送邮件但是 我无法发送包含特定于每个收件人的详细信息的邮件

我想遍历我的数据库集合并异步发送邮件。 😊

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

////we would use receipt for the testing of the loop

//google account credentials used to send email
var transporter = nodemailer.createTransport({
    host: "smtp.example.com",
    port: 587,
    secure: true,
    auth: {
        user: '***********@fastfood.com',
        pass: '********'
    }
});
exports.newsletters = functions.firestore
.document('Puns/{orderId}')
.onWrite((snap, context)=> {
     var Emails = ['Cyrilogoh@gmail.com', 'mariajame34@gmail.com','therealogoh@gmail.com','faraway@gmail.com']
const mailOptions = {
    from: `cyrilogoh@gmail.com`,
    to: Emails,
    subject: `test`,
    html: `<h1>test</h1>
                        <p>
                          Array Works 
                        </p>`                              

};
return transporter.sendMail(mailOptions, (error, data) => {
    if (error) {
        console.log(error)
        return
    }
    console.log("Sent!")
});
});```

最佳答案

在这种情况下,您可以从传递给 onWrite 调用的 snapshot 对象上获取最近添加的文档中的数据。

没有关于您的 firestore 结构和您获得的数据类型的更多详细信息,这里有一个片段可以帮助您开始构建异步电子邮件调用:

//google account credentials used to send email
var transporter = nodemailer.createTransport({
    host: "smtp.example.com",
    port: 587,
    secure: true,
    auth: {
        user: '***********@fastfood.com',
        pass: '********'
    }
});

exports.newsletters = functions.firestore.document('Puns/{orderId}').onWrite((snapshot, context)=> {

    var document = snapshot.data();

    //data to be added on the email body (could be anything)
    var data = document.body

    const mailOptions = {
        from: `cyrilogoh@gmail.com`,
        to: document.email,
        subject: `test`,
        //add whatever data you want here
        html: data
    };
    return transporter.sendMail(mailOptions, (error, data) => {
        if (error) {
            console.log(error)
            return
        }
        console.log("Sent!")
    });
})

您可以在文档对象中获取特定于用户的数据,以检查哪个用户应该收到每封电子邮件,前提是该集合具有该数据或对要在不同集合中搜索的 userId 的引用。

希望这对您有所帮助。

关于node.js - 如何异步使用 Nodemailer 和 Firebase 向多个用户发送邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61783422/

相关文章:

javascript - Firebase 函数将错误的 key 写入 firebase 数据库

python - 如何将谷歌云存储中的文件打开到云函数中

javascript - 无法让热模块在 Atom 中工作

node.js - 自动同步本地 Github 存储库与服务器上的目录

javascript - 使用 JS Promises 执行多个异步查询来构建对象

node.js - Node js,mongodb : check if an object already exist

android - 无法访问 com.google.android.gms.internal.zzbfm 的 zzbfm 类文件未找到

android - 如何在firebase数据库中获取所有 child 的数据?

javascript - 如何在 Firebase 托管中制作邮件联系表?

firebase - 在 Firebase 中从对 Cloud Function 的请求中获取用户信息