Les composants Mailer & Mime de Symfony vous donne un puissant système pour la création et l’envoi d’e-mails – avec la prise en charge des messages en plusieurs parties, l’intégration Twig, l’insertion CSS, les pièces jointes et bien plus encore.
Commençons l’installation avec cette commande :
composer require symfony/mailer
Ajoutons ou modifions dans notre fichier .env
###> symfony/mailer ### MAILER_DSN=smtp://YOUR@MAİL.com:PASSWORD@smtp.votreserveur.com:465?encryption=ssl&auth_mode=login ###< symfony/mailer ###
services.yaml
# This file is the entry point to configure your own services. # Files in the packages/ subdirectory configure your dependencies. # Put parameters here that don't need to change on each machine where the app is deployed # https://symfony.com/doc/current/best_practices/configuration.html#application-related-configuration parameters: locale: 'en' services: # default configuration for services in *this* file _defaults: autowire: true # Automatically injects dependencies in your services. autoconfigure: true # Automatically registers your services as commands, event subscribers, etc. # makes classes in src/ available to be used as services # this creates a service per class whose id is the fully-qualified class name App\: resource: '../src/*' exclude: '../src/{DependencyInjection,Entity,Migrations,Tests,Kernel.php}' # controllers are imported separately to make sure services can be injected # as action arguments even if you don't extend any base controller class App\Controller\: resource: '../src/Controller' tags: ['controller.service_arguments'] # add more service definitions when explicit configuration is needed # please note that last definitions always *replace* previous ones
Créons notre Controlleur avec cette commande :
php bin/console make:controller ContactController
Créer 3 champs : nom, email, et message
src/Controller/ContactController.php
<?php namespace App\Controller; use App\Form\ContactType; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\Mime\Email; use Symfony\Component\Routing\Annotation\Route; use Symfony\Component\Mailer\MailerInterface; class ContactController extends AbstractController { /** * @Route("/contact", name="contact") */ public function index(Request $request, MailerInterface $mailer) { $form = $this->createForm(ContactType::class); $form->handleRequest($request); if($form->isSubmitted() && $form->isValid()) { $contactFormData = $form->getData(); $message = (new Email()) ->from($contactFormData['email']) ->to('ton@gmail.com') ->subject('vous avez reçu unn email') ->text('Sender : '.$contactFormData['email'].\PHP_EOL. $contactFormData['Message'], 'text/plain'); $mailer->send($message); $this->addFlash('success', 'Vore message a été envoyé'); return $this->redirectToRoute('contact'); } return $this->render('contact/index.html.twig', [ 'form' => $form->createView() ]); } }
contact/index.html.twig;
{% extends 'base.html.twig' %} {% block body %} <div class="bg-white p-5 contact-form"> <div class="form-group"> {{ form_start(our_form) }} {{ form_row(our_form.fullName, {'attr': {'class': 'form-control'}}) }} </div> <div class="form-group"> {{ form_row(our_form.email, {'attr': {'class': 'form-control'}}) }} </div> <div class="form-group"> {{ form_row(our_form.message, {'attr': {'class': 'form-control'}}) }} </div> <div class="form-group"> <input type="submit" value="Send" class="btn btn-primary py-3 px-5"> </div> {{ form_end(our_form) }} </div> </div> {% endblock %}
ContactType;
<?php namespace App\Form; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\Extension\Core\Type\EmailType; use Symfony\Component\Form\Extension\Core\Type\TextareaType; use Symfony\Component\Form\Extension\Core\Type\TextType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\OptionsResolver\OptionsResolver; class ContactType extends AbstractType { public function buildForm(FormBuilderInterface $builder, array $options) { $builder ->add('nom',TextType::class, [ ]) ->add('email',EmailType::class, [ ]) ->add('message', TextareaType::class, [ 'attr' => ['rows' => 6], ]) ; } public function configureOptions(OptionsResolver $resolver) { $resolver->setDefaults([ ]); } }
contact/index.html.twig;
{% block body %} <div class="col-sm-12"> <div class="form-group"> {{ form_start(our_form) }} {{ form_row(our_form.fullName, {'attr': {'class': 'form-control'}}) }} </div> <div class="form-group"> {{ form_row(our_form.email, {'attr': {'class': 'form-control'}}) }} </div> <div class="form-group"> {{ form_row(our_form.message, {'attr': {'class': 'form-control'}}) }} </div> <div class="form-group"> <input type="submit" value="Send" class="btn btn-primary py-3 px-5"> </div> {{ form_end(our_form) }} </div> </div> {% endblock %}