isSMTP(); $mail->Host = $_ENV['SMTP_HOST'] ?? 'localhost'; $mail->Port = $_ENV['SMTP_PORT'] ?? 25; $mail->SMTPAuth = filter_var($_ENV['SMTP_AUTH'] ?? false, FILTER_VALIDATE_BOOLEAN); $mail->Username = $_ENV['SMTP_USER'] ?? ''; $mail->Password = $_ENV['SMTP_PASS'] ?? ''; $mail->SMTPAutoTLS = filter_var($_ENV['SMTP_AUTO_TLS'] ?? true, FILTER_VALIDATE_BOOLEAN); $encryption = strtolower(trim($_ENV['SMTP_ENCRYPTION'] ?? '')); if ($encryption === 'ssl') { $mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS; } elseif ($encryption === 'tls') { $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; } else { $mail->SMTPSecure = ''; } $fromEmail = $_ENV['SMTP_FROM_EMAIL'] ?? 'no-reply@localhost'; $fromName = $_ENV['SMTP_FROM_NAME'] ?? 'Wizdom Mailer'; $mail->setFrom($fromEmail, $fromName); $mail->SMTPOptions = [ 'ssl' => [ 'verify_peer' => false, 'verify_peer_name' => false, 'allow_self_signed' => true ] ]; } private static function parseRecipients(string $rawList): array { $emails = explode(',', $rawList); $validEmails = []; foreach ($emails as $email) { $email = trim($email); if (filter_var($email, FILTER_VALIDATE_EMAIL)) { $validEmails[] = $email; } } return $validEmails; } public static function send(string $to, string $subject, string $body): bool { try { $mail = self::getMailer(); $mail->addAddress($to); $mail->Subject = $subject; $mail->Body = $body; $mail->isHTML(true); return $mail->send(); } catch (\Throwable $e) { Logger::error("Email send failed to $to: " . $e->getMessage()); return false; } } private static function buildContactHtmlBody(array $data): string { return " Name: {$data['first_name']} {$data['last_name']}
Email: {$data['email']}
Phone: {$data['phone']}
Subject: {$data['subject']}
Message:
{$data['message']}
"; } private static function buildErrorReportHtml(string $context, string $errorMessage, $data = []): string { if (is_string($data)) { $decoded = json_decode($data, true); $data = is_array($decoded) ? $decoded : ['raw_data' => $data]; } $body = " Context: {$context}
Error Message:
{$errorMessage}
"; if (!empty($data)) { $body .= "
Associated Data:
"; } return $body; } private static function buildSalesHtmlBody(array $data): string { $submittedAt = date('Y-m-d H:i:s'); return "

New contact submission received on {$submittedAt}.


IP: {$data['ip_address']}
User-Agent: {$data['user_agent']}

"; } private static function buildConfirmationHtmlBody(array $data): string { $submittedAt = date('Y-m-d H:i:s'); return "

Hi {$data['first_name']},

Thank you for contacting Wizdom Networks. This message confirms that we received your inquiry on {$submittedAt}.

We’ll be in touch shortly. If it’s urgent, call us at 416-USE-WISE.

IP: {$data['ip_address']}
User-Agent: {$data['user_agent']}

"; } public static function sendContactNotification(array $data): bool { try { $mail = new PHPMailer(true); self::configureMailer($mail); $recipients = self::parseRecipients($_ENV['SALES_EMAILS'] ?? ''); foreach ($recipients as $email) { $mail->addAddress($email); } if (empty($mail->getToAddresses())) { Logger::error("EmailHelper: No valid SALES_EMAILS configured."); return false; } $mail->isHTML(true); $mail->Subject = 'New Contact Form Submission'; $mail->Body = self::buildSalesHtmlBody($data); $mail->send(); return true; } catch (Exception $e) { Logger::error("Email send failure to sales: " . $e->getMessage()); self::alertAdmins("sendContactNotification", $e->getMessage(), $data); return false; } } public static function sendConfirmationToUser(array $data): bool { try { $mail = new PHPMailer(true); self::configureMailer($mail); $mail->addAddress($data['email'], "{$data['first_name']} {$data['last_name']}"); $mail->isHTML(true); $mail->Subject = 'Your Wizdom Networks Contact Form Submission'; $mail->Body = self::buildConfirmationHtmlBody($data); $mail->send(); return true; } catch (Exception $e) { Logger::error("Email send failure to user: " . $e->getMessage()); self::alertAdmins("sendConfirmationToUser", $e->getMessage(), $data); return false; } } /** * Sends a system alert to ADMIN_EMAILS with error context and message. * * @param string $context * @param string $errorMessage * @param array|string $data Data array or JSON string for the report * @return void */ public static function alertAdmins(string $context, string $errorMessage, $data = []): void { try { $mail = new PHPMailer(true); self::configureMailer($mail); $recipients = self::parseRecipients($_ENV['ADMIN_EMAILS'] ?? ''); foreach ($recipients as $email) { $mail->addAddress($email); } if (empty($mail->getToAddresses())) { Logger::error("EmailHelper: No valid ADMIN_EMAILS configured."); return; } $mail->isHTML(true); $mail->Subject = "[System Alert] Error in {$context}"; $mail->Body = self::buildErrorReportHtml($context, $errorMessage, $data); $mail->send(); } catch (Exception $e) { Logger::error("EmailHelper::alertAdmins failed: " . $e->getMessage()); } } }