Création d'un service pour l'envoi d'email via le smtp de Gmail
29 11 2016
Pour gérer l'envoi d'email avec Symfony2, plusieurs solutions sont possibles:
- utiliser la fonction mail de son hébergeur
- utiliser le smtp de sa boîte de messagerie
Gmail
Pourquoi utiliser Gmail plutôt qu'une autre boîte de messagerie comme Yahoo? Il est prouvé que Gmail ne classe pas les emails venant d'un serveur en spam. Au contraire Yahoo classe certains emails aléatoirement dans le dossier spam.
Nous allons ici décrire le fonctionnement de l'envoi d'email avec le smtp de Gmail sous Symfony. Nous allons mettre à jour le fichier Config.yml comme ceci:
transport: smtp
encryption: ssl
auth_mode: login
host: smtp.gmail.com
user: monemail@gmail.com
password: monmdp
spool: { type: memory }
Ensuite nous allons appeler un service dans le contrôleur:
$this->container->get('EmailMerci')->emailMerci($commande);
Et nous allons déclarer le service dans le fichier Services.yml:
EmailMerci:
class: Ecommerce\EcommerceBundle\Services\
EmailMerci
arguments : [@service_container]
Et nous allons créer le service EmailMerci en passant des paramètres à la vue:
class EmailMerci {
public function __construct(ContainerInterface $container) {
$this->container = $container;
}
public function emailMerci($commande) {
$message = \Swift_Message::newInstance()
->setSubject('Validation de votre commande')
->setFrom(array('service@web-city.fr' => "Web-City.fr"))
->setTo($commande->getUtilisateur()->getEmailCanonical()) ->setCharset('utf-8')
->setContentType('text/html')
->setBody($this->container->get('templating')
->render('EcommerceBundle:SwiftLayout:
validationCommande.html.twig',
array('utilisateur' => $commande->getUtilisateur())));
$this->container->get('mailer')->send($message);
} }
catégorie: Symfony