%PDF- %PDF-
Direktori : /www/varak.net/dmarc.varak.net/classes/Mail/ |
Current File : //www/varak.net/dmarc.varak.net/classes/Mail/MailerPhpMailer.php |
<?php /** * dmarc-srg - A php parser, viewer and summary report generator for incoming DMARC reports. * Copyright (C) 2024 Aleksey Andreev (liuch) * * Available at: * https://github.com/liuch/dmarc-srg * * This program is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation, either version 3 of the License. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along with * this program. If not, see <http://www.gnu.org/licenses/>. * * ========================= * * This file contains an class to implement sending emails using the PHPMailer library * * @category API * @package DmarcSrg * @author Aleksey Andreev (liuch) * @license https://www.gnu.org/licenses/gpl-3.0.html GNU/GPLv3 */ namespace Liuch\DmarcSrg\Mail; use Liuch\DmarcSrg\Exception\LogicException; use Liuch\DmarcSrg\Exception\RuntimeException; /** * This class is for sending emails using the PHPMailer library. */ class MailerPhpMailer extends Mailer { /** * Creates a message and sends it * * @throws LogicException * @throws RuntimeException * * @return void */ public function send(): void { $this->checkData(); $mailer = new \PHPMailer\PHPMailer\PHPMailer(true); try { $mailer->setFrom($this->from); foreach ($this->addr as $to) { $mailer->addAddress($to); } $mailer->Subject = $this->subj; $mailer->XMailer = null; if (is_null($this->body->html)) { $mailer->Body = implode("\r\n", $this->body->text); } else { $mailer->isHTML(); $mailer->Body = implode("\r\n", $this->body->html); if (!is_null($this->body->text)) { $mailer->AltBody = implode("\r\n", $this->body->text); } } $method = $this->params['method'] ?? 'mail'; if ($method === 'smtp') { $mailer->isSMTP(); $mailer->Host = $this->params['host']; $mailer->Port = $this->params['port']; switch ($this->params['encryption'] ?? 'ssl') { case 'ssl': $mailer->SMTPSecure = \PHPMailer\PHPMailer\PHPMailer::ENCRYPTION_SMTPS; break; case 'starttls': $mailer->SMTPSecure = \PHPMailer\PHPMailer\PHPMailer::ENCRYPTION_STARTTLS; break; case 'none': $mailer->SMTPAutoTLS = false; break; default: $mailer->SMTPAutoTLS = true; break; } $username = $this->params['username'] ?? null; if (!empty($username)) { $mailer->SMTPAuth = true; $mailer->Username = $username; $mailer->Password = $this->params['password'] ?? ''; } //$mailer->SMTPDebug = \PHPMailer\PHPMailer\SMTP::DEBUG_SERVER; // for testing purposes } elseif ($method === 'mail') { $mailer->isMail(); } else { throw new LogicException('Unsupported sending method'); } if ($this->params['novalidate-cert'] ?? false) { $mailer->SMTPOptions = [ 'ssl' => [ 'verify_peer' => false, 'verify_peer_name' => false, 'allow_self_signed' => true ] ]; } $mailer->send(); } catch (\Exception $e) { throw new RuntimeException($e->getMessage()); } } /** * Checks if the minimum required data is available to send the email * * @throws LogicException * * @return void */ protected function checkData(): void { parent::checkData(); if (isset($this->params['method']) && $this->params['method'] === 'smtp') { if (empty($this->params['host'])) { throw new LogicException('The SMTP server host is not specified'); } if (!is_int($this->params['port']) || $this->params['port'] <= 0) { throw new LogicException('The SMTP server port is not specified'); } } } }