Ответ 1
Это проблема с брандмауэром. Оказывается, в коде не было ничего плохого, я просто не понял, что подразумевало сообщение об ошибке.
Я не знаю, что мне не хватает, я использую пример Nodemailer:
var nodemailer = require("nodemailer");
// create reusable transport method (opens pool of SMTP connections)
var smtpTransport = nodemailer.createTransport("SMTP",{
service: "Gmail",
auth: {
user: "[email protected]",
pass: "userpass"
}
});
// setup e-mail data with unicode symbols
var mailOptions = {
from: "Fred Foo ✔ <[email protected]>", // sender address
to: "[email protected], [email protected]", // list of receivers
subject: "Hello ✔", // Subject line
text: "Hello world ✔", // plaintext body
html: "<b>Hello world ✔</b>" // html body
}
// send mail with defined transport object
smtpTransport.sendMail(mailOptions, function(error, response){
if(error){
console.log(error);
}else{
console.log("Message sent: " + response.message);
}
// if you don't want to use this transport object anymore, uncomment following line
//smtpTransport.close(); // shut down the connection pool, no more messages
});
Я только что изменил пользователя и передал auth в мою учетную запись gmail (также пытался с их значениями), и я изменил адрес электронной почты "на" на мой адрес электронной почты. Я получаю:
{ [Error: connect ECONNREFUSED]
code: 'ECONNREFUSED',
errno: 'ECONNREFUSED',
syscall: 'connect' }
Что мне не хватает? Я ничего не вижу в документации, в которой говорится, что мне нужно сделать что-то большее, чем это, поэтому почему это не сработает? Заранее благодарю вас.
Это проблема с брандмауэром. Оказывается, в коде не было ничего плохого, я просто не понял, что подразумевало сообщение об ошибке.
Следующий шаг:
Войдите в учетную запись gmail.
Включить pop3 в вкладках настроек
Включить менее безопасные приложения: Включить менее безопасные приложения для учетной записи gmail
Отобразить разблокировку Captcha по адресу: Отобразить разблокировку Captcha
Определенная опция электронной почты и отправка
var mailOptions = {
host: 'smtp.gmail.com',
port: 465,
secure: true, // use SSL
auth: {
user: '[email protected]',
pass: 'password'
}
}
mailer = nodemailer.createTransport(mailOptions);
mailer.sendMail({
....
}, function(err, response) {
if (err) {
console.log(err);
}
console.log(response);
});
Надеемся, что этот код кода поможет вам.
Я также использовал учетную запись gmail для отправки электронной почты, для запуска nodemailer может потребоваться специальный пароль для приложения.
ECONNREFUSED указывает, что это какая-то проблема подключения или брандмауэра.
Можете ли вы подключиться к порту 465 smtp.gmail.com с любым другим приложением с того же компьютера, например с помощью openssl?
openssl s_client -connect smtp.gmail.com:465
если вы используете новую версию nodemailer
nodemailer.createTransport({
host,
port,
secure:,
auth:{
user,
pass
}
})
подробнее см. https://github.com/andris9/nodemailer-wellknown
В моем случае мне просто пришлось отключить антивирус Avast.
Чтобы белый список на avast сделать это:
Эти шаги могут различаться в зависимости от версии Avast, включая IP-адрес, используемый здесь.
1) Откройте Avast, перейдите: Меню → Настройки. (Он расположен в правом верхнем углу)
2) Перейдите на вкладку "Общие" → "Исключения" → "Добавить исключение"
3) Получить IP-адрес вашего Gmail, я думаю, это будет с ошибкой.
4) Теперь вставьте IP на ваше исключение
Надеюсь, поможет.
Фактическая проблема заключается в том, что вам нужно разместить СЕРВИС. Лучше, если вы используете переменные среды
var transporter = nodemailer.createTransport({
service: process.env.EMAIL_SERVICE,
auth: {
user:process.env.EMAIL_USER,
pass:process.env.EMAIL_PASSWORD
}
})