Nodemailer: ошибка тайм-аута соединения, когда строка пароля содержит '#' - PullRequest
0 голосов
/ 26 октября 2018

У меня есть приложение в 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
    }
});

Когда пароль содержит символ «#», я получаю сообщение об ошибке тайм-аута подключения. Я проверил с @,!, $ И т. Д. Все работает нормально.

Может кто-нибудь помочь по этому вопросу?

1 Ответ

0 голосов
/ 26 октября 2018

Вы, вероятно, должны кодировать 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
    }
});
...