Bonjour,

Voila je rencontre un petit problème avec mon code.

Je cherche a régler ma configuration mail pour un envoi. Le site est hébergé chez 1&1

Décrivez ici votre code ou ce que vous cherchez à faire

'EmailTransport' => [
        'default' => [
            'className' => 'Mail',
            // The following keys are used in SMTP transports
            'host' => 'localhost',
            'port' => 25,
            'timeout' => 30,
            'username' => '',
            'password' => '',
            'client' => null,
            'tls' => null,
        ],
        'dev' => [
            'className' => 'Smtp',
            // The following keys are used in SMTP transports
            'host' => 'ssl://smtp.gmail.com',
            'port' => 465,
            'timeout' => 10,
            'username' => 'monmail@gmail.com',
            'password' => 'monmdp',
        ],
    ],
'Email' => [
        'default' => [
            'transport' => 'dev',
            'from' => 'no-reply@gmail.com',
          //  'charset' => 'utf-8',
            // 'headerCharset' => 'utf-8',
        ],
    ],

Ce que je veux

J'aimerai configurer pour faire partir le mail.

Ce que j'obtiens

Connection refused ! Voicla ce que j'obtiens.
Comme vous pouvez le remarquer j'ai lu un précédent post, mais je n'y parviens pas.

Voici ma fonction execute pour test

 protected function _execute(array $data)
    {
       // Envoie un email.
    $email = new Email('default');
    $email->from(['me@example.com' => 'My Site'])
    ->to('monmail@gmail.com')
    ->subject('About')
    ->send('My message');
        return true;
    }

12 réponses


Bonjour.

Comme vous pouvez le remarquer j'ai lu un précédent post, mais je n'y parviens pas.

Il ne suffit pas de copier bètement ce que tu as pu voir, si tu veux utiliser la configuration dev, il ne te faut pas définir la configuration default à l'initiation de la classe Email.
Donc, si tu veux utiliser la configuration dev il te faut remplacer :

 $email = new Email('default');

Par :

  $email = new Email('dev');

Merci de ta réponse, j'ai donc apporté les modifs suivante

protected function _execute(array $data)
    {
       // Envoie un email.

        $email = new Email('gmail');
        $email->from(['me@example.com' => 'My Site'])
        ->to('monmail@gmail.com')
        ->subject('About')
        ->send('My message');

        return true;
    }

Mon Emailtransport

'EmailTransport' => [
        'default' => [
            'className' => 'Mail',
            // The following keys are used in SMTP transports
            'host' => 'localhost',
            'port' => 25,
            'timeout' => 30,
            'username' => '',
            'password' => '',
            'client' => null,
            'tls' => null,
        ],
        'gmail' => [
            'className' => 'Smtp',
            // The following keys are used in SMTP transports
            'host' => 'ssl://smtp.gmail.com',
            'port' => 465,
            'timeout' => 10,
            'username' => 'monmail@gmail.com',
            'password' => 'xxxxxxx',
            'client' => null,
            'tls' => null,
        ],
    ],

Et l'email

'Email' => [
        'default' => [
            'transport' => 'gmail',
            'from' => 'no-reply@gmail.com',
            'charset' => 'utf-8',
            'headerCharset' => 'utf-8',
        ],
         'gmail' => [
            'transport' => 'gmail',
            'from' => 'no-reply@gmail.com',
            'charset' => 'utf-8',
            'headerCharset' => 'utf-8',
        ],
    ],

Et la j'ai un timeout connexion, donc le mail ne part pas.
Merci de votre aide

Et la j'ai un timeout connexion, donc le mail ne part pas.

Ce n'est pas étonnant, tu as mis un timeout de 10 à ta configuration gmail.

Pour moi le timeout, c'était pour envoyer un message d'erreur si le mail ne passe pas ou bout de 10 seconde. Bref, j'ai supprimer la ligne, mais c'est toujoursn la même histoire.
Du coup je sèche
Merci encore

mais c'est toujoursn la même histoire.

Pourrais-tu être plus précis ?
Est-ce que tu as toujours l'erreur concernant le timeout ou est-ce que c'est un autre message d'erreur et lequel ?
Que se passe t'il exactement ?

Le message exact est :
"Connection timed out
Cake\Network\Exception\SocketException"

Et du coup il ne se passe rien pas d'email qui parte.
Pour infos supplémentaire j'ai suivi la doc pour la création de formulaire sans model.

Tu devrais vérifier si dans ta configuration de Gmail, si tu n'as pas activé le TLS, si tu l'as activé, il te faut modifier la configuration sur CakePHP.

Le site est hénergé chez 1 and1, est ce que le problème pourrait venir de là ?
Bon là je vais me reposer les yeux un peu, et reviendrai les idées claires (du moins je l'espère)

J' active ou dessactivce le TLS mais je sais pas trop ce qu il fait que je modifie par la suite.

En tout les cas merci à toi.

J'espère trouver la solution, c'est vraiment galère de bloquer sur un truc comme ca. Je suis ouvert à toutes nouvelles propositions

Merci et a ++

J' active ou dessactivce le TLS mais je sais pas trop ce qu il fait que je modifie par la suite.

Si tu veux utiliser le TLS pour l'envoie d'email, ils te donnent justement deux exmples de configuration justement pour GMAIL (ici), dont l'un avec le TLS et l'autre sans, de plus qu'ils indiquent un lien sur la document de Google concernant la sécurité, dans laquelle ils précisent :

Google peut bloquer les tentatives de connexion de certaines applications ou de certains appareils qui n'utilisent pas les normes de sécurité les plus récentes. Étant donné que ces applications et ces appareils sont plus vulnérables, nous les bloquons pour assurer la sécurité de votre compte.

Dans la documentation de CakePHP, ils précisent ceci aussi :

Pour utiliser SSL + SMTP, vous devrez avoir SSL configuré dans votre installation PHP.

Il te faut donc vérifier auprès de ton hébergeur, si dans la configuration de PHP, selon ton offre, si le SSL est activé ou non et dans la cas contraire si tu peux y apporter la modification.

Salut,
Bonne nouvelle en ce dimanche matin :/ , effectivement dans mon offre, SSL n'est pas activé. Le problème semble venir de là. La question maintenant est de savoir si il est judicieux pour moi d'activer cette offre ? Ou y a t il une autre solution ?
Merci

$to = "monadresse@gmail.com";
        $subject = "Contact - Gîte Saint Morillon";

        $name = $data['name'];
        $email = $data['email'];
        $phone = $data['phone'];
        $msg = $data['body'];

        $message = "
        <html>
            <head>
                <title>Contact - Gîte Saint Morillon</title>
            </head>
            <body>
                <p>Informations contact</p>
                <p>Nom contact : ".$name."</p>
                <p>Email contact : ".$email."</p>
                <p>Téléphone contact : ".$phone."</p>
                <p>Message</p>
                <p>".$msg = wordwrap($msg,70)."</p>
            </body>
        </html>
        ";

        $headers = "MIME-Version: 1.0" . "\r\n";
        $headers .= "Content-type:text/html;charset=UTF-8" . "\r\n";
        $headers .= 'From: <contact@gite-saint-morillon.fr>' . "\r\n";

        mail($to,$subject,$message,$headers);

        return true;

Du coup j'ai utilisé la focntion mail (). A priori ça fonctionne.
Au niveau sécurité, dois-je faire des choses particulière - puis-je laisser mon adresse mail écrit en dur à cet endroit ?

Même si ce n'est pas totalement clos, merci, et à Lartak (:o)

Du coup j'ai utilisé la focntion mail (). A priori ça fonctionne.

Tu n'es pas obligé d'utilisé le SMTP avec le composant Email de CakePHP, si tu veux utiliser le transport Mail standard, il te suffit de mettre dans la configuration que tu veux utiliser le transport Mail et non le transport Smtp.