|
- <?php
-
- declare(strict_types=1);
-
- namespace Core;
-
- use PHPMailer\PHPMailer\PHPMailer;
- use PHPMailer\PHPMailer\SMTP;
- use PHPMailer\PHPMailer\Exception as MailerException;
-
- class Mailer
- {
- private array $config;
-
- public function __construct()
- {
- $this->config = require __DIR__ . '/../config/mail.php';
- }
-
- /**
- * Send an email.
- *
- * @param string $toEmail
- * @param string $toName
- * @param string $subject
- * @param string $htmlBody
- * @param string $textBody Plain-text fallback (optional)
- * @throws MailerException
- */
- public function send(
- string $toEmail,
- string $toName,
- string $subject,
- string $htmlBody,
- string $textBody = ''
- ): void {
- $mail = new PHPMailer(true);
-
- $mail->isSMTP();
- $mail->Host = $this->config['host'];
- $mail->SMTPAuth = true;
- $mail->Username = $this->config['username'];
- $mail->Password = $this->config['password'];
- $mail->SMTPSecure = $this->config['encryption'] === 'ssl' ? PHPMailer::ENCRYPTION_SMTPS : PHPMailer::ENCRYPTION_STARTTLS;
- $mail->Port = $this->config['port'];
- $mail->SMTPDebug = $this->config['debug'];
-
- $mail->setFrom($this->config['from_email'], $this->config['from_name']);
- $mail->addAddress($toEmail, $toName);
-
- $mail->isHTML(true);
- $mail->Subject = $subject;
- $mail->Body = $htmlBody;
- $mail->AltBody = $textBody ?: strip_tags($htmlBody);
-
- $mail->send();
- }
- }
|