<?php
declare(strict_types=1);
namespace WbfkExtensions\Subscriber;
use Psr\Log\LoggerInterface;
use Shopware\Core\Content\MailTemplate\Service\Event\MailErrorEvent;
use Shopware\Core\System\SystemConfig\SystemConfigService;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Mailer\Mailer;
use Symfony\Component\Mime\Email;
class MailErrorSubscriber implements EventSubscriberInterface
{
public function __construct(
private readonly Mailer $mailer,
private readonly LoggerInterface $logger,
private readonly string $shopUrl,
private readonly SystemConfigService $systemConfigService,
) {
}
public static function getSubscribedEvents(): array
{
return [
MailErrorEvent::class => 'onMailError',
];
}
public function onMailError(MailErrorEvent $event): void
{
$this->logger->error('Error while sending an email', $event->getLogData());
$msg = $event->getMessage();
$template = $event->getTemplate();
try {
$email = new Email();
$email->subject("Email von $this->shopUrl konnte nicht verschickt werden");
$email->text(<<<body
Email von $this->shopUrl konnte nicht verschickt werden
$msg
Mehr details im Mail-Error-Log file!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
$template
body
);
$email->addTo('WBFK Office <office@wbfk.at>');
$email->addFrom('Shop <'.$this->getSender().'>');
$this->mailer->send($email);
} catch (\Throwable $e) {
$this->logger->error('Error while sending Error-Email: '.$e->getMessage());
}
}
private function getSender(): ?string
{
$senderEmail = $this->systemConfigService->get('core.basicInformation.email');
if ($senderEmail === null || trim($senderEmail) === '') {
$senderEmail = $this->systemConfigService->get('core.mailerSettings.senderAddress');
}
if ($senderEmail === null || trim($senderEmail) === '') {
return null;
}
return $senderEmail;
}
}