I've my express running with nodemailer, its work properly on my local machine, but when I deploying on my vps using reverse proxy it always return 504 Gateway Time-out
I also change my /www/server/nginx/conf/proxy.conf timeout to 300
My apps logs:
SMTP verification failed (production environment): Error: Connection timeout
at SMTPConnection.formatError (/www/wwwroot/api.mkh.sg/node_modules/nodemailer/lib/smtp-connection/index.js:809:19)
at SMTPConnection.onError (/www/wwwroot/api.mkh.sg/node_modules/nodemailer/lib/smtp-connection/index.js:795:20)
at Timeout.<anonymous> (/www/wwwroot/api.mkh.sg/node_modules/nodemailer/lib/smtp-connection/index.js:237:22)
at listOnTimeout (node:internal/timers:594:17)
at process.processTimers (node:internal/timers:529:7) {
code: 'ETIMEDOUT',
command: 'CONN'
}
here's my code for SMTP:
const nodemailer = require("nodemailer");
require("dotenv").config();
const NODE_ENV = process.env.NODE_ENV "development";
const HOST = process.env.SMTP_HOST "smtp.gmail.com";
const config = {
development: {
host: HOST,
port: 587,
secure: false,
tls: {
rejectUnauthorized: false,
},
},
production: {
host: HOST,
port: 465,
secure: true,
tls: {
rejectUnauthorized: true,
},
},
};
const emailConfig = config[NODE_ENV];
const USER = process.env.SMTP_USER;
const PASS = process.env.SMTP_PASS;
const FROM_NAME = process.env.SMTP_FROM_NAME "NoReply";
const FROM = process.env.SMTP_FROM USER;
const transporter = nodemailer.createTransport({
host: emailConfig.host,
port: emailConfig.port,
secure: emailConfig.secure,
auth: {
user: USER,
pass: PASS,
},
tls: emailConfig.tls,
});
const verifyConfiguration = async () => {
try {
await transporter.verify();
return true;
} catch (error) {
console.error(SMTP verification failed (${NODE_ENV} environment):, error);
return false;
}