<?php
namespace App\Subscriber\Mail;
use App\Event\Mail\DoubleOptinCreatedEvent;
use App\Service\Mail\DoubleOptinService;
use App\Service\System\BounceService;
use App\Service\System\MailProviderService;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class DoiBounceSubscriber implements EventSubscriberInterface
{
/**
* @var MailProviderService
*/
protected $doiService;
/**
* @var BounceService
*/
protected $bounceService;
/**
* DoiBounceSubscriber constructor.
*/
public function __construct(DoubleOptinService $doiService, BounceService $bounceService)
{
$this->doiService = $doiService;
$this->bounceService = $bounceService;
}
public static function getSubscribedEvents(): array
{
return [
DoubleOptinCreatedEvent::class => [
['onDoiCreatedRemoveBounces', 0],
],
];
}
/**
* @throws \Doctrine\DBAL\Exception
*/
public function onDoiCreatedRemoveBounces(DoubleOptinCreatedEvent $event)
{
$account = $event->getAccount();
$email = $account->getEmail();
$domain = $this->extractDomain($email);
$doiDomains = $this->doiService->getDOIRequiredDomains();
if (in_array($domain, $doiDomains)) {
$this->bounceService->deleteBouncesByAccountAndEmail($event->getAccount(), $email);
}
}
protected function extractDomain(string $email): string
{
return strtolower(substr($email, strpos($email, '@') + 1));
}
}