Bonjour,

Voila je rencontre un petit problème avec mon code.

Ce que je veux

Description

Simulation de biens immobiliers et j'incorpore un formulaire de contact à chacun des biens.
Donc si je reçois un mail, je connais le nom du bien sollicité ainsi que les informations du potentiel acquéreur.
Je refait le tuto : Symfony 4 par l'exemple (11/16) : Formulaire de contact, mais avec Mailer et pas SwiftMailer

Ce que j'obtiens

Lors de l'envoi, le redirectToRoute() fonctionne mais pas de addFlash() pourtant incorporer et pas d'email reçus. Donc le traitement du formulaire se fait mais pas de feedback(e-mail).
Pas d'erreur affichée, seulement un non-fonctionnement

Ce que je fais

Mon Entity

<?php

namespace App\Entity;
use Symfony\Component\Validator\Constraints as Assert;

class Contact{

    /**
     * @var string|null
     * @Assert\NotBlank()
     * @Assert\Length(
     * min=2,
     * max=75,
     * minMessage="Le nombre minimum de caractères est de de {{ limit }}",
     * maxMessage="Le nombre maximum de caractères est de de {{ limit }}"
     * )
     */
    private $name;

    /**
     * @var string|null
     * @Assert\NotBlank()
     * @Assert\Length(
     * min=2,
     * max=75,
     * minMessage="Le nombre minimum de caractères est de de {{ limit }}",
     * maxMessage="Le nombre maximum de caractères est de de {{ limit }}"
     * )
     */
    private $lastname;

    /**
     * @var string|null
     * @Assert\NotBlank()
     * @Assert\Regex(
     * pattern="/[0-9]{10}/",
     * message=" {{ value }} est incorrect"
     * )
     */
    private $phone;

    /**
     * @var string|null
     * @Assert\Email()
     */
    private $email;

    /**
     * @var string|null
     * @Assert\NotBlank()
     * @Assert\Length(
     * min=10,
     * max=100,
     * minMessage="Le nombre minimum de caractères est de de {{ limit }}",
     * maxMessage="Le nombre maximum de caractères est de de {{ limit }}"
     * )
     */
    private $message;

    /**
     * @var Ad|null
     */
    private $ad;

    /**
     *
     * @return string|null
     */
    public function getName(): ?string
    {
        return $this->name;
    }

    /**
     *
     * @param string|null $name
     * @return Contact
     */
    public function setName(?string $name): Contact
    {
        $this->name = $name;
        return $this;
    }

    /**
     *
     * @return string|null
     */
    public function getLastName(): ?string
    {
        return $this->lastname;
    }

    /**
     * Undocumented function
     *
     * @param string|null $lastName
     * @return Contact
     */
    public function setLastName(?string $lastName): Contact
    {
        $this->lastName = $lastName;
        return $this;
    }

    /**
     *
     * @return string|null
     */
    public function getPhone(): ?string
    {
       return $this->phone;
   }

   /**
    * Undocumented function
    *
    * @param string|null $phone
    * @return Contact
    */
    public function setPhone(?string $phone): Contact
    {
       $this->phone = $phone;
       return $this;
    }

    /**
     *
     * @return string|null
     */
    public function getEmail(): ?string
    {
        return $this->email;
    }

    /**
     * Undocumented function
     *
     * @param string|null $email
     * @return Contact
     */
    public function setEmail(?string $email): Contact
    {
        $this->email = $email;
        return $this;
    }

     /**
     *
     * @return string|null
     */
    public function getMessage(): ?string
    {
        return $this->message;
    }

    /**
     * Undocumented function
     *
     * @param string|null $message
     * @return Contact
     */
    public function setMessage(?string $message): Contact
    {
        $this->message = $message;
        return $this;
    }

    /**
    * Undocumented function
    *
    * @return Ad|null
    */
    public function getAd(): ?Ad
    {
        return $this->ad;
    }

    /**
     * Undocumented function
     *
     * @param Ad|null $ad
     * @return Contact
     */
    public function setAd(Ad $ad): Contact
    {
        $this->ad = $ad;
        return $this;
    }

}

Controller
Je n'ai pas tout mis, seulement la méthode concernée

<?php

namespace App\Controller;

use App\Entity\Ad;
use App\Form\AdType;
use App\Entity\Contact;
use App\Entity\AdSearch;
use App\Form\ContactType;
use App\Form\AdSearchType;
use App\Notification\AdsContact;
use App\Repository\AdRepository;
use Knp\Component\Pager\PaginatorInterface;
use Symfony\Component\HttpFoundation\Request;
use Doctrine\Common\Persistence\ObjectManager;
use Symfony\Component\Routing\Annotation\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;

class AdController extends AbstractController
{

    /**
    *
    * @Route("/blog/{id}", name="show_ad")
    */
    public function show(Ad $article, Request $request,AdsContact $notification){

        $contact= new Contact;
        $contact->setAd($article);
        $form=$this->createForm(ContactType::class,$contact);
        $form->handleRequest($request);

        if($form->isSubmitted() && $form->isValid()){
            $notification->sendEmail($contact);

            $this->addflash(
                "success",
                "Votre e-mail à été envoyé"
            );

            return $this->redirectToRoute("show_ad",[
                'id'=>$article->getId()
                ]);
        }

        return $this->render('ad/show.html.twig', [
            'article'=>$article,
            'form'=>$form->createView()
            ]);
    } 
}

Mon .env

GMAIL_USERNAME=MonAdresseEmailPersonnel
GMAIL_PASSWORD=MotDePasseApplication
MAILER_DSN=smtp://$GMAIL_USERNAME:$GMAIL_PASSWORD@gmail

Le mot de passe est un mot de passe d'application en effectuant cette manipulation
https://support.google.com/mail/answer/185833?hl=fr

et aussi désactiver l'accès moins sécurisé des application

Mon AdsContact $notification

<?php

namespace App\Notification;

use App\Entity\Contact;

use Symfony\Bridge\Twig\Mime\TemplatedEmail;
use Symfony\Component\Mailer\MailerInterface;

class AdsContact{

    /**
     * @var MailerInterface
     */
    private $mail;

    public function __construct(MailerInterface $mail){
        $this->mail=$mail;
    }
    public function sendEmail(Contact $contact){
        $email = (new TemplatedEmail())
            ->from($contact->getEmail())
            ->to('monAdresse@gmail.com')
            ->subject('Contact '.$contact->getAd()->getTitle())

            // path of the Twig template to render
            ->htmlTemplate('emails/ad_contact.html.twig')

            // pass variables (name => value) to the template
            ->context([
                'contact' => $contact
            ]);

        $this->mail->send($email);

    }
}

Le emails/ad_contact.html.twig

<h2>Mail concernant le {{contact.ad.title}}</h2>

<p>{{contact.message}}</p>

Est-ce un problème de version de symfony? En SF4.3 rester sur SwiftMailer pour plus de stabilité?
.env mal configuré?

Merci

Aucune réponse