date-poll-api/src/Service/MailService.php

179 lines
5.1 KiB
PHP

<?php
namespace App\Service;
use App\Entity\Comment;
use App\Entity\Owner;
use App\Entity\Poll;
use Doctrine\ORM\EntityManagerInterface;
use Exception;
use Symfony\Bridge\Twig\Mime\TemplatedEmail;
use Symfony\Component\Mailer\Mailer;
use Symfony\Component\Mailer\Transport\Smtp\EsmtpTransport;
use Symfony\Component\Mime\Address;
class MailService {
/**
* @var EntityManagerInterface
*/
private $em;
private $mailer;
// public function __construct( EntityManagerInterface $entityManager , Mailer $mailer) {
public function __construct( EntityManagerInterface $entityManager ) {
$this->em = $entityManager;
$transport = new EsmtpTransport();
$this->mailer = new Mailer( $transport );
// $this->mailer = $mailer;
}
/**
* @param Owner $foundOwner
* @param Poll|null $poll
*
* @throws \Symfony\Component\Mailer\Exception\TransportExceptionInterface
*/
public function sendCreationMailAction( Owner $foundOwner, Poll $poll = null ) {
// anti spam , limit to every minute TODO
$config = [
'owner' => $foundOwner,
'from' => 'ne-pas-repondre@framadate-api.cipherbliss.com',
'poll' => $poll,
'title' => 'Création de sondage - ' . ( $poll ? $poll->getTitle() : $poll ),
'email_template' => 'emails/creation-mail.html.twig',
];
return $this->sendMailWithVars( $config );
}
/**
* anti spam , limit to every minute TODO
*
* @param Owner $owner
*
* @return bool
*/
public function antispamCheck( Owner $owner ) {
// $lastSend = $admin_user->getRequestedPollsDate();
// $now = new \DateTime();
// if ( date_diff( $lastSend, $now ) < 60 ) {
// // too soon!
// die( 'too soon!' );
// }
// $admin_user->setRequestedPollsDate( $now );
// $em->persist( $admin_user );
// $em->flush();
return true;
}
/**
* send created polls to an owner
*
* @param Owner $owner
*
* @return int|void
* @throws Exception
*/
public function sendOwnerPollsAction( Owner $owner ) {
$config = [
'owner' => $owner,
'title' => 'Framadate | Mes sondages',
'email_template' => 'emails/owner-list.html.twig',
];
$this->sendMailWithVars( $config );
return 1;
}
public function sendCommentNotification( Comment $comment ) {
$config = [
'comment' => $comment,
'owner' => $comment->getOwner(),
'title' => 'Framadate | commentaire de ' . $comment->getOwner()->getPseudo() . ' _ sondage ' . $comment->getPoll()->getTitle(),
'email_template' => 'emails/comment-notification.html.twig',
];
return $this->sendMailWithVars( $config );
}
/**
* generic way to send email with html template
*
* @param $config
*
* @throws \Symfony\Component\Mailer\Exception\TransportExceptionInterface
*/
public function sendMailWithVars( $config ) {
if ( ! $config[ 'poll' ] ) {
$config[ 'poll' ] = new Poll();
}
$emailChoicesTemplates = [
'creation_poll' => 'creation-mail.html.twig',
'edit_poll' => 'modification-notification-mail.html.twig',
'creation_poll_admin' => 'author-mail.html.twig',
'owner_list' => 'owner-list.html.twig',
'expiration' => 'expiration-mail.html.twig',
'creation_comment' => 'comment-notification.html.twig',
'creation_vote' => 'vote-notification.html.twig',
];
$emailChoicesTitles = [
'creation_poll' => 'Framadate | Création de sondage - lien public - ' . $config[ 'poll' ]->getTitle(),
'edit_poll' => 'Framadate | Modification de sondage - ' . $config[ 'poll' ]->getTitle(),
'creation_poll_admin' => 'Framadate | Création de sondage - lien admin - ',
'owner_list' => 'Framadate | Vos sondages créés',
'expiration' => 'Framadate | Notice d\'expiration du sondage ' . $config[ 'poll' ]->getTitle(),
'creation_comment' => 'Framadate | Commentaire de "' . $config[ 'owner' ]->getPseudo() . '" - sondage ' . $config[ 'poll' ]->getTitle(),
'creation_vote' => 'Framadate | Vote de "' . $config[ 'owner' ]->getPseudo() . '" - sondage ' . $config[ 'poll' ]->getTitle(),
];
$email = ( new TemplatedEmail() )
->from( new Address( $config[ 'from' ] ) )
// ->setHeaders( [new Header('charset', 'UTF-8' )])
->subject( $config[ 'title' ] )
->to( $config[ 'owner' ]->getEmail() )
->htmlTemplate( $config[ 'email_template' ] )
->context( $config );
// $email = ( new \Swift_Mime_SimpleMessage($config[ 'from' ]) )
// ->setFrom( new Address( $config[ 'from' ] ) )
//// ->setHeaders( [new Header('charset', 'UTF-8' )])
// ->setSubject( $config[ 'title' ] )
// ->setTo( $config[ 'owner' ]->getEmail() )
// ->setBody("ble blah bleuh <strong> strong text </strong> swift mailer","text/html");
// $email = (new TemplatedEmail())
// ->from('fabien@example.com')
// ->to(new Address('ryan@example.com'))
// ->subject('Thanks for signing up!')
//
// // path of the Twig template to render
// ->htmlTemplate('emails/footer.html.twig')
//
// // pass variables (name => value) to the template
// ->context([
// 'expiration_date' => new \DateTime('+7 days'),
// 'username' => 'foo',
// ])
// ;
// send email
return $this->
mailer->send( $email );
}
}