exec("CREATE TABLE IF NOT EXISTS contact_submissions ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255) NOT NULL, email VARCHAR(255) NOT NULL, subject VARCHAR(255) NOT NULL, message TEXT NOT NULL, submitted_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP )"); } catch (PDOException $e) { error_log("Database schema creation failed: " . $e->getMessage()); echo json_encode(['success' => false, 'error' => 'Could not initialize database. Please try again later.']); exit; } // --- Form Submission Handling --- if ($_SERVER['REQUEST_METHOD'] !== 'POST') { echo json_encode(['success' => false, 'error' => 'Invalid request method.']); exit; } // --- Input Validation --- $name = trim($_POST['name'] ?? ''); $email = trim($_POST['email'] ?? ''); $subject = trim($_POST['subject'] ?? ''); $message = trim($_POST['message'] ?? ''); if (empty($name) || empty($email) || empty($subject) || empty($message)) { echo json_encode(['success' => false, 'error' => 'Please fill out all fields.']); exit; } if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { echo json_encode(['success' => false, 'error' => 'Please provide a valid email address.']); exit; } // --- Store in Database --- try { $stmt = $pdo->prepare("INSERT INTO contact_submissions (name, email, subject, message) VALUES (?, ?, ?, ?)"); $stmt->execute([$name, $email, $subject, $message]); } catch (PDOException $e) { error_log("Database insert failed: " . $e->getMessage()); echo json_encode(['success' => false, 'error' => 'Could not save your message. Please try again later.']); exit; } // --- Send Email Notifications --- $siteOwnerEmail = getenv('MAIL_TO') ?: (getenv('MAIL_FROM') ?: 'admin@example.com'); $projectName = $_SERVER['PROJECT_NAME'] ?? 'Your Website'; // 1. Notification to Site Owner $ownerSubject = "New Contact Form Submission: " . htmlspecialchars($subject); $ownerHtmlBody = "
Name: " . htmlspecialchars($name) . "
Email: " . htmlspecialchars($email) . "
Subject: " . htmlspecialchars($subject) . "
Message:
" . nl2br(htmlspecialchars($message)) . "
"; $ownerTextBody = "New message from your website contact form:\nName: $name\nEmail: $email\nSubject: $subject\nMessage:\n$message"; MailService::sendMail( $siteOwnerEmail, $ownerSubject, $ownerHtmlBody, $ownerTextBody, ['reply_to' => $email] ); // 2. Auto-reply to Visitor $visitorSubject = "Thank you for contacting " . $projectName; $visitorHtmlBody = "Hello " . htmlspecialchars($name) . ",
We have received your message and will get back to you as soon as possible.
Here is a copy of your submission:
Subject: " . htmlspecialchars($subject) . "
Message:
" . nl2br(htmlspecialchars($message)) . "
Best regards,
" . $projectName . "