X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=phpmailer%2Fphpmailer.php;h=3a8898b414b9eaf2ce5a7f8c1ca91af766c53165;hb=c4c2536052614d3bdaf8e3ed88cc99f38e476dae;hp=b55fcccd920f5ebad8f6e94de8ee0f4b14b85bd7;hpb=1ce63185abc24a0813c2045c43ec1e3fede6e113;p=friendica-addons.git diff --git a/phpmailer/phpmailer.php b/phpmailer/phpmailer.php index b55fcccd..3a8898b4 100644 --- a/phpmailer/phpmailer.php +++ b/phpmailer/phpmailer.php @@ -8,17 +8,19 @@ */ use Friendica\App; -use Friendica\Core\Config; use Friendica\Core\Hook; use Friendica\DI; +use Friendica\Object\EMail\IEmail; use Friendica\Util\ConfigFileLoader; use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\Exception; +require_once __DIR__ . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'autoload.php'; + function phpmailer_install() { Hook::register('load_config' , __FILE__, 'phpmailer_load_config'); - Hook::register('emailer_send_prepare', __FILE__, 'phpmailer_emailer_send_prepare'); + Hook::register('emailer_send_prepare', __FILE__, 'phpmailer_emailer_send_prepare', 5); } function phpmailer_load_config(App $a, ConfigFileLoader $loader) @@ -28,78 +30,81 @@ function phpmailer_load_config(App $a, ConfigFileLoader $loader) /** * @param App $a - * @param array $b + * @param IEmail $email */ -function phpmailer_emailer_send_prepare(App $a, array &$b) +function phpmailer_emailer_send_prepare(App $a, IEmail &$email) { - require_once __DIR__ . '/phpmailer/src/PHPMailer.php'; - require_once __DIR__ . '/phpmailer/src/SMTP.php'; - require_once __DIR__ . '/phpmailer/src/Exception.php'; - // Passing `true` enables exceptions - $mail = new PHPMailer(true); + $mailer = new PHPMailer(true); try { + // Setup encoding. + $mailer->CharSet = 'UTF-8'; + $mailer->Encoding = 'base64'; + if (DI::config()->get('phpmailer', 'smtp')) { // Set mailer to use SMTP - $mail->isSMTP(); - - // Setup encoding. - $mail->CharSet = 'UTF-8'; - $mail->Encoding = 'base64'; + $mailer->isSMTP(); // Specify main and backup SMTP servers - $mail->Host = DI::config()->get('phpmailer', 'smtp_server'); - $mail->Port = DI::config()->get('phpmailer', 'smtp_port'); + $mailer->Host = DI::config()->get('phpmailer', 'smtp_server'); + $mailer->Port = DI::config()->get('phpmailer', 'smtp_port'); if (DI::config()->get('system', 'smtp_secure') && DI::config()->get('phpmailer', 'smtp_port_s')) { - $mail->SMTPSecure = DI::config()->get('phpmailer', 'smtp_secure'); - $mail->Port = DI::config()->get('phpmailer', 'smtp_port_s'); + $mailer->SMTPSecure = DI::config()->get('phpmailer', 'smtp_secure'); + $mailer->Port = DI::config()->get('phpmailer', 'smtp_port_s'); } if (DI::config()->get('phpmailer', 'smtp_username') && DI::config()->get('phpmailer', 'smtp_password')) { - $mail->SMTPAuth = true; - $mail->Username = DI::config()->get('phpmailer', 'smtp_username'); - $mail->Password = DI::config()->get('phpmailer', 'smtp_password'); + $mailer->SMTPAuth = true; + $mailer->Username = DI::config()->get('phpmailer', 'smtp_username'); + $mailer->Password = DI::config()->get('phpmailer', 'smtp_password'); } if (DI::config()->get('phpmailer', 'smtp_from')) { - $mail->setFrom(DI::config()->get('phpmailer', 'smtp_from'), $b['fromName']); + $mailer->setFrom(DI::config()->get('phpmailer', 'smtp_from'), $email->getFromName()); } } else { - $mail->setFrom($b['fromEmail'], $b['fromName']); + $mailer->setFrom($email->getFromAddress(), $email->getFromName()); } // subject - $mail->Subject = $b['messageSubject']; + $mailer->Subject = $email->getSubject(); - if (!empty($b['toEmail'])) { - $mail->addAddress($b['toEmail']); + if (!empty($email->getToAddress())) { + $mailer->addAddress($email->getToAddress()); } // html version - if (!empty($b['htmlVersion'])) { - $mail->isHTML(true); - $mail->Body = $b['htmlVersion']; - $mail->AltBody = $b['textVersion']; + if (!empty($email->getMessage())) { + $mailer->isHTML(true); + $mailer->Body = $email->getMessage(); + $mailer->AltBody = $email->getMessage(true); } else { // add text - $mail->Body = $b['textVersion']; + $mailer->Body = $email->getMessage(true); } - if (!empty($b['replyTo'])) { - $mail->addReplyTo($b['replyTo'], $b['fromName']); + if (!empty($email->getReplyTo())) { + $mailer->addReplyTo($email->getReplyTo(), $email->getFromName()); } // additional headers - if (!empty($b['additionalMailHeader'])) { - foreach (explode("\n", trim($b['additionalMailHeader'])) as $header_line) { - list($name, $value) = explode(':', $header_line, 2); - $mail->addCustomHeader(trim($name), trim($value)); + if (!empty($email->getAdditionalMailHeader())) { + foreach ($email->getAdditionalMailHeader() as $name => $values) { + // Set the "Message-ID" header for PHP-Mailer directly + if (strtolower($name) === 'message-id') { + // implode all values to one entry, because there's only one value possible + $mailer->MessageID = trim(implode("", $values)); + } else { + $mailer->addCustomHeader(trim($name), trim(implode("\n", $values))); + } } } - $b['sent'] = $mail->send(); + if ($mailer->send()) { + $email = null; + } } catch (Exception $e) { - DI::logger()->error('PHPMailer error', ['ErrorInfo' => $mail->ErrorInfo, 'code' => $e->getCode(), 'message' => $e->getMessage()]); + DI::logger()->error('PHPMailer error', ['email' => $email, 'ErrorInfo' => $mailer->ErrorInfo, 'exception' => $e]); } }