<?php
// src/Controller/MailerController.php
namespace App\Controller;
use App\Entity\Message;
use App\Entity\ProcessTable;
use App\Entity\SendingMessage;
use App\Message\TousMails;
use Symfony\Component\Mime\Email;
use App\Repository\MessageRepository;
use Symfony\Component\Process\Process;
use App\Repository\ProcessTableRepository;
use App\Repository\SendingMessageRepository;
use Symfony\Bridge\Twig\Mime\TemplatedEmail;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Console\Input\ArrayInput;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpKernel\KernelInterface;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\Console\Output\BufferedOutput;
use Symfony\Component\HttpFoundation\StreamedResponse;
use Symfony\Bundle\FrameworkBundle\Console\Application;
use Symfony\Component\Form\Extension\Core\Type\EmailType;
use Symfony\Component\Process\Exception\ProcessFailedException;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Messenger\MessageBusInterface;
class MailerController extends AbstractController
{
private $messageRepository;
private $processTableRepository;
private $sendingMessageRepository;
private $mailer;
public function __construct(MessageRepository $messageRepository,ProcessTableRepository $processTableRepository , SendingMessageRepository $sendingMessageRepository, MailerInterface $mailer)
{
$this->messageRepository = $messageRepository;
$this->processTableRepository = $processTableRepository;
$this->sendingMessageRepository = $sendingMessageRepository;
$this->mailer = $mailer;
}
/**
* @Route("/countingMails",name="counting-mails")
*/
public function countingMails()
{
$nbre = $this->processTableRepository->findMails();
//dd($nbre['nbre']);
return new Response($nbre['nbre']);
}
/**
* @Route("/testemail/{testemail}", name="send-test-mail")
*/
public function sendTestEmail( $testemail)
{
$brouillon = $this->messageRepository->findBrouillon();
if(empty($brouillon)){
$this->addFlash(
'warning',
'Pas de lettre à envoyer. Il faut en créer une!'
);
return $this->redirectToRoute('new');
}
$brouillon = $brouillon[0];
$messageId = $brouillon->getId();
$email = (new TemplatedEmail())
->from('contact@franceolive.com')
->to($testemail)
//->cc('cc@example.com')
//->bcc('bcc@example.com')
->replyTo('contact@franceolive.fr')
//->priority(Email::PRIORITY_HIGH)
->subject(utf8_decode($brouillon->getTitre()))
->text(utf8_decode($brouillon->getTexte()))
->htmlTemplate('mailer/mail.html.twig')
->context([
'texte' => utf8_decode($brouillon->getTexte())
])
;
$this->mailer->send($email);
$this->addFlash(
'success',
'Mail envoyé !'
);
return $this->redirectToRoute('home');
}
/**
* @Route("/sendmail/{mail}", name="send-mail")
*/
public function sendEmail( $mail)
{
$brouillon = $this->messageRepository->findBrouillon();
if(empty($brouillon)){
$this->addFlash(
'warning',
'Pas de lettre à envoyer. Il faut en créer une!'
);
return $this->redirectToRoute('new');
}
$brouillon = $brouillon[0];
$messageId = $brouillon->getId();
$email = (new TemplatedEmail())
->from('contact@franceolive.com')
->to($mail)
//->cc('cc@example.com')
//->bcc('bcc@example.com')
->replyTo('contact@franceolive.fr')
//->priority(Email::PRIORITY_HIGH)
->subject(utf8_decode($brouillon->getTitre()))
->text(utf8_decode($brouillon->getTexte()))
->htmlTemplate('mailer/mail.html.twig')
->context([
'texte' => utf8_decode($brouillon->getTexte())
])
;
$list_unsubscribe = "<mailto: contact@franceolive.fr?subject=desinscription>";
$email->getHeaders()->addTextHeader( 'List-Unsubscribe', $list_unsubscribe );
$this->mailer->send($email);
return new Response("OK");
}
/**
* @Route("/gestion/testadresse", name="choix-message-test")
*/
public function choixAdresseTest(Request $request,MessageRepository $messageRepository){
//existe-t-il un brouillon ?
$brouillon = $messageRepository->findBrouillon();
if(empty($brouillon)){
$this->addFlash(
'warning',
'Pas de lettre à envoyer. Il faut en créer une!'
);
return $this->redirectToRoute('new');
}
$brouillon = $brouillon[0];
$data = array();
$form = $this->createFormBuilder($data)
->add('email', EmailType::class)
->getForm();
if ($request->isMethod('POST')) {
$form->handleRequest($request);
$data = $form->getData();
$email = $data['email'];
return $this->redirectToRoute('send-test-mail',array(
'testemail'=>$email
));
}
return $this->render('mailer/mailtest.html.twig',array(
'form' => $form->createView()
));
}
/**
* @Route("/envoiATous",name="envoiATous")
*
*/
public function envoiAtous(MessageBusInterface $messageBus): Response
{
//juste pour avoir le nombre de mails à envoyer
$s = $this->sendingMessageRepository->find(1);
//dd($s);
$tabMail = unserialize($s->getMailArray());
$total = count($tabMail);
//mise dans la queue du messenger
$message = new TousMails($total);
//dd($message);
$messageBus->dispatch($message);
return $this->render('/lettre/envoiencours.html.twig',[
'total'=> $total
]);
}
/**
* @Route("/envoifin",name="envoifin")
*
*/
public function envoifin(): Response
{
return $this->render('/lettre/envoifin.html.twig',[
//'total'=> count($tabMail)
]);
}
}