desc('Mails worker') ->inject('message') ->inject('register') ->callback(fn($message, $register) => $this->action($message, $register)); } /** * @param Message $message * @param Registry $register * @throws \PHPMailer\PHPMailer\Exception * @return void * @throws Exception */ public function action(Message $message, Registry $register): void { Runtime::setHookFlags(SWOOLE_HOOK_ALL ^ SWOOLE_HOOK_TCP); $payload = $message->getPayload() ?? []; if (empty($payload)) { throw new Exception('Missing payload'); } $smtp = $payload['smtp']; if (empty($smtp) && empty(App::getEnv('_APP_SMTP_HOST'))) { Console::info('Skipped mail processing. No SMTP configuration has been set.'); return; } $recipient = $payload['recipient']; $subject = $payload['subject']; $variables = $payload['variables']; $name = $payload['name']; $body = $payload['body']; $bodyTemplate = Template::fromFile(__DIR__ . '/../../../../app/config/locale/templates/email-base.tpl'); $bodyTemplate->setParam('{{body}}', $body); foreach ($variables as $key => $value) { $bodyTemplate->setParam('{{' . $key . '}}', $value); } $body = $bodyTemplate->render(); $subjectTemplate = Template::fromString($subject); foreach ($variables as $key => $value) { $subjectTemplate->setParam('{{' . $key . '}}', $value); } // render() will return the subject in
tags, so use strip_tags() to remove them $subject = \strip_tags($subjectTemplate->render()); /** @var PHPMailer $mail */ $mail = empty($smtp) ? $register->get('smtp') : $this->getMailer($smtp); $mail->clearAddresses(); $mail->clearAllRecipients(); $mail->clearReplyTos(); $mail->clearAttachments(); $mail->clearBCCs(); $mail->clearCCs(); $mail->addAddress($recipient, $name); $mail->Subject = $subject; $mail->Body = $body; $mail->AltBody = $body; $mail->AltBody = preg_replace('/