#javascript #node.js #api #backend #nodemailer
Вопрос:
Я пытаюсь отправить приветственное электронное письмо пользователю, когда он создает учетную запись в моем приложении. Я использую nodemailer и mailtrap, чтобы просматривать свои электронные письма. Но я получаю ошибку…
{
"status": "error",
"error": {
"code": "ETIMEDOUT",
"command": "CONN",
"statusCode": 500,
"status": "error"
},
"message": "Connection timeout",
"stack": "Error: Connection timeoutn at SMTPConnection._formatError (/home/adiln22/Desktop/after-section-12/node_modules/nodemailer/lib
Мой класс электронной почты выглядит так
const nodemailer = require('nodemailer');
const pug = require('pug');
const htmlToText = require('html-to-text');
module.exports = class Email {
constructor(user, url) {
this.to = user.email;
this.firstName = user.name.split(' ')[0];
this.url = url;
this.from = `Adil Nehal <${process.env.EMAIL_FROM}>`;
}
newTransport() {
return nodemailer.createTransport({
host: process.env.EMAIL_HOST,
port: process.env.EMAIL_PORT,
auth: {
user: process.env.ADMIN_EMAIL,
pass: process.env.ADMIN_PASSWORD
}
});
}
// Send the actual email
async send(template, subject) {
// 1) Render HTML based on a pug template
const html = pug.renderFile(`${__dirname}/../views/emails/${template}.pug`, {
firstName: this.firstName,
url: this.url,
subject
});
// 2) Define email options
const mailOptions = {
from: this.from,
to: this.to,
subject,
html,
text: htmlToText.fromString(html)
};
// 3) Create a transport and send email
await this.newTransport().sendMail(mailOptions);
}
async sendWelcome() {
await this.send('welcome', 'Welcome to the Natours Family!');
}
async sendPasswordReset() {
await this.send(
'passwordReset',
'Your password reset token (valid for only 10 minutes)'
);
}
};
И отсюда я отправляю электронное письмо.
const Email = require('./../utils/email');
exports.signup = catchAsync(async (req, res, next) => {
const newUser = await User.create({
name: req.body.name,
email: req.body.email,
password: req.body.password,
passwordConfirm: req.body.passwordConfirm
});
//This is the main thing
const url = `${req.protocol}://${req.get('host')}/me`;
console.log(url);
await new Email(newUser, url).sendWelcome();
//leave it
createSendToken(newUser, 201, res);
});
Теперь о том, что я пробовал.
Обновил отправитель узлов. Использовал разные порты, предоставленные почтовой ловушкой, использовал POP3 вместо SMTP(получал ту же ошибку SMTP)
Я не использую Gmail, чтобы Gmail заблокировал его.
Потом я пришел к тебе. Пожалуйста, помогите.
Комментарии:
1. Я также попытался вручную протестировать SMTP-сервер с помощью telnet. Но попробуйте только с несколькими IP-адресами, а затем скажите telnet: Не удается подключиться к удаленному хосту: Время ожидания подключения истекло.