1
0
Fork 0
Manager/app/util/SmtpClient.php

64 lines
1.8 KiB
PHP

<?php
declare(strict_types=1);
namespace Mcp\Util;
use PHPMailer\PHPMailer\PHPMailer;
use Exception;
use Mcp\TemplateBuilder;
class SmtpClient
{
private PHPMailer $mailer;
public function __construct(string $host, int $port, string $username, string $password)
{
$mailer = new PHPMailer(true);
$mailer->isSMTP();
$mailer->CharSet = 'UTF-8';
$mailer->Host = $host;
$mailer->Port = $port;
$mailer->Username = $username;
$mailer->Password = $password;
$mailer->SMTPAuth = true;
$mailer->SMTPSecure = $port == 465 ? PHPMailer::ENCRYPTION_SMTPS : PHPMailer::ENCRYPTION_STARTTLS;
$this->mailer = $mailer;
}
public function sendHtml(string $fromAddr, string $fromName, string $to, string $subject, TemplateBuilder $tpl): bool
{
try {
$this->mailer->setFrom($fromAddr, $fromName);
$this->mailer->addAddress($to);
} catch (Exception $e) {
error_log('Failed to prepare mail client (from: '.$fromAddr.', to: '.$to.')');
return false;
}
$this->mailer->isHTML(true);
$this->mailer->Subject = $subject;
ob_start();
$tpl->render();
$tplOut = ob_get_flush();
$this->mailer->Body = $tplOut;
$this->mailer->AltBody = $this::htmlToPlain($tplOut);
try {
$this->mailer->send();
return true;
} catch (Exception $e) {
error_log('Could not send email: '.$this->mailer->ErrorInfo);
return false;
}
}
private static function htmlToPlain($message): string
{
$messageNew = str_replace('<br/>', "\n", $message);
$messageNew = strip_tags(preg_replace('/<a href="(.*)">(.*)<\\/a>/', "$2: $1", $messageNew));
return $messageNew;
}
}