Files
e-cosplay/src/Service/Mailer/Mailer.php
Serreau Jovann 5b4c06b470 ```
 feat(doc): Ajoute la page de documents et les AGs au sitemap.
♻️ refactor(.env): Met à jour l'URL de développement Ngrok.
 feat(SitemapSubscriber): Ajoute les URLs contact et doc au sitemap.
 feat(AgGenerator): Ajoute l'option de largeur à la signature PDF.
 feat(Ag/Main): Ajoute le champ de signature de l'adhésion à l'AG.
 feat(AgTypeEdit): Crée le formulaire d'édition du type d'AG.
🌐 i18n: Ajoute des traductions chinoises pour la page documents.
 feat(Mailer): Ajoute le contenu texte aux e-mails.
 feat(DocumentController): Ajoute le contrôleur de documents.
 feat(txt-mails): Ajoute les templates de mails en texte.
 feat(AdController): Ajoute le contrôleur d'adhésion.
 feat(Service/Pdf): Crée le service PDF pour l'adhésion à l'AG.
 feat(AdminController): Ajoute la gestion de l'AG à l'admin.
🌐 i18n: Ajoute les traductions françaises pour la page documents.
 feat(Members): Ajoute la relation avec la signature de l'AG.
```
2025-11-23 22:57:58 +01:00

102 lines
2.9 KiB
PHP

<?php
namespace App\Service\Mailer;
use App\Entity\Mail;
use Doctrine\ORM\EntityManagerInterface;
use Exception;
use Symfony\Component\HttpKernel\Profiler\Profiler;
use Symfony\Component\Mailer\Exception\TransportExceptionInterface;
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Component\Mailer\Transport\Smtp\EsmtpTransport;
use Symfony\Component\Mime\Address;
use Symfony\Component\Mime\Email;
use Symfony\Component\Mime\Header\IdentificationHeader;
use Symfony\Component\Process\Exception\ProcessFailedException;
use Symfony\Component\Process\Process;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
use Twig\Environment;
class Mailer
{
private readonly MailerInterface $mailer;
public function __construct(
MailerInterface $mailer,
private readonly EntityManagerInterface $entityManager,
private readonly UrlGeneratorInterface $urlGenerator,
private readonly ?Profiler $profiler,
private readonly Environment $environment,
) {
$this->mailer = $mailer;
}
private function convertMjmlToHtml(string $mjmlContent): string
{
$process = new Process(['mjml', '--stdin']);
$process->setInput($mjmlContent);
try {
$process->run();
if (!$process->isSuccessful()) {
throw new ProcessFailedException($process);
}
return $process->getOutput();
} catch (ProcessFailedException|Exception) {
return ''; // Retourne vide en cas d'échec
}
}
/**
* @param string $address
* @param string $addressName
* @param string $subject
* @param string $template
* @param array<string, mixed> $data
* @param array<\Symfony\Component\Mime\Part\DataPart> $files
*/
public function send(
string $address,
string $addressName,
string $subject,
string $template,
array $data,
array $files = []
): void {
$dest = new Address($address, $addressName);
$src = new Address("contact@e-cosplay.fr", "E-Cosplay");
$mail = (new Email())
->subject($subject)
->to($dest)
->from($src);
$mjmlGenerator = $this->environment->render($template, [
'system' => [
'subject' => $subject,
'path' => $_ENV['PATH_URL'],
],
'datas' => $data,
]);
$htmlContent = $this->convertMjmlToHtml($mjmlGenerator);
$txtContent = $this->environment->render('txt-'.$template,[
'system' => [
'subject' => $subject,
'path' => $_ENV['PATH_URL'],
],
'datas' => $data,
]);
foreach ($files as $file) {
$mail->addPart($file);
}
$mail->html($htmlContent);
$mail->text($txtContent);
$this->mailer->send($mail);
}
}