103 lines
3.0 KiB
PHP
103 lines
3.0 KiB
PHP
|
<?php
|
||
|
namespace ProVM\KI\Common\Implementation;
|
||
|
|
||
|
use PHPMailer\PHPMailer\PHPMailer as BaseMailer;
|
||
|
use PHPMailer\PHPMailer\SMTP;
|
||
|
use ProVM\KI\Common\Alias\Mailer as MailerInterface;
|
||
|
use ProVM\KI\Common\Alias\Message;
|
||
|
|
||
|
class Mailer implements MailerInterface {
|
||
|
protected $host;
|
||
|
protected $port;
|
||
|
protected $user;
|
||
|
protected $is_secure = false;
|
||
|
public function __construct(array $settings) {
|
||
|
if (!isset($settings['host'])) {
|
||
|
throw new \Exception('Host is missing in ' . get_called_class());
|
||
|
}
|
||
|
$this->host = $settings['host'];
|
||
|
if (!isset($settings['username'])) {
|
||
|
throw new \Exception('User name is missing in ' . get_called_class());
|
||
|
}
|
||
|
$this->user = (object) ['name' => null, 'password' => null];
|
||
|
$this->user->name = $settings['username'];
|
||
|
if (!isset($settings['password'])) {
|
||
|
throw new \Exception('User password is missing in ' . get_called_class());
|
||
|
}
|
||
|
$this->user->password = $settings['password'];
|
||
|
$this->port = 25;
|
||
|
if (isset($settings['secure']) and $settings['secure'] == 'ssl') {
|
||
|
$this->is_secure = true;
|
||
|
$this->port = 465;
|
||
|
}
|
||
|
if (isset($settings['port'])) {
|
||
|
$this->port = $settings['port'];
|
||
|
}
|
||
|
}
|
||
|
public function isSecure(): bool {
|
||
|
return $this->is_secure;
|
||
|
}
|
||
|
public function send(Message $message): bool {
|
||
|
$mailer = new BaseMailer();
|
||
|
$mailer->isSMTP();
|
||
|
//$mailer->SMTPDebug = SMTP::DEBUG_SERVER;
|
||
|
$mailer->Host = $this->host;
|
||
|
$mailer->SMTPAuth = true;
|
||
|
$mailer->Username = $this->user->name;
|
||
|
$mailer->Password = $this->user->password;
|
||
|
$mailer->Port = $this->port;
|
||
|
if ($this->isSecure()) {
|
||
|
$mailer->SMTPSecure = BaseMailer::ENCRYPTION_STARTTLS;
|
||
|
}
|
||
|
|
||
|
try {
|
||
|
$from = $message->getFrom();
|
||
|
if ($from->name !== null) {
|
||
|
$mailer->setFrom($from->email, $from->name);
|
||
|
} else {
|
||
|
$mailer->setFrom($from->email);
|
||
|
}
|
||
|
foreach ($message->getTo() as $to) {
|
||
|
if ($to->name !== null) {
|
||
|
$mailer->addAddress($to->email, $to->name);
|
||
|
} else {
|
||
|
$mailer->addAddress($to->email);
|
||
|
}
|
||
|
}
|
||
|
$ccs = $message->getCc();
|
||
|
if (!empty($ccs)) {
|
||
|
foreach ($ccs as $cc) {
|
||
|
if ($cc->name !== null) {
|
||
|
$mailer->addCC($cc->email, $cc->name);
|
||
|
} else {
|
||
|
$mailer->addCC($cc->email);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
$bccs = $message->getBcc();
|
||
|
if (!empty($bccs)) {
|
||
|
foreach ($bccs as $bcc) {
|
||
|
if ($bcc->name !== null) {
|
||
|
$mailer->addBCC($bcc->email, $bcc->name);
|
||
|
} else {
|
||
|
$mailer->addBCC($bcc->email);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
$mailer->Subject = $message->getSubject();
|
||
|
if ($message->isHtml()) {
|
||
|
$mailer->Body = $message->getHtmlBody();
|
||
|
$mailer->isHTML();
|
||
|
$mailer->AltBody = $message->getBody();
|
||
|
} else {
|
||
|
$mailer->Body = $message->getBody();
|
||
|
}
|
||
|
|
||
|
$mailer->send();
|
||
|
return true;
|
||
|
} catch (\Exception $e) {
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
}
|