首页 > 解决方案 > 如何在不暴露密码的情况下从 Firebase 发送电子邮件?

问题描述

如何在不暴露密码的情况下从 Firebase 发送电子邮件?

以下是使用节点邮件程序使用云功能发送 Firebase 电子邮件。

但是在这里,我们必须创建一个带有电子邮件和密码的传输器。是否可以在没有传输器(电子邮件和密码)的情况下做到这一点。即匿名。原因存储密码对于此类应用程序是不安全的。

const functions = require('firebase-functions');
const admin = require('firebase-admin');
const nodemailer = require('nodemailer');
const cors = require('cors')({origin: true});
admin.initializeApp();

/**
* Here we're using Gmail to send 
*/
let transporter = nodemailer.createTransport({
    service: 'gmail',
    auth: {
        user: 'yourgmailaccount@gmail.com',
        pass: 'yourgmailaccpassword'
    }
});

exports.sendMail = functions.https.onRequest((req, res) => {
    cors(req, res, () => {

        // getting dest email by query string
        const dest = req.query.dest;

        const mailOptions = {
            from: 'Your Account Name <yourgmailaccount@gmail.com>', // Something like: Jane Doe <janedoe@gmail.com>
            to: dest,
            subject: 'test', // email subject
            html: `<p style="font-size: 16px;">test it!!</p>
                <br />
            ` // email content in HTML
        };

        // returning result
        return transporter.sendMail(mailOptions, (erro, info) => {
            if(erro){
                return res.send(erro.toString());
            }
            return res.send('Sended');
        });
    });    
});

标签: javascriptfirebasegoogle-cloud-functions

解决方案


您可以在函数的环境配置中设置凭据。

要存储电子邮件和密码,可以使用以下命令:

firebase functions:config:set nodemailer.email="username@domain.tld" nodemailer.password="your_password"

运行后functions:config:set,您必须重新部署函数以使新配置可用。

要在函数中使用配置,请使用functions.config()对象:

let transporter = nodemailer.createTransport({
    service: 'gmail',
    auth: {
        user: functions.config().nodemailer.email,
        pass: functions.config().nodemailer.password
    }
});

推荐阅读