javascript - 如何正确配置 MAIL_URL?

标签 javascript email meteor

以下 smtp url 给我一个错误

process.env.MAIL_URL="smtp://mail_name@outlook.com:Password@smtp.outlook.com:457";

我做错了什么?

最佳答案

对于初学者,您的问题是您的用户名(可能还有您的密码)包含不能按原样放置在 URL 中的字符,因此需要进行编码。

我想借此机会对配置 MAIL_URL 环境变量的问题提供更深入的回答。

如果您只需要一个可以使用的快速字符串,请执行以下操作:

process.env.MAIL_URL="smtp://"+encodeURIComponent("mail_name@outlook.com")+":"+encodeURIComponent("Password")+"@smtp.outlook.com:457";

还要考虑到您可能需要使用 smtps 进行安全连接,如果它使用 TLS,您的连接可能会失败。

如果您需要更强大的内容,我建议您阅读其余部分。

网址

URL 具有以下结构:

scheme:[//[user[:password]@]host[:port]][/path][?query][#fragment]

该方案可以是 smtpsmtps(用于安全连接),在这种情况下,您还将设置用户、密码、主机和(最有可能)端口。

每个部分都需要以适合在 URL 中使用的方式进行编码,但由于主机(域)通常已经合适,您只需确保您的用户名/密码已编码。

在 EcmaScript 中,encodeURIComponent可以用于此。

MAIL_URL 和节点环境变量

Meteor 在发送电子邮件时检查 process.env.MAIL_URL 的值。

process.env由 node.js 填充,并在启动时使用可用的环境变量。

可以在运行时向其添加属性,因此在发送电子邮件之前设置 process.env.MAIL_URL 将起作用。但是,您应该明智地这样做,以防止您的 secret 泄露。

我建议使用 2 种设置方法,使用 settings.json 或使用环境变量本身。

使用 settings.json

在您的项目中创建一个 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):

ma​​il_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

关于javascript - 如何正确配置 MAIL_URL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44612761/

相关文章:

android - 尝试使用 javamail 接收电子邮件时出错

javascript - Meteor - 为什么我们需要单文件库的包?

php - 如何更改动态代码中的可折叠菜单图像?

javascript - 让用户登录他们的电子邮件而不输入@domain.com 部分?

javascript - 输入类型的电子邮件在控制台中抛出警告。 react

mongodb - 如何使用 Meteor 在客户端查看 Minimongo 数据库的内容?

html - 使用 cheerio 从 DOM 获取 innerHTML

javascript - Bootstrap 下拉菜单选择依赖

javascript - jQuery UI 选项卡式小部件在多个选项卡上添加滚动条

php - 文档写入问题