mailer = new PHPMailer(true); $this->configure(); } catch (Exception $e) { Logger::error('Failed to initialize Mailer: ' . $e->getMessage()); ErrorHandler::exception($e); throw $e; } } /** * Configures the PHPMailer instance. * * Reads email configuration from environment variables such as MAIL_HOST, MAIL_USER, MAIL_PASSWORD, etc. * * @throws Exception If any configuration errors occur. */ protected function configure(): void { try { $this->mailer->isSMTP(); $this->mailer->Host = $_ENV['MAIL_HOST']; $this->mailer->SMTPAuth = true; $this->mailer->Username = $_ENV['MAIL_USER']; $this->mailer->Password = $_ENV['MAIL_PASSWORD']; $this->mailer->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; $this->mailer->Port = (int) $_ENV['MAIL_PORT']; $this->mailer->setFrom($_ENV['MAIL_FROM_EMAIL'], $_ENV['MAIL_FROM_NAME']); Logger::info('Mailer configured successfully.'); } catch (Exception $e) { Logger::error('Mailer configuration failed: ' . $e->getMessage()); ErrorHandler::exception($e); throw $e; } } /** * Sends an email. * * @param string $to The recipient's email address. * @param string $subject The email subject. * @param string $body The HTML content of the email. * @param string $altBody The plain-text alternative content of the email (optional). * * @return bool True if the email was sent successfully, false otherwise. */ public function send(string $to, string $subject, string $body, string $altBody = ''): bool { try { $this->mailer->clearAddresses(); $this->mailer->addAddress($to); $this->mailer->Subject = $subject; $this->mailer->Body = $body; $this->mailer->AltBody = $altBody; $this->mailer->send(); Logger::info("Email sent successfully to $to with subject: $subject."); return true; } catch (Exception $e) { Logger::error("Failed to send email to $to: " . $e->getMessage()); ErrorHandler::exception($e); return false; } } }