Envoie d'un mail

Par Rzj Kevin, il y a 8 ans


Bonjour,

Voila j'aimerai envoyer par mail les données d'un formulaire de contact sur Symfony.

Ce que je fais

Voici la configuration de mon parameters.yml

parameters database_host localhost database_port: database_name: symfony database_user: root database_password: root mailer_transport: mail mailer_host: smtp.gmail.com mailer_port: 465 mailer_encryption: ssl mailer_user: test@gmail.com mailer_password: '**********

Voici la configuration de mon config.yml au niveau du swift mailer

swiftmailer: transport: '%mailer_transport%' host: '%mailer_host%' port: %mailer_port% encryption: %mailer_encryption% username: '%mailer_user%' password: '%mailer_password%' spool: { type: memory }

Et enfin mon code au niveau du controller

if(isset($_POST['reinitialiser'])){ $message = \Swift_Message::newInstance() ->setSubject('Réinitialisation de votre mot de passe') ->setFrom('rzj.kevin@gmail.com') ->setTo('shirukevin@gmail.com') ->setBody( $this->renderView( 'ADVGeneralBundle:Mail:mail.html.twig',array('cp'=> $_POST['cp']) ), 'text/html' ); $this->get('mailer')->send($message);

Ce que je veux

J'aimerai recevoir le mail dans boite mail .

Ce que j'obtiens

Il n'y a pas d'erreur quand j'éxécute le code au niveau de symfony sauf que je recois pas de mail
Pourriez vous m'aider s'il vous plaît
Merci d'avance

20 réponses

G1.3, il y a 8 ans

Salut

Il semblerait que tu puisse définir gmail comme mailer_transport.

Regarde ici: https://symfony.com/doc/current/email/gmail.html

De plus, étonnant que tu utilises des POST dans ce qui semble être un controller Sf. Regarde le composant request (Symfony\Component\HttpFoundation\Request) ;)

betaWeb, il y a 8 ans

Salut,

Si tu es en dev, je ne peux que te conseiller d'utiliser maildev pour tester les envois de mail ;)

Rzj Kevin, il y a 8 ans

Oui même avec gmail comme mailer_transport, ça ne marche pas

Oui j'ai déjà utiliser le composant request en fesant if ($request->isMethod('POST') ).

G1.3, il y a 8 ans

Tu peux regarder dans le profiler voir si tu as bien un email qui part. Tu peux aussi sûrement retirer le spool le temps de tester.

Mehdikacim, il y a 8 ans

Pour mon exam de BTS j'avais une mission avec un envoie de mail
Voici ma config.

parameters.yml

# This file is auto-generated during the composer install parameters: database_host: localhost database_port: null database_name: formarmor database_user: root database_password: null mailer_transport: smtp mailer_host: 127.0.0.1 mailer_user: formarmorbts@gmail.com mailer_password:****** secret: secret nb_par_page: 5

Controller

public function mailValidation($Client,$session_formation,$date){ $mail = $this->container->getParameter('mailer_user'); $smtp = $this->container->getParameter('mail_smtp'); $mdp = $this->container->getParameter('mailer_password'); //Construction du mail $texte = "<h3>Bonjour, " . $Client->getNom() . " " . $Client->getPrenom() . "</h3><br>"; $texte .= "<p>Nous avons le plaisir de vous annoncer que la session du <b>". $date ."</b> est bien confirmée.</p>"; $texte .= "<h2>Détails de la session:</h2>"; $texte .= "<p>". $session_formation->getFormation()->getLibelle() ."(" . $session_formation->getFormation()->getNiveau() .")</p>"; $texte .= "<p>Au cours de cette session de <b>". $session_formation->getFormation()->getDuree() ." heures</b>, vous allez effetuer : <b>". $session_formation->getFormation()->getDescription() ."</b></p>"; $texte .= "<br> Cordialement,<br>L'administration de formarmor."; $transport = \Swift_SmtpTransport::newInstance($smtp, 465,'ssl')->setUsername($mail)->setPassword($mdp); $mailer = \Swift_Mailer::newInstance($transport); $message = \Swift_Message::newInstance() ->setSubject("FormArmor - Confirmation d'inscription") ->setFrom(array('formarmorbts@gmail.com' => 'formarmorbts@gmail.com')) ->setTo(array(''.$Client->getEmail().'' => ''.$Client->getEmail().''))// email du client pour teste replacer par son @ ->addPart($texte,'text/html'); $result = $mailer->send($message); return $result; }
Mehdikacim, il y a 8 ans

Après, là, mon code n'est pas propre car ce n'est pas la version finale.
La fonction mail de validation permettait juste de ne pas répéter ce code 2 fois, car je pouvais l'utiliser dans deux contextes.

Rzj Kevin, il y a 8 ans

@Mehdikacim : j'ai tester ton code mais le

$smtp = $this->container->getParameter('mail_smtp');

M'affiche :
The parameter "mailer_smtp" must be defined.
comme erreur

Mehdikacim, il y a 8 ans

Oui, tu dois le définir dans PARAMETERS.YML
Je m'excuse car aux modifs de l'exam je devais importer un bundle et ça remet à jour parameters.yml, or, j'avais bloqué l'appel de cette fonction pour l'exam car le réseau du bahut bloque l'envoie de mail hahaha
Rajoute : mail_smtp: smtp.gmail.com dans parameters
Car dans mon code j'appel pas mailer mais mail_smtp

Rzj Kevin, il y a 8 ans

Cela m'affiche l'erreur suivant :
Connection could not be established with host smtp.gmail.com [Network is unreachable #101]

Mehdikacim, il y a 8 ans

As-tu teamviewer ? Je peux essayer de voir ça maintenant si tu veux

Rzj Kevin, il y a 8 ans

Non je n'ai pas teamviewer

Mehdikacim, il y a 8 ans

Envoie moi ton parameter et ta nouvelle fonction modifiée au niveau de ton controller

Rzj Kevin, il y a 8 ans

Mon parameter

parameters: database_host: localhost database_port: database_name: symfony database_user: root database_password: root mailer_transport: smtp mailer_host: 127.0.0.1 mail_smtp: smtp.gmail.com mailer_user: test@gmail.com mailer_password: **** secret: 8b3fdfaddad056c4ca759ffe81156eafb10f30fc

Mon controller

public function loginAction(Request $request) { if($request->isMethod('POST'){ $texte = "<h3>Bonjour, </h3><br>"; $texte .= "<p>Votre demande a été bien enregisté.</p>"; $transport = \Swift_SmtpTransport::newInstance($smtp, 465,'ssl')->setUsername($mail)->setPassword($mdp); $mailer = \Swift_Mailer::newInstance($transport); $message = \Swift_Message::newInstance() ->setSubject("FormArmor - Confirmation d'inscription") ->setFrom(array('test@gmail.com' => 'test@gmail.com')) ->setTo(array('A.roll@gmail.com' => 'A.roll@gmail.com'))// email du client pour teste replacer par son @ ->addPart($texte,'text/html'); $result = $mailer->send($message);
Mehdikacim, il y a 8 ans

smtp,mail et mdp sont bien récupéré grace à ceci ?

$this->container->getParameter('...');

As-tu testé tes identifiants que tu as mis dans ton parameters ?
A.roll@gmail.com est un mail qui existe ?

Mehdikacim, il y a 8 ans

Si tout correspond, je te propose d'installer TEAMVIEWER et d'envoyer tes id (de teamviewer haha) à Mehdikacim@hotmail.fr, mon adresse mail pour que je suis controler ton PC (non rien de méchant haha) poru que je puisse voir, et manipuler ton code.
Les identifiants sont éphémères donc, aps de soucis demain je pourrais pas le controler :)

Lartak, il y a 8 ans

Bonjour.
@Mehdikacim: Je te le dis pour la dernière fois, arrêtes avec TeamViewer, si tu veux l'aider c'est sur le forum et non en prenant le contrôle de son PC.

Mehdikacim, il y a 8 ans

En vue de son code, je comprend pas le pourquoi ça ne fonctionne pas. Etant plus à l'aise ave symfony que lui je suppose, je lui propose de résoudre son problème.
Trouve le problème MONSIEUR alors.
Bye.

Lartak, il y a 8 ans

Le but du forum, n'est pas de résoudre le problème à la place de la personne, mais de l'aider à le résoudre, car si tu résouds toi même son problème de la manière que tu proposes, il ne comprendra jamais où il a pu faire une erreur et par conséquent, il ne sera pas capable par la suite de pouvoir résoudre son problème quand il se représentera.

Mehdikacim, il y a 8 ans

D'où le principe de trouver l'erreur avec de lui expliquer le pourquoi il ne fonctionne pas.

Rzj Kevin, il y a 8 ans

J'ai regardé un peu sur google et j'aimerai savoir s'il faut modifier/Configurer le php.ini pour l'envoie des mail sous symfony comme en php pure (quand en utilise l'outil sendmail) ? Peut-être est-ce là le problème ?