javascript - 如何在不暴露密码的情况下从 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');
});
});
});
解决方案
您可以在函数的环境配置中设置凭据。
要存储电子邮件和密码,可以使用以下命令:
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
}
});
推荐阅读
- c# - 传递给未更新的类变量
- node.js - 是否可以从本质上使用 puppeteer 查看网页?
- python - 安装 numpy 包期间的错误消息
- python - 使用 Pathos/Multiprocessing 在 Python 中嵌套多处理池
- java - 在eclipse中导入javax
- node.js - 将数据从firebase函数上传到firebase存储?
- python-3.x - 尝试将单行数据附加到 pandas DataFrame,而是为每个输入字段添加行
- python - 如何使用列表推导从函数中读取并创建新列表?
- google-cloud-platform - 如何在 Google Cloud 中增加带宽
- javascript - JavaScript 不能正确分割字符串