import { type NextRequest, NextResponse } from "next/server"; import nodemailer from "nodemailer"; import SMTPTransport from "nodemailer/lib/smtp-transport"; import Mail from "nodemailer/lib/mailer"; export async function POST(request: NextRequest) { try { const body = (await request.json()) as { email: string; name: string; subject: string; message: string; }; const { email, name, subject, message } = body; console.log('πŸ“§ Email request received:', { email, name, subject, messageLength: message.length }); // Validate input if (!email || !name || !subject || !message) { console.error('❌ Validation failed: Missing required fields'); return NextResponse.json( { error: "Alle Felder sind erforderlich" }, { status: 400 }, ); } // Validate email format const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; if (!emailRegex.test(email)) { console.error('❌ Validation failed: Invalid email format'); return NextResponse.json( { error: "UngΓΌltige E-Mail-Adresse" }, { status: 400 }, ); } // Validate message length if (message.length < 10) { console.error('❌ Validation failed: Message too short'); return NextResponse.json( { error: "Nachricht muss mindestens 10 Zeichen lang sein" }, { status: 400 }, ); } const user = process.env.MY_EMAIL ?? ""; const pass = process.env.MY_PASSWORD ?? ""; console.log('πŸ”‘ Environment check:', { hasEmail: !!user, hasPassword: !!pass, emailHost: user.split('@')[1] || 'unknown' }); if (!user || !pass) { console.error("❌ Missing email/password environment variables"); return NextResponse.json( { error: "E-Mail-Server nicht konfiguriert" }, { status: 500 }, ); } const transportOptions: SMTPTransport.Options = { host: "smtp.ionos.de", port: 587, secure: false, requireTLS: true, auth: { type: "login", user, pass, }, // Add timeout and debug options connectionTimeout: 10000, greetingTimeout: 10000, socketTimeout: 10000, }; console.log('πŸš€ Creating transport with options:', { host: transportOptions.host, port: transportOptions.port, secure: transportOptions.secure, user: user.split('@')[0] + '@***' // Hide full email in logs }); const transport = nodemailer.createTransport(transportOptions); // Verify transport configuration try { await transport.verify(); console.log('βœ… SMTP connection verified successfully'); } catch (verifyError) { console.error('❌ SMTP verification failed:', verifyError); return NextResponse.json( { error: "E-Mail-Server-Verbindung fehlgeschlagen" }, { status: 500 }, ); } const mailOptions: Mail.Options = { from: `"Portfolio Contact" <${user}>`, to: "contact@dki.one", // Send to your contact email replyTo: email, subject: `Portfolio Kontakt: ${subject}`, html: `

Neue Kontaktanfrage von deinem Portfolio

Nachricht von ${name}

E-Mail: ${email}

Betreff: ${subject}

Nachricht:

${message}

Diese E-Mail wurde automatisch von deinem Portfolio generiert.

`, text: ` Neue Kontaktanfrage von deinem Portfolio Von: ${name} (${email}) Betreff: ${subject} Nachricht: ${message} --- Diese E-Mail wurde automatisch von deinem Portfolio generiert. `, }; console.log('πŸ“€ Sending email...'); const sendMailPromise = () => new Promise((resolve, reject) => { transport.sendMail(mailOptions, function (err, info) { if (!err) { console.log('βœ… Email sent successfully:', info.response); resolve(info.response); } else { console.error("❌ Error sending email:", err); reject(err.message); } }); }); const result = await sendMailPromise(); console.log('πŸŽ‰ Email process completed successfully'); return NextResponse.json({ message: "E-Mail erfolgreich gesendet", messageId: result }); } catch (err) { console.error("❌ Unexpected error in email API:", err); return NextResponse.json({ error: "Fehler beim Senden der E-Mail", details: err instanceof Error ? err.message : 'Unbekannter Fehler' }, { status: 500 }); } }