Bonjour,

J'ai suivis le tutoriel concernant le formulaire de contact.

Mais le mail ne s'envoie pas.
J'ai bien le setflash m'indiquant que le message a été envoyé mais je ne reçois rien.

email.php :

public $default = array(
        'transport' => 'Mail',
        'from' => 'ICI JE MET MON MAIL',
    );

Contact.php :

<?php
class Contact extends AppModel{

    public $useTable = false; 
    public $validate = array(
        'name' => array(
            'rule' => 'notEmpty',
            'required' => true,
            'message' => 'Vous devez entrer votre nom'
        ),
        'email' => array(
            'rule' => 'email',
            'required' => true,
            'message' => 'Vous devez entrer un email valide'
        ),
        'message' => array(
            'rule' => 'notEmpty',
            'required' => true,
            'message' => 'Vous devez entrer votre message'
        )
    );

    public function send($d){
        $this->set($d); 
        if($this->validates()){
            App::uses('CakeEmail','Network/Email');
            $mail = new CakeEmail(); 
            $mail->to('ICI JE MET MON MAIL')
                ->from($d'email'])
                ->subject('Contact :: Site')
                ->emailFormat('html')
                ->template('contact')->viewVars($d);
            return $mail->send();
        }else{
            return false; 
        }

    }
}

ContactController.php :

<?php
class ContactController extends AppController{
    public $components = array('Session','Security'); 

    function index(){
        $this->layout = "contact";
        if($this->request->is('post')){
            if(!empty($this->request->data'Contact']'website'])){
                $this->Session->setFlash("Votre message a été envoyé avec succès.","notif");
                $this->request->data = array(); 
            }
            else{
                if($this->Contact->send($this->request->data'Contact'])){
                    $this->Session->setFlash("Votre message a été envoyé avec succès.","notif");
                    $this->request->data = array(); 
                }
                else{
                    $this->Session->setFlash("Merci de compléter les champs requis.","notif",array('type'=>'error'));
                }
            }
        }
    }
}

index.ctp :

<?php $this->set('title_for_layout',"Me contacter"); ?>
<?php echo $this->Form->create('Contact',array('id' => 'contactForm')); ?>
    <fieldset>
        <div>
            <?php echo $this->Form->input('name',array('label'=>"Nom : ","required", 'class' => 'form-poshytip', 'title' => 'Entrez votre Nom de famille')); ?>
        </div>
        <div>
            <?php echo $this->Form->input('email',array('label'=>"Email : ","type"=>"email","required", 'class' => 'form-poshytip', 'title' => 'Entrez votre adresse email')); ?>
        </div>
        <div>   
            <?php echo $this->Form->input('website',array('label'=>"Site internet : ","type"=>"text", 'class' => 'form-poshytip', 'title' => 'Entrez votre site internet')); ?>
        </div>
        <div>   
            <?php echo $this->Form->input('message',array('label'=>"Message : ","type"=>"textarea","required", 'class' => 'form-poshytip', 'title' => 'Entrez votre message')); ?>
        </div>
    </fieldset>
<?php echo $this->Form->end('Envoyer'); ?>

En espérant obtenir une aide de votre part.

Amicalement,
DexX

12 réponses


Salut, tu as quoi dans ton fichier email.php dans /config ?

Autant pour moi, j'avais pas vu, tu es sur serveur ou sur localhost ?

DexX
Auteur

Je suis sur serveur. Hébergement 1and1, donc je ne sais pas si cela peut venir de ça.

DexX
Auteur

Bonjour,

Personne pour m'aider ?

Salut, dans ton dossier View/Layouts/Emails/html/default.ctp
as tu mis ceci :

<?php echo $content_for_layout; ?>

et dans ton dossier un fichier contact.ctp de ce type :
View/Emails/html/contact.ctp
ou tu aurais mis un code du genre

<?php echo $name; ?>
<?php echo $email; ?>
<?php echo $message; ?>

Une autre question aussi, tu mets dans ta fonction index de ton controller ceci :

$this->layout = "contact";

Ce qui veut dire que tu as un contact.ctp dans le dossier View/Layouts/
Est-ce le cas ? Si ce n'est pas le cas, enlève cette ligne et il utilisera le default.ctp

DexX
Auteur

J'ai fais bien tout ce que tu m'a dis. Et ça ne marche toujours pas. Je ne reçois aucun email.

J'ai bien la notif comme quoi le message a bien été envoyé mais je ne reçois rien.

Question bête, tu as vérifié des courriers indésirables.. Au cas où..

DexX
Auteur

Oui oui j'ai vérifié ^^

Essaye de remplancer ca,

$mail = new CakeEmail();

par ca, meme si je doute que ce soit ca, on sait jamais.

$mail = new CakeEmail(default);

Moi quand je met ce que tu propose, Kamburas, j'ai une erreur...

Est-ce que la mise en cache pourrait interférer avec le fonctionnement de l'envoi de mail ?