下面的smtp网址给我一个错误
process.env.MAIL_URL="smtp://mail_name@outlook.com:Password@smtp.outlook.com:457";
我做错了什么?
答案 0 :(得分:3)
首先,您的问题是您的用户名(可能还有您的密码)包含无法按原样放入网址的字符,因此需要进行编码。
我想借此机会对配置MAIL_URL
环境变量的问题提供更深入的解答。
如果您只需要一个可行的快速字符串,请执行以下操作:
process.env.MAIL_URL="smtp://"+encodeURIComponent("mail_name@outlook.com")+":"+encodeURIComponent("Password")+"@smtp.outlook.com:457";
还要考虑到您可能需要使用smtps
进行安全连接,如果它使用TLS,您的连接可能会失败。
如果您需要更强大的功能,我建议您阅读其余部分。
网址具有以下结构:
scheme:[//[user[:password]@]host[:port]][/path][?query][#fragment]
该方案可以是smtp
或smtps
(用于安全连接),在这种情况下,您还将设置用户,密码,主机和(最有可能)端口。
每个部分都需要以适合在URL中使用的方式进行编码,但由于主机(域)通常已经合适,因此您只需要确保对您的用户名/密码进行编码。 / p>
在EcmaScript中,可以使用encodeURIComponent
。
Meteor在发送电子邮件时会检查process.env.MAIL_URL
的值。
process.env
由node.js填充,启动时可以使用环境变量。
可以在运行时向其添加属性,因此在发送电子邮件之前设置process.env.MAIL_URL
将起作用。但是,你应该明智地这样做,以防止你的秘密泄露。
我建议使用settings.json
或使用环境变量本身来设置2种方法。
在项目中创建json
文件。强烈建议不要使用其余代码将其提交到源代码管理中。
例如: config / development / settings.json
{
"smtp": {
"isSecure": true,
"userName": "your_username",
"password": "your_password",
"host": "smtp.gmail.com",
"port": 465
}
}
在服务器代码的某处:
Meteor.startup(function() {
if (Meteor.settings && Meteor.settings.smtp) {
const { userName, password, host, port, isSecure } = Meteor.settings.smtp;
const scheme = isSecure ? 'smtps' : 'smtp';
process.env.MAIL_URL = `${scheme}://${encodeURIComponent(userName)}:${encodeURIComponent(password)}@${host}:${port}`;
}
});
然后您可以使用--settings
开关运行Meteor。
meteor run --settings config/development/settings.json
您可以将环境变量设置为已编码的字符串。如果你想要一个实用程序脚本(对于* nix上的zsh)将它转换它(取决于node
):
<强> mail_url.sh 强>
#!/bin/zsh
alias urlencode='node -e "console.log(encodeURIComponent(process.argv[1]))"'
ENC_USER=`urlencode $2`
ENC_PASS=`urlencode $3`
MAIL_URL="$1://$ENC_USER:$ENC_PASS@$4"
echo $MAIL_URL
可以按如下方式使用:
$ chmod +x mail_url.sh
$ MAIL_SCHEME=smtps
$ MAIL_USER=foo@bar.baz
$ MAIL_PASSWORD=p@$$w0rd
$ MAIL_HOST=smtp.gmail.com:465
$ export MAIL_URL=$(./mail_url.sh $MAIL_SCHEME $MAIL_USER $MAIL_PASSWORD $MAIL_HOST)
$ echo $MAIL_URL
smtps://foo%40bar.baz:p%4015766w0rd@smtp.gmail.com:465