<?php
namespace BaseBundle\Event;
use Pimcore\Event\Model\MailEvent;
use Pimcore\Log\ApplicationLogger;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Component\Mime\Crypto\DkimSigner;
class EmailDkimSignerEvent {
public function __construct(
private ApplicationLogger $logger,
private SessionInterface $session,
private ?array $dkimConfig = null,
) {
}
public function preSend(MailEvent $mailEvent): void {
if (!is_array($this->dkimConfig)) return;
$mail = $mailEvent->getMail();
$signer = new DkimSigner(
file_get_contents(PIMCORE_PROJECT_ROOT.'/'.$this->dkimConfig["privateKey"]),
$this->dkimConfig["domain"],
$this->dkimConfig["selector"]
);
try {
$signedMail = $signer->sign($mail);
$signedHeaders = $signedMail->getHeaders();
$headers = $mail->getHeaders();
$headers->add($signedHeaders->get("DKIM-Signature"));
} catch (\Exception $e) {
$this->logger->logException("could not sign message", $e);
$this->session->getFlashBag()->add('error', "could not sign message: ".$e->getMessage());
}
}
}