fix: correct SMTP transporter config with env vars and STARTTLS settings

This commit is contained in:
Ajay Ghanwat
2026-04-13 12:51:29 +05:30
parent 9fcf2e73fe
commit 8f6e530dc4
+14 -7
View File
@@ -94,11 +94,12 @@ function validateContactForm(data: ContactFormData): string | null {
// Email sending via SMTP (nodemailer) or no-op in development
// ============================================================
async function sendContactEmail(data: ContactFormData): Promise<void> {
const smtpHost = import.meta.env.SMTP_HOST;
const smtpUser = import.meta.env.SMTP_USER;
const smtpPass = import.meta.env.SMTP_PASS;
const smtpPort = parseInt(import.meta.env.SMTP_PORT ?? '587', 10);
const recipientEmail = import.meta.env.CONTACT_EMAIL ?? import.meta.env.SMTP_USER;
const smtpHost = process.env.SMTP_HOST;
const smtpUser = process.env.SMTP_USER;
const smtpPass = process.env.SMTP_PASS;
const smtpPort = parseInt(process.env.SMTP_PORT ?? '587', 10);
const smtpFrom = process.env.SMTP_FROM;
const recipientEmail = process.env.CONTACT_EMAIL_TO;
if (!smtpHost || !smtpUser || !smtpPass || !recipientEmail) {
// SMTP not configured - log and continue (graceful degradation)
@@ -116,8 +117,12 @@ async function sendContactEmail(data: ContactFormData): Promise<void> {
const transporter = nodemailer.default.createTransport({
host: smtpHost,
port: smtpPort,
secure: smtpPort === 465,
secure: false, // Port 587 uses STARTTLS, not SSL
auth: { user: smtpUser, pass: smtpPass },
requireTLS: true, // Force STARTTLS upgrade
tls: {
rejectUnauthorized: false, // Handle Hostinger certificate issues
},
});
const subjectLabels: Record<string, string> = {
@@ -130,8 +135,10 @@ async function sendContactEmail(data: ContactFormData): Promise<void> {
'other': 'Other',
};
const fromAddress = smtpFrom || smtpUser;
await transporter.sendMail({
from: `"WorkRoot Contact Form" <${smtpUser}>`,
from: `"CompanySite Contact Form" <${fromAddress}>`,
to: recipientEmail,
replyTo: data.email,
subject: `[Contact Form] ${subjectLabels[data.subject] ?? data.subject} - ${data.name}`,