<?php
namespace App\Subscriber\Mail;
use App\Dictionary\MailProviderStatus;
use App\Entity\MailProvider;
use App\Event\Mail\MogelmailSuspectMatchEvent;
use App\Service\System\MailProviderService;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class MogelmailSubscriber implements EventSubscriberInterface
{
/**
* @var MailProviderService
*/
protected $mailProviderService;
/**
* MogelmailSubscriber constructor.
*/
public function __construct(MailProviderService $mailProviderService)
{
$this->mailProviderService = $mailProviderService;
}
public function getProviderService(): MailProviderService
{
return $this->mailProviderService;
}
public static function getSubscribedEvents(): array
{
return [
MogelmailSuspectMatchEvent::class => [
['onMailSuspectForTrashCreateProviderEntity', 0],
],
];
}
/**
* @throws \Doctrine\ORM\ORMException
* @throws \Doctrine\ORM\OptimisticLockException
*/
public function onMailSuspectForTrashCreateProviderEntity(MogelmailSuspectMatchEvent $event)
{
$domain = $event->getDomain();
$service = $this->getProviderService();
if ($service->findByName($domain)) {
return;
}
$provider = new MailProvider();
$provider->setName($domain);
$provider->setDomains(join("\n", [$domain]));
$provider->setBounceStatus(MailProviderStatus::MOGELMAIL);
$provider->setAntiSpamLoginDelay(7200); // 2 hours delay for mogelmail detected providers
$service->storeEntity($provider);
}
}