I started having this problem whenever I run "yarn run dev:server" and my application doesn't start. Does anyone know how to solve it?
A important OBS: The application is running on Docker with redis and peerjs
The full error:
Error: connect ETIMEDOUT 13.49.22.0:443
at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1129:16)
[ERROR] 15:27:24 Error: connect ETIMEDOUT 13.49.22.0:443
When I run in production mode (yarn start)
Error: connect ETIMEDOUT 13.49.22.0:443
at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1129:16) {
errno: -4039,
code: 'ETIMEDOUT',
syscall: 'connect',
address: '13.49.22.0',
port: 443,
type: 'FETCH',
sourceUrl: 'https://api.nodemailer.com/user'
I have the file .env:
# App settings
APP_API_URL=http://localhost:3333
APP_WEB_URL=http://localhost:3000
APP_ADMIN_URL=http://localhost:3001
APP_SECRET=admin
APP_DEFAULT_PAGE_LIMIT=50
PORT=3333
STORAGE_DRIVER=disk
MAIL_DRIVER=ethereal
I try configure with mailjet, but show the same error.
MailjetProvider.ts, where I belive the Mailjet is configured:
@injectable()
export default class MailjetMailProvider implements IMailProvider {
private client: Transporter;
constructor(
@inject('MailTemplateProvider')
private mailTemplateProvider: IMailTemplateProvider,
) {
this.client = nodemailer.createTransport({
host: mailConfig.mailjet.host,
port: mailConfig.mailjet.port,
secure: false,
auth: mailConfig.mailjet.auth,
});
}
public async sendMail({
to,
from,
subject,
templateData,
}: ISendMailDTO): Promise<void> {
const { name, email } = mailConfig.defaults.from;
await this.client.sendMail({
from: {
name: from?.name || name,
address: from?.email || email,
},
to: {
name: to.name,
address: to.email,
},
subject,
html: await this.mailTemplateProvider.parse(templateData),
});
}
}
mail.ts:
interface IMailConfig {
driver: 'ethereal' | 'ses';
mailjet: {
host: string;
port: number;
auth: {
user: string;
pass: string;
};
};
defaults: {
from: {
email: string;
name: string;
};
};
}
export default {
driver: process.env.MAIL_DRIVER || 'ethereal',
mailjet: {
host: process.env.MAILJET_HOST || '',
port: Number(process.env.MAILJET_PORT) || 587,
auth: {
user: process.env.MAILJET_USER || '',
pass: process.env.MAILJET_PASS || '',
},
},
defaults: {
from: {
email: process.env.MAIL_FROM,
name: process.env.MAIL_FROM_NAME,
},
},
} as IMailConfig;
EtherealMailProvider.ts, where Ethereal is config.
@injectable()
export default class EtherealMailProvider implements IMailProvider {
private client: Transporter;
constructor(
@inject('MailTemplateProvider')
private mailTemplateProvider: IMailTemplateProvider,
) {
nodemailer.createTestAccount().then(account => {
const transporter = nodemailer.createTransport({
host: account.smtp.host,
port: account.smtp.port,
secure: account.smtp.secure,
auth: {
user: account.user,
pass: account.pass,
},
});
this.client = transporter;
});
}
public async sendMail({
to,
from,
subject,
templateData,
}: ISendMailDTO): Promise<void> {
const { name, email } = mailConfig.defaults.from;
const message = await this.client.sendMail({
from: {
name: from?.name || name,
address: from?.email || email,
},
to: {
name: to.name,
address: to.email,
},
subject,
html: await this.mailTemplateProvider.parse(templateData),
});=
}