Je suis débutant CakePHP et donc pour me former je suis la formation de Grafikart. Je suis rendu au TP2 : Gestion des utilisateurs. Mais je suis bloquer lorsqu'il s'agit d’envoyer un email. J'ai passé plusieurs heures planté devant mon code mais la je ne trouve rien. Si quelqu'un aurait une idée ou un piste, ou la solution tout simplement je suis preneur. Merci d'avance.

mon erreur :
Could not send email.

Error: An Internal Error Has Occurred.
Stack Trace

CORE\Cake\Network\Email\MailTransport.php line 51 ? MailTransport->_mail(string, string, string, string, null)
CORE\Cake\Network\Email\CakeEmail.php line 1122 ? MailTransport->send(CakeEmail)
APP\Controller\ContentsController.php line 34 ? CakeEmail->send()
[internal function] ? ContentsController->contact()
CORE\Cake\Controller\Controller.php line 490 ? ReflectionMethod->invokeArgs(ContentsController, array)
CORE\Cake\Routing\Dispatcher.php line 185 ? Controller->invokeAction(CakeRequest)
CORE\Cake\Routing\Dispatcher.php line 160 ? Dispatcher->_invoke(ContentsController, CakeRequest, CakeResponse)
APP\webroot\index.php line 108 ? Dispatcher->dispatch(CakeRequest, CakeResponse)

ma config email :

public $default = array(
        'transport' => 'Mail',
        'from' => 'you@localhost.fr',
        'charset' => 'utf-8',
        'headerCharset' => 'utf-8',
    );
public $smtp = array(
        'transport' => 'Smtp',
        'from' => array('site@localhost' => 'My Site'),
        'host' => 'localhost',
        'port' => 25,
        'timeout' => 30,
        'username' => 'user',
        'password' => 'secret',
        'client' => null,
        'log' => false,
        //'charset' => 'utf-8',
        //'headerCharset' => 'utf-8',
    );

Le code de mon Controller :

App::uses('CakeEmail','Network/Email');
$CakeEmail = new CakeEmail('default');
$CakeEmail->to($this->request->data'User']'mail']);
$CakeEmail->subject('Votre inscription à GensakuManga');
$CakeEmail->viewVars(
    $this->request->data'User'] +  
    array(
        'token' => $token, 
        'id' => $this->User->id
));
$CakeEmail->emailFormat('text');
$CakeEmail->template('signup');
$CakeEmail->send();
$this->Session->setFlash('Merci de vous être inscrit');

Encore merci d'avance !

7 réponses


mimosa21
Réponse acceptée

Salut,
Il me semble que tu dois laisser ton smtp_port à 25 smtp_port = 25
et moi je n'ai pas décommenté le sendmail_path (fait attention d'ailleur tu as fais sauté le "s")
;sendmail_path =

Si ça peut t'aider !

Lartak
Réponse acceptée

Bonjour.
Tu devrais trouver ta solution ici : Envoyer des mails en local avec Wamp

Ta config email ne ressemble à rien de connu, alors à moins que tu aies des alias, je dirai qu'elle n'est pas valable.

As-tu un serveur SMTP sur l'environnement sur lequel tu développes ?
Je ne sais plus si ce point est abordé dans le tutoriel, mais sous Windows avec WAMP, les mails ne partent pas sans ajouter un serveur SMTP.

Bonjour
Celest35,

Comme dis Pakito ça ressemble a la configuration de base du cakemail mais si tu est en local, il te faut un serveur smpt (sous MAMP/WAMP et autres) Tu peux aussi utiliser les smtp de google (gmail) ou autre voir de ton FAI. Mais avec une configuration comme celle que tu nous montre celà ne peux pas fonctionner.

Bien à toi,

Salut,
Gardes ta config comme ça elle est bonne !

Vas chercher ton fichier php.ini par un clic gauche sur l’icône de wamp, puis sur PHP, puis sur php.ini.
Dès que ton fichier php.ini est ouvert, fais [ctrl + F] et recherche la ligne [mail function]
Remplaces « localhost » par le SMTP de ton fournisseur Internet
(par ex : SMTP = smtp.bbox.fr au lieu de SMTP = localhost)
Décommentes la directive sendmail_from et renseignes-la (Exemple : tonEmail@bbox.fr).

J'ai eu le même soucis ;)

Merci pour toute vos réponse, mais je n'arrive pas a faire marcher le SMTP avec Wamp.

Code de php.ini:

[mail function]
; For Win32 only.
; http://php.net/smtp
SMTP = smtp.orange.fr 
; http://php.net/smtp-port
smtp_port = 587
; For Win32 only.
; http://php.net/sendmail-from
sendmail_from = ******* @orange.fr
; For Unix only. You may supply arguments as well (default: "sendmail -t -i").
; http://php.net/sendmail-path
endmail_path = "C:\Program Files\wamp\sendmail"

Merci d'avance.

Merci à tous pour votre aide, j'avais juste oubliez le sendmail.exe dans le lien dans php.ini.
Encore merci.