src/Model/Mailer.php line 51

  1. <?php
  2. /**
  3.  * Created by PhpStorm.
  4.  * User: mirko
  5.  * Date: 09/12/2018
  6.  * Time: 10:51
  7.  */
  8. namespace App\Model;
  9. use App\Controller\ReturnImpostazioniServiceController;
  10. use App\Controller\ServiziController;
  11. use App\Entity\User;
  12. use Symfony\Component\Mailer\Exception\TransportExceptionInterface;
  13. use Symfony\Component\Mailer\Transport;
  14. use Symfony\Component\Mime\Email;
  15. use Symfony\Component\Mime\Part\DataPart;
  16. use Twig\Environment;
  17. /**
  18.  * Class Mailer
  19.  * @package App\Model
  20.  */
  21. class Mailer
  22. {
  23.     /** @var \Symfony\Component\Mailer\Mailer $mailer */
  24.     private $mailer;
  25.     /** @var $imp ReturnImpostazioniServiceController */
  26.     private $imp;
  27.     /** @var $twig Environment */
  28.     private $twig;
  29.     /** @var $servizi ServiziController */
  30.     private $servizi;
  31.     private $mailCcnComunicazioni = array();
  32.     /**
  33.      * Mailer constructor.
  34.      * @param ReturnImpostazioniServiceController $imp
  35.      * @param Environment $twig
  36.      * @param ServiziController $serviziController
  37.      */
  38.     public function __construct(ReturnImpostazioniServiceController $impEnvironment $twigServiziController $serviziController)
  39.     {
  40.         $this->imp $imp;
  41.         $this->twig $twig;
  42.         $this->servizi $serviziController;
  43.         // PARAMETRI POSTA DA SERVER
  44.         $this->imp->caricaCacheImpostazioniInvioMail();
  45.         $host $this->imp->ritornaImpostazioneDaNome("MailHostSmtp");
  46.         $porta $this->imp->ritornaImpostazioneDaNome("MailPorta");
  47.         $username $this->imp->ritornaImpostazioneDaNome("MailUsername");
  48.         $password $this->imp->ritornaImpostazioneDaNome("MailPassword");
  49.         $cifratura $this->imp->ritornaImpostazioneDaNome("MailCrittografia");
  50.         $mailCcnComunicazioni $this->imp->ritornaImpostazioneDaNome('MailCcComunicazioni');
  51.         if($mailCcnComunicazioni != ''){
  52.             if(strpos($mailCcnComunicazioni';'))
  53.                 $this->mailCcnComunicazioni explode(';'$mailCcnComunicazioni);
  54.             else
  55.                 $this->mailCcnComunicazioni = array($mailCcnComunicazioni);
  56.         }
  57.         // Generate connection configuration
  58.         if ($host != '' && $porta != '' ) {
  59.             $dsn "smtp://" urlencode($username) . ":" urlencode($password) . "@" $host ":" $porta;
  60.             if ($cifratura == 'ssl') {
  61.                 $dsn $dsn '??encryption=ssl&auth_mode=login&verify_peer=false&allow_self_signed=true';
  62.             }
  63.             $transport Transport::fromDsn($dsn);
  64.             $this->mailer = new \Symfony\Component\Mailer\Mailer($transport);
  65.         }
  66.     }
  67.     /**
  68.      * @param string $oggetto
  69.      * @param string $body
  70.      * @param string|array $to
  71.      * @param array $cc
  72.      * @param string $from
  73.      * @param string $contentType
  74.      * @param User|null $user
  75.      * @param bool $incorporaBodyInTemplateMail
  76.      * @param array|null $allegati
  77.      */
  78.     public function SendMail($oggetto$body$to$cc = array(), $from ""$contentType ''$incorporaBodyInTemplateMail false$user null$allegati = array())
  79.     {
  80.         if ($from == "") {
  81.             $from $this->imp->ritornaImpostazioneDaNome("IndirizzoMailFromInvioComunicazioni");
  82.         }
  83.         if ($contentType == '')
  84.             $contentType 'text/html';
  85.         $falliti = array();
  86.         $exTrovata false;
  87.         $errore '';
  88.         try {
  89.             if ($incorporaBodyInTemplateMail) {
  90.                 $body $this->twig->render('email/base_mail.html.twig', array('customBody' => $body));
  91.             }
  92.             $mail = (new Email());
  93.             $mail->subject($oggetto)
  94.                 ->from($from)
  95.                 ->html(
  96.                     $body
  97.                 );
  98.             if (is_array($to) && count($to) > 0){
  99.                 foreach ($to as $e)
  100.                     $mail->addTo($e);
  101.             }else{
  102.                 $mail->to($to);
  103.             }
  104.             if($allegati && count($allegati) > 0){
  105.                 foreach ($allegati as $a)
  106.                     $mail->addPart(new DataPart($a[0], $a[1]));
  107.             }
  108.             if (count($cc) > 0){
  109.                 foreach ($cc as $e)
  110.                     $mail->addCc($e);
  111.             }
  112.             if(count($this->mailCcnComunicazioni) > 0) {
  113.                 foreach ($this->mailCcnComunicazioni as $e)
  114.                     $mail->addBcc($e);
  115.             }
  116.             $this->servizi->logger->info("Invio messaggio");
  117.             $this->mailer->send($mail);
  118.         } catch (\Exception $ex) {
  119.             $exTrovata true;
  120.             $errore $ex->getMessage() . "\n" $ex->getTraceAsString();
  121.             $this->servizi->DebuggaException($ex'Errore invio mail: ');
  122.         } catch (TransportExceptionInterface $e) {
  123.             $exTrovata true;
  124.             $errore $e->getMessage() . "\n" $e->getTraceAsString();
  125.             $this->servizi->DebuggaException($e'Errore invio mail: ');
  126.         }
  127.         $this->servizi->InserisciRegistroMail(
  128.             (count($falliti) > || $exTrovata) ? false true,
  129.             $oggetto,
  130.             $body,
  131.             $from,
  132.             $to,
  133.             $user,
  134.             $errore,
  135.             count($falliti) > "Failed: " join(';'$falliti) : '',
  136.             count($cc) > join(';'$cc) : '',
  137.             '',
  138.             $contentType
  139.         );
  140.     }
  141. }