From eb8cc01a59cb94811a0f40265852c2a93231e96a Mon Sep 17 00:00:00 2001 From: austin Date: Wed, 22 Jul 2026 15:17:06 -0500 Subject: [PATCH] contact route: optional SMTP auth + trust local self-signed relay/bridge --- src/app/api/contact/route.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/app/api/contact/route.ts b/src/app/api/contact/route.ts index dc0d8e7..226ef92 100644 --- a/src/app/api/contact/route.ts +++ b/src/app/api/contact/route.ts @@ -5,7 +5,7 @@ import nodemailer from 'nodemailer'; const { SMTP_SERVER, SMTP_PORT, SMTP_USERNAME, SMTP_TOKEN, CONTACT_TO, CONTACT_FROM } = process.env; export async function POST(request: Request) { - if (!SMTP_SERVER || !SMTP_PORT || !SMTP_USERNAME || !SMTP_TOKEN) { + if (!SMTP_SERVER || !SMTP_PORT) { console.error('contact: SMTP env vars missing'); return NextResponse.json({ error: 'Email is not configured.' }, { status: 500 }); } @@ -36,8 +36,10 @@ export async function POST(request: Request) { const transporter = nodemailer.createTransport({ host: SMTP_SERVER, port, - secure: port === 465, // 465 is implicit TLS; 587 upgrades via STARTTLS - auth: { user: SMTP_USERNAME, pass: SMTP_TOKEN }, + secure: port === 465, // 465 is implicit TLS; 587/other upgrade via STARTTLS + auth: SMTP_USERNAME && SMTP_TOKEN ? { user: SMTP_USERNAME, pass: SMTP_TOKEN } : undefined, + // local Proton Bridge / SMTP relay presents a self-signed cert (CN=127.0.0.1) — trust it + tls: { rejectUnauthorized: false }, }); try {