فهرست منبع

système d'envoi d'e-mails systèmes sans expéditeur (de type ne-pas-repondre), par exemple pour la confirmation de changement de sous-domaine

opentalent 1 سال پیش
والد
کامیت
d17a10a099

+ 3 - 1
src/Message/Handler/MailerHandler.php

@@ -24,7 +24,9 @@ class MailerHandler
     public function __invoke(MailerCommand $mailerCommand): void
     {
         $mailerModel = $mailerCommand->getMailerModel();
-        $emails = $this->mailer->main($mailerModel);
+        $isSystemEmail = $mailerModel->isSystemEmail();
+
+        $emails = $this->mailer->main($mailerModel, $isSystemEmail);
 
         if ($mailerModel->getNotify()) {
             /** @var Email */

+ 1 - 1
src/Service/Mailer/Email.php

@@ -35,7 +35,7 @@ class Email
         return $this;
     }
 
-    public function geFromName(): string
+    public function getFromName(): string
     {
         return $this->fromName;
     }

+ 16 - 13
src/Service/Mailer/Mailer.php

@@ -141,16 +141,21 @@ class Mailer
      *
      * @see MailerTest::testCreateSymfonyEmail()
      */
-    public function createSymfonyEmail(Email $email): SymfonyEmail
-    {
-        $addressMailFrom = new Address($email->getFrom(), $email->geFromName());
+    public function createSymfonyEmail(Email $email, bool $isSystemEmail = false): SymfonyEmail {
+    
+        $addressMailFrom = $isSystemEmail ? new Address('ne-pas-repondre@opentalent.com', 'Opentalent') :
+                                            new Address($email->getFrom(), $email->getFromName());
 
-        return (new SymfonyEmail())
+        $symfonyEmail = (new SymfonyEmail())
             ->from($addressMailFrom)
-            ->replyTo($addressMailFrom)
-            ->returnPath(Address::create('mail.report@opentalent.fr'))
-            ->subject($email->getEmailEntity()->getAbout())
-        ;
+            ->subject($email->getEmailEntity()->getAbout());
+
+        if (!$isSystemEmail) {
+            $symfonyEmail->replyTo($addressMailFrom)
+                        ->returnPath(Address::create('mail.report@opentalent.fr'));
+        }
+
+        return $symfonyEmail;
     }
 
     /**
@@ -188,8 +193,7 @@ class Mailer
                     'unDelivered' => $unDelivered,
                 ]
             )
-            ->addTo(new Address($email->getFrom(), $email->geFromName()))
-        ;
+            ->addTo(new Address($email->getFrom(), $email->getFromName()));
     }
 
     /**
@@ -249,8 +253,7 @@ class Mailer
             ->setAccess($emailRecipient->getAccess())
             ->setOrganization($emailRecipient->getOrganization())
             ->setDateSend(new \DateTime('now'))
-            ->setStatus($emailRecipient->getSendStatus())
-        ;
+            ->setStatus($emailRecipient->getSendStatus());
 
         // Return en deux temps car setStatus renvoi un AbstractReport et non un ReportEmail
         return $reportEmail;
@@ -282,7 +285,7 @@ class Mailer
      */
     public function addHeaders(SymfonyEmail $symfonyMail, Email $email): void
     {
-        $symfonyMail->getHeaders()->addTextHeader('List-Unsubscribe', 'mailto:'.$email->getFrom().'?subject=désabonnement');
+        $symfonyMail->getHeaders()->addTextHeader('List-Unsubscribe', 'mailto:' . $email->getFrom() . '?subject=désabonnement');
         $symfonyMail->getHeaders()->addTextHeader('X-ID-OT', $email->getEmailEntity()->getUuid()->toString());
     }
 

+ 4 - 1
src/Service/Mailer/Model/MailerModelInterface.php

@@ -13,4 +13,7 @@ interface MailerModelInterface
     public function setNotify(bool $notify): AbstractMailerModel;
 
     public function getNotify(): bool;
-}
+
+    public function setIsSystemEmail(bool $isSystemEmail): self;
+    
+    public function isSystemEmail(): bool;}

+ 13 - 0
src/Service/Mailer/Model/SubdomainChangeModel.php

@@ -12,6 +12,7 @@ class SubdomainChangeModel extends AbstractMailerModel implements MailerModelInt
     private int $organizationId;
     private int $subdomainId;
     private string $url;
+    private bool $isSystemEmail = false;
 
     public function __construct()
     {
@@ -52,4 +53,16 @@ class SubdomainChangeModel extends AbstractMailerModel implements MailerModelInt
     {
         return $this->url;
     }
+
+    public function setIsSystemEmail(bool $isSystemEmail): self
+    {
+        $this->isSystemEmail = $isSystemEmail;
+
+        return $this;
+    }
+
+    public function isSystemEmail(): bool
+    {
+        return $this->isSystemEmail;
+    }
 }

+ 14 - 2
src/Service/Typo3/SubdomainService.php

@@ -214,18 +214,30 @@ class SubdomainService
     /**
      * Build the data model for the confirmation email.
      */
+    // protected function getMailModel(Subdomain $subdomain): SubdomainChangeModel
+    // {
+    //     $adminAccess = $this->accessRepository->findAdminAccess($subdomain->getOrganization());
+
+    //     /* @phpstan-ignore-next-line */
+    //     return (new SubdomainChangeModel())
+    //         ->setOrganizationId($subdomain->getOrganization()->getId())
+    //         ->setSubdomainId($subdomain->getId())
+    //         ->setUrl($this->organizationUtils->getOrganizationWebsite($subdomain->getOrganization()))
+    //         ->setSenderId($adminAccess->getId());
+    // }
     protected function getMailModel(Subdomain $subdomain): SubdomainChangeModel
     {
         $adminAccess = $this->accessRepository->findAdminAccess($subdomain->getOrganization());
 
-        /* @phpstan-ignore-next-line */
         return (new SubdomainChangeModel())
             ->setOrganizationId($subdomain->getOrganization()->getId())
             ->setSubdomainId($subdomain->getId())
             ->setUrl($this->organizationUtils->getOrganizationWebsite($subdomain->getOrganization()))
-            ->setSenderId($adminAccess->getId());
+            ->setSenderId($adminAccess->getId())
+            ->setIsSystemEmail(true); 
     }
 
+
     /**
      * Send the confirmation email to the organization after a new subdomain has been activated.
      */

+ 1 - 1
tests/Unit/Service/Mailer/Builder/OnSubdomainChangeMailBuilderTest.php

@@ -114,6 +114,6 @@ class OnSubdomainChangeMailBuilderTest extends TestCase
         $this->assertInstanceOf(Email::class, $email);
         $this->assertEquals('contenu', $email->getContent());
         $this->assertEquals($this->opentalentNoReplyEmailAddress, $email->getFrom());
-        $this->assertEquals($organization->getName(), $email->geFromName());
+        $this->assertEquals($organization->getName(), $email->getFromName());
     }
 }

+ 3 - 3
tests/Unit/Service/Mailer/MailerTest.php

@@ -226,7 +226,7 @@ class MailerTest extends TestCase
         $email = $this->getMockBuilder(Email::class)->disableOriginalConstructor()->getMock();
         $email->method('getEmailEntity')->willReturn($emailEntity);
         $email->method('getFrom')->willReturn('foo.bar@opentalent.fr');
-        $email->method('geFromName')->willReturn('Bill');
+        $email->method('getFromName')->willReturn('Bill');
 
         $reportEmail = $mailer->createReportEmail(new ArrayCollection([$email]));
 
@@ -381,11 +381,11 @@ class MailerTest extends TestCase
 
         $email = $this->getMockBuilder(Email::class)->disableOriginalConstructor()->getMock();
         $email->method('getFrom')->willReturn('foo.bar@opentalent.fr');
-        $email->method('geFromName')->willReturn('Ben Yolo');
+        $email->method('getFromName')->willReturn('Ben Yolo');
         $email->method('getEmailEntity')->willReturn($emailEntity);
         $email->method('getContent')->willReturn('contenu');
 
-        $addressMailFrom = new Address($email->getFrom(), $email->geFromName());
+        $addressMailFrom = new Address($email->getFrom(), $email->getFromName());
         $symfonyMail = $mailer->createSymfonyEmail($email);
         $this->assertInstanceOf(SymfonyEmail::class, $symfonyMail);
         $this->assertEquals($symfonyMail->getFrom(), [$addressMailFrom]);