Emilie Tossan
Emilie Tossan

Reputation: 97

How to send e-mails using a contact form on Symfony?

I created my website with Symfony and I am deploying it now. I used my contact form. When I use it I am supposed to receive messages to my email address. But currently, I didn't receive any message.

Here is my code.

I am using this line in my .env file : MAILER_DSN=smtp://[email protected]:[email protected]:465?encryption=ssl&auth_mode=login

ContactController.php

<?php

namespace App\Controller\Front;

use App\Form\Front\ContactType;
use Symfony\Component\Mime\Email;
use App\Repository\UserRepository;
use App\Form\Front\ContactFromUserType;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Mailer\Exception\TransportExceptionInterface;

class ContactController extends AbstractController
{
    #[Route('/contact', name: 'contact')]
    public function index(
        Request $request, 
        UserRepository $userRepository,
        MailerInterface $mailer): Response
    {
        if ($this->getUser()) {
            $connected = $this->getUser();
            $useremail = $connected->getUserIdentifier();
            $user = $userRepository->findOneBy(['email' => $useremail]);

            $form = $this->createForm(ContactFromUserType::class);
            $form->handleRequest($request);

            if ($form->isSubmitted() && $form->isValid()) {
                $contactFormData = $form->getData();
                $message = (new Email())
                    ->from($user->getEmail())
                    ->to('[email protected]')
                    ->subject('Vous avez reçu un email d\'un utilisateur de Go Zpeak : ' . $user->getFirstname() . ' ' . $user->getLastname())
                    ->text(
                        $contactFormData['message'],
                        'text/plain'
                    );
                $mailer->send($message);

                $this->addFlash('success', 'Merci. Ton message a bien été envoyé !');

                return $this->redirectToRoute('contact');
            }

            return $this->render('front/home/contact.html.twig', [
                'form' => $form->createView()
            ]);

        } else {

            $form = $this->createForm(ContactType::class);
            $form->handleRequest($request);

            if ($form->isSubmitted() && $form->isValid()) {
                $contactFormData = $form->getData();

                $message = (new Email())
                    ->from($contactFormData['email'])
                    ->to('[email protected]')
                    ->subject('Vous avez reçu un email d\'un visiteur de Go Zpeak !')
                    ->text(
                        'Nom du visiteur : '.$contactFormData['name'].\PHP_EOL.
                        $contactFormData['message'],
                        'text/plain'
                    );
                try {
                    $mailer->send($message);
                } catch (TransportExceptionInterface $e) {
                    $this->addFlash('error', $e);
                    return $this->redirectToRoute('contact');
                }

                $this->addFlash('success', 'Merci. Ton message a bien été envoyé !');

            }

            return $this->render('front/home/contact.html.twig', [
                'form' => $form->createView()
            ]);
        }
    }
}

Where might be the problem ?

Upvotes: -1

Views: 451

Answers (1)

Mick3DIY
Mick3DIY

Reputation: 61

Which Symfony and Mailer versions are you using ? Your controller and form seems to be correct, have you check the log files of the app if any error messages from the mailer ?

To check the MAILER_DSN config, you can create a tiny Php project with only the Mailer if SMTP or SMTPS, login/password, catch Mailer events...

Upvotes: 0

Related Questions