Nodemailer:密码字符串包含“#”时出现连接超时错误

Nodemailer: Connection Timeout error when password string contains '#'

我在 nodejs 中有一个应用程序,它使用 nodemailer 发送电子邮件。一切正常,除非密码字符串中包含“#”。

下面是我的代码

var secure = config.secure ? "smtps":"smtp";
var conURL = secure+"://"+config.user+":"+config.pass+"@"+config.host+"/?pool=false";

try {
    const transport = nodemailer.createTransport(conURL);

    // verify connection configuration
    transport.verify(function(error, success) {
    if (error) {
        console.log(error.message) // Error : Connection Timeout
    }
});

当密码包含“#”字符时,出现连接超时错误。我已经使用 @、!、$ 等进行了测试,一切正常。

有人可以帮助解决这个问题吗?

您可能需要对 URI 进行编码

所以,像这样的东西应该可以解决我的问题

secure+"://"+config.user+":"+encodeURIComponent(config.pass)+"@"+config.host+"/?pool=false"

编辑:尝试使用配置对象而不是像这样的 URI

const config = {
    pool: false,
    host: config.host,
    secure: config.secure,
    auth: {
        user: config.user,
        pass: config.pass
    }
};

try {
    const transport = nodemailer.createTransport(conURL);

    // verify connection configuration
    transport.verify(function(error, success) {
    if (error) {
        console.log(error.message) // Error : Connection Timeout
    }
});