import express from 'express'; import helmet from 'helmet'; import nodemailer from 'nodemailer'; import process from 'process'; import 'dotenv/config'; const app = express(); const port = process.env.PORT ? Number(process.env.PORT) : (process.env.SERVER_PORT ? Number(process.env.SERVER_PORT) : 3001); app.disable('x-powered-by'); app.use(helmet({ contentSecurityPolicy: false })); app.use(express.json()); app.use(express.urlencoded({ extended: true })); const smtpHost = process.env.SMTP_HOST || '127.0.0.1'; const smtpPort = process.env.SMTP_PORT ? Number(process.env.SMTP_PORT) : 25; const smtpSecure = String(process.env.SMTP_SECURE || 'false').toLowerCase() === 'true'; const smtpRejectUnauthorized = String(process.env.SMTP_TLS_REJECT_UNAUTHORIZED || 'false').toLowerCase() === 'true'; const smtpUser = process.env.SMTP_USER; const smtpPassword = process.env.SMTP_PASSWORD; const mailTransport = nodemailer.createTransport({ host: smtpHost, port: smtpPort, secure: smtpSecure, auth: smtpUser && smtpPassword ? { user: smtpUser, pass: smtpPassword } : undefined, tls: { rejectUnauthorized: smtpRejectUnauthorized } }); app.post('/contact', async (req, res) => { const name = String(req.body.name || '').trim(); const email = String(req.body.email || '').trim(); const message = String(req.body.message || '').trim(); if (!name || !email || !message) { return res.status(400).json({ ok: false, error: 'Missing fields' }); } try { await mailTransport.verify(); await mailTransport.sendMail({ from: process.env.SMTP_FROM || 'no-reply@4nk.network', to: process.env.SMTP_TO || 'nicolas.cantu@4nk.network', subject: `[4NK Contact] ${name}`, replyTo: email, text: `From: ${name} <${email}>\n\n${message}`, }); return res.json({ ok: true }); } catch (err) { console.error('Mail send failed:', err); return res.status(502).json({ ok: false, error: 'Mail delivery failed' }); } }); app.get('/health', (req, res) => res.json({ ok: true })); app.listen(port, '127.0.0.1', () => { console.log(`Mailer listening on http://127.0.0.1:${port}`); });