custom/plugins/WbfkExtensions/src/Subscriber/MailErrorSubscriber.php line 32

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace WbfkExtensions\Subscriber;
  4. use Psr\Log\LoggerInterface;
  5. use Shopware\Core\Content\MailTemplate\Service\Event\MailErrorEvent;
  6. use Shopware\Core\System\SystemConfig\SystemConfigService;
  7. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  8. use Symfony\Component\Mailer\Mailer;
  9. use Symfony\Component\Mime\Email;
  10. class MailErrorSubscriber implements EventSubscriberInterface
  11. {
  12. public function __construct(
  13. private readonly Mailer $mailer,
  14. private readonly LoggerInterface $logger,
  15. private readonly string $shopUrl,
  16. private readonly SystemConfigService $systemConfigService,
  17. ) {
  18. }
  19. public static function getSubscribedEvents(): array
  20. {
  21. return [
  22. MailErrorEvent::class => 'onMailError',
  23. ];
  24. }
  25. public function onMailError(MailErrorEvent $event): void
  26. {
  27. $this->logger->error('Error while sending an email', $event->getLogData());
  28. $msg = $event->getMessage();
  29. $template = $event->getTemplate();
  30. try {
  31. $email = new Email();
  32. $email->subject("Email von $this->shopUrl konnte nicht verschickt werden");
  33. $email->text(<<<body
  34. Email von $this->shopUrl konnte nicht verschickt werden
  35. $msg
  36. Mehr details im Mail-Error-Log file!
  37. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  38. $template
  39. body
  40. );
  41. $email->addTo('WBFK Office <office@wbfk.at>');
  42. $email->addFrom('Shop <'.$this->getSender().'>');
  43. $this->mailer->send($email);
  44. } catch (\Throwable $e) {
  45. $this->logger->error('Error while sending Error-Email: '.$e->getMessage());
  46. }
  47. }
  48. private function getSender(): ?string
  49. {
  50. $senderEmail = $this->systemConfigService->get('core.basicInformation.email');
  51. if ($senderEmail === null || trim($senderEmail) === '') {
  52. $senderEmail = $this->systemConfigService->get('core.mailerSettings.senderAddress');
  53. }
  54. if ($senderEmail === null || trim($senderEmail) === '') {
  55. return null;
  56. }
  57. return $senderEmail;
  58. }
  59. }