|
|
@@ -23,7 +23,7 @@ use Symfony\Component\Mime\Address;
|
|
|
use Symfony\Component\Mime\Email as SymfonyEmail;
|
|
|
|
|
|
/**
|
|
|
- * Classe Mailer : Service assurant l'envoie d'un mail à un destinataire
|
|
|
+ * Classe Mailer : Service assurant l'envoi d'un mail à un destinataire
|
|
|
*/
|
|
|
class Mailer
|
|
|
{
|
|
|
@@ -36,18 +36,17 @@ class Mailer
|
|
|
private Environnement $environnement,
|
|
|
private LoggerInterface $logger
|
|
|
)
|
|
|
- {
|
|
|
- }
|
|
|
+ {}
|
|
|
|
|
|
/**
|
|
|
- * Main fonction qui itère les différentes étapes nécessaires à l'envoie d'un email
|
|
|
+ * Main fonction qui itère les différentes étapes nécessaires à l'envoi d'un email
|
|
|
* - Le Build
|
|
|
* - Le Send
|
|
|
* - Le Reporting
|
|
|
*
|
|
|
* @param MailerModelInterface $mailerModel
|
|
|
- * @throws \Exception
|
|
|
- *
|
|
|
+ * @return ArrayCollection
|
|
|
+ * @throws TransportExceptionInterface
|
|
|
* @see MailerTest::testMain()
|
|
|
*/
|
|
|
public function main(MailerModelInterface $mailerModel): ArrayCollection{
|
|
|
@@ -80,13 +79,15 @@ class Mailer
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * Fonction d'envoie
|
|
|
+ * Fonction d'envoi
|
|
|
+ *
|
|
|
* @param EmailInterface $email
|
|
|
*
|
|
|
+ * @throws TransportExceptionInterface
|
|
|
* @see MailerTest::testSend()
|
|
|
*/
|
|
|
public function send(EmailInterface $email): void{
|
|
|
- //On créer le mail
|
|
|
+ //On créé le mail
|
|
|
$symfonyMail = $this->createSymfonyEmail($email);
|
|
|
|
|
|
$this->addRecipients($symfonyMail, $email);
|
|
|
@@ -114,7 +115,7 @@ class Mailer
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * Envoie le rapport d'envoi
|
|
|
+ * Envoi le rapport d'envoi
|
|
|
* @param ArrayCollection $emails
|
|
|
*
|
|
|
* @see MailerTest::testSendReport()
|
|
|
@@ -153,20 +154,22 @@ class Mailer
|
|
|
*
|
|
|
* @see MailerTest::testSetSymfonyEmailContent()
|
|
|
*/
|
|
|
- public function setSymfonyEmailContent(SymfonyEmail $symfonyEmail, Email $email){
|
|
|
+ public function setSymfonyEmailContent(SymfonyEmail $symfonyEmail, Email $email): void
|
|
|
+ {
|
|
|
$symfonyEmail
|
|
|
->html($email->getContent())
|
|
|
->text($this->stringsUtils->convertHtmlToText($email->getContent()));
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * Créer le Templated Email contenant le rapport d'envoi
|
|
|
+ * Créé le Templated Email contenant le rapport d'envoi
|
|
|
* @param ArrayCollection $emails
|
|
|
- * @return object|TemplatedEmail
|
|
|
+ * @return TemplatedEmail
|
|
|
*
|
|
|
* @see MailerTest::testCreateReportEmail()
|
|
|
*/
|
|
|
- public function createReportEmail(ArrayCollection $emails){
|
|
|
+ public function createReportEmail(ArrayCollection $emails): TemplatedEmail
|
|
|
+ {
|
|
|
[$delivered, $unDelivered] = $this->getDeliveredAndUndelivered($emails);
|
|
|
|
|
|
/** @var Email $email */
|
|
|
@@ -217,7 +220,8 @@ class Mailer
|
|
|
*
|
|
|
* @see MailerTest::testPersistEmailEntity()
|
|
|
*/
|
|
|
- public function persistEmailEntity(Email $email){
|
|
|
+ public function persistEmailEntity(Email $email): void
|
|
|
+ {
|
|
|
$emailEntity = $email->getEmailEntity();
|
|
|
/** @var EmailRecipient $emailRecipient */
|
|
|
foreach ($email->getEmailRecipients() as $emailRecipient){
|
|
|
@@ -230,6 +234,7 @@ class Mailer
|
|
|
* Création du rapport
|
|
|
* @param EmailRecipient $emailRecipient
|
|
|
*
|
|
|
+ * @return ReportEmail
|
|
|
* @see MailerTest::testCreateReport()
|
|
|
*/
|
|
|
public function createReport(EmailRecipient $emailRecipient): ReportEmail{
|
|
|
@@ -246,6 +251,7 @@ class Mailer
|
|
|
* Reduit le nombre d'emails a envoyer si on ne se trouve pas en prod
|
|
|
* @param ArrayCollection $emailsCollection
|
|
|
*
|
|
|
+ * @return ArrayCollection
|
|
|
* @see MailerTest::testReduceEmailsCollectionInPreproduction()
|
|
|
*/
|
|
|
public function reduceEmailsCollectionInPreproduction(ArrayCollection $emailsCollection): ArrayCollection {
|
|
|
@@ -263,7 +269,8 @@ class Mailer
|
|
|
*
|
|
|
* @see MailerTest::testAddHeaders()
|
|
|
*/
|
|
|
- public function addHeaders(SymfonyEmail $symfonyMail, Email $email){
|
|
|
+ public function addHeaders(SymfonyEmail $symfonyMail, Email $email): void
|
|
|
+ {
|
|
|
$symfonyMail->getHeaders()->addTextHeader('List-Unsubscribe','mailto:'.$email->getFrom().'?subject=désabonnement');
|
|
|
$symfonyMail->getHeaders()->addTextHeader('X-ID-OT', $email->getEmailEntity()->getUuid()->toString());
|
|
|
}
|
|
|
@@ -271,11 +278,11 @@ class Mailer
|
|
|
/**
|
|
|
* On change le #__#ANTISPAM_PERSON_EMAIL#__# par la liste des emails afin d'éviter le spamming sur l'envoi en masse
|
|
|
* @param Email $email
|
|
|
- * @param array $to
|
|
|
- *
|
|
|
+ * @param array $addresses
|
|
|
* @see MailerTest::testSetAntiSpam()
|
|
|
*/
|
|
|
- public function setAntiSpam(Email $email, array $addresses){
|
|
|
+ public function setAntiSpam(Email $email, array $addresses): void
|
|
|
+ {
|
|
|
// map des Address pour ne conserver qu'un tableau d'email
|
|
|
$to = array_map(function(Address $address){
|
|
|
return $address->getAddress();
|
|
|
@@ -285,10 +292,10 @@ class Mailer
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * On ajoute les destinataires suivant le type d'envoie souhaité
|
|
|
- * @param SymfonyEmail $symfonyMail
|
|
|
- * @param Address $addressesMail
|
|
|
+ * On ajoute les destinataires suivant le type d'envoi souhaité
|
|
|
*
|
|
|
+ * @param SymfonyEmail $symfonyMail
|
|
|
+ * @param Email $email
|
|
|
* @see MailerTest::testAddRecipients()
|
|
|
*/
|
|
|
public function addRecipients(SymfonyEmail $symfonyMail, Email $email): void{
|
|
|
@@ -316,4 +323,4 @@ class Mailer
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
-}
|
|
|
+}
|