Bonjour, tout est dans le titre
je précise que le serveur web est sur un vps OVH donc pas restriction de port les mail fonctionne quand j'utilise la console donc la configue SMTP est bonne.
Et tout les mail de FOSUSERBUNDLE fonctionne
Code de mon controller:

$message = (new \Swift_Message())
    ->setSubject('Objet de l\'email')
    ->setFrom('contact@mondomaine.com')
    ->setReplyTo('contact@mondomaine.com')
    ->setTo('******@hotmail.fr')
    ->setContentType('text/html')
    ->setBody('Contenu du mail');

if (!$this->get('mailer')->send($message)) {
    // Il y a eu un problème donc on traite l'erreur
    throw new Exception('Le mail n\'a pas pu être envoyé');
}

Merci par avance :)

9 réponses


SimonAndGarfunkel
Réponse acceptée

Ok, c'est normal que ton email ne soit pas envoyé. Comme évoqué dans mon 1er message, l'email n'est véritablement envoyé qu'après la reponse HTTP et juste avant l'événement kernel.terminate. En mettant un exit() dans ton controller, tu stoppes toute la suite du workflow.

Pour tester, fait ça dans ton controller :

public function submitmailconfirmepayementAction($ref, $type){

        $em = $this->getDoctrine()->getManager();

        if ($type == "servers") {
            $commande = $em->getRepository("DinastyservSiteBundle:Commandes")->findOneBy(["ref" => $ref]);
            $view = "DinastyservSiteBundle:email:comfirmpayementcommande.html.twig";

        }elseif($type == "coins"){
            $commande = $em->getRepository("DinastyservPayementsBundle:buy_coins")->findOneBy(["iden" => $ref]);
            $view = "DinastyservSiteBundle:email:comfirmpayementcoins.html.twig";
        }

         $message = \Swift_Message::newInstance()
                ->setFrom(["contact@dinasty-serv.com" => "Dinasty-Serv"])
                ->setTo($commande->getUser()->getEmail())
                ->setSubject("Confirmation de paiement")
                ->setContentType("text/html")
                ->setBody($this->render($view,["commande" => $commande]));

      $this->get('mailer')->send($message);

      return new \Symfony\Component\HttpFoundation\Response('Mail sended');

      // Tu peux aussi faire une redirection vers la page de ton choix
      // return $this->redirectToRoute('app_home');
    }

Personne ? j'ai chercher un peut partout sans réussir a trouver :/

Bonjour Theskinline01,

Dans ton config.yml, regarde la valeur du paramètre spool qui est peut-être en memory (documentation).

Si c'est ton cas, lorsque tu vérifies if (!$this->get('mailer')->send($message)), l'action d'envoyer l'email n'est pas réellement executée. Le mail est stocké puis envoyé "après" la réponse HTTP (juste avant l'événement kernel.terminate).

Salut,
D'accord en effect le spool est sur memory mais comment expliquer que les email de FOS sont bien envoyé ?

Salut,

As-tu essayé de faire simplement $this->get('mailer')->send($message) dans ton controller ? Histoire de voir si le mail est bien envoyé ?
Et bien sur, ton controlleur doit retourner un ObjectResponse quoi qu'il arrive !

ben si je fait :

$response = $this->get('mailer')->send($message);

il me retourne : 1 et aucun mail dans ma boite de réception...
mon parameters.yml

    mailer_transport: smtp
    mailer_host: smtp.domaine.com
    mailer_port: 587
    mailer_user: contact@domaine.com
    mailer_password: ********

Je peux voir la méthode de ton controller en entier ?

Oui,

public function submitmailconfirmepayementAction($ref, $type){

        $em = $this->getDoctrine()->getManager();

        if ($type == "servers") {
            $commande = $em->getRepository("DinastyservSiteBundle:Commandes")->findOneBy(["ref" => $ref]);
            $view = "DinastyservSiteBundle:email:comfirmpayementcommande.html.twig";

        }elseif($type == "coins"){
            $commande = $em->getRepository("DinastyservPayementsBundle:buy_coins")->findOneBy(["iden" => $ref]);
            $view = "DinastyservSiteBundle:email:comfirmpayementcoins.html.twig";
        }

         $message = \Swift_Message::newInstance()
                ->setFrom(["contact@dinasty-serv.com" => "Dinasty-Serv"])
                ->setTo($commande->getUser()->getEmail())
                ->setSubject("Confirmation de paiement")
                ->setContentType("text/html")
                ->setBody($this->render($view,["commande" => $commande]));

      $response = $this->get('mailer')->send($message);
       dump($response);
        exit();

    }

et quand j'essais d'envoyer un mail avec la commande : php app/console swiftmailer:email:send
ça fonctionne

Dac Dac, c'est parfait merci beaucoup l'amis !, et je comprend mieux pourquoi je découvre symfony donc je ne connais pas encore toutes les petite subtilité :D
En tout cas merci pour ton aide et à bientôt sur un prochain poste !