Problème d'envoi d'email

Par Nalius, il y a 14 ans


Salut à tous,

Voilà j'ai adapté le tutoriel Système de membres avec CakePHP dans mon site fait avec les tutoriaux Développer un site avec CakePHP mais j'ai un petit (gros) problème, quand je créer un nouveau membre et que je clique sur S'enregistrer j'ai le message suivant qui s'affiche

Bonjour Test
Pour activer ce compte suivez le lien :

Fatal error: Call to a member function link() on a non-object in D:\xampp\htdocs\sitew\app\View\Emails\html\signup.ctp on line 6

Normalement c'est le message qu'on reçois par mail, mais moi il me l'affiche dans le navigateur, je ne comprend pas

Merci de votre aide

Warranty

28 réponses

Hotgeart, il y a 14 ans

tu es en local?

Nalius, il y a 14 ans

En local ou en ligne cela fait la même erreur.

aschelch, il y a 14 ans

Peux-tu nous montrer le contenu (ou au moyen la ligne 6) de ta vue signup.ctp ?

Nalius, il y a 14 ans

Voici la ligne 6 de mon fichier signup.php

<p><?php echo $this->Html->link('Activer mon compte',$this->Html->url($link,true)); ?></p>
Nalius, il y a 14 ans

Personne à une petite idée de ou cela peu venir ?

Flowcki, il y a 14 ans

Peux-tu nous montrer ta variable $link ;)

Nalius, il y a 14 ans

Voilà, enfin j’espère que je me troupe pas :)

->viewVars(array('username'=>$d'User']'username'],'link'=>$link))
Flowcki, il y a 14 ans

Non pas ça ;), ta variable $link, la déclaration de la variable $link = array(....)

Nalius, il y a 14 ans

Oups désolé :)

Voilà

$link = array('controller'=>'users','action'=>'activate',$this->User->id.'-'.md5($d'User']'password']));

:)

lepetitnico, il y a 14 ans

A mon avis il n'aime pas le md5.

Nalius, il y a 14 ans

Le truc que je comprend pas c'est qu'il m'affiche "Pour activer ce compte suivez le lien :..." dans le navigateur hors normalement je doit le recevoir par mail.

lepetitnico, il y a 14 ans

dsl je ne peux pas beaucoup t'aider je n'ai jamais utilisé l'envoi de mail comme ceci, mais j'ai vu un tutoriel pour envoyer des mails avec cakephp2.0 récemment tu devrait peut être le voir : creation d'un formulaire de contact sous cakephp 2.0

Flowcki, il y a 14 ans

Le mieux c'est de nous montrer ton action signup ;)

Nalius, il y a 14 ans

Voilà :)

function signup(){
        if($this->request->is('post')){
            $d = $this->request->data; 
            $d'User']'id'] = null;
            $d'User']'lastlogin'] = '2009-08-08 12:17:00'; 
            if(!empty($d'User']'password'])){
                $d'User']'password'] = Security::hash($d'User']'password'],null,true);
            }
            if($this->User->save($d,true,array('username','password','mail'))){
                $link = array('controller'=>'users','action'=>'activate',$this->User->id.'-'.md5($d'User']'password']));
                App::uses('CakeEmail','Network/Email'); 
                $mail = new CakeEmail(); 
                $mail->from('noreply@localhost.com')
                    ->to($d'User']'mail'])
                    ->subject('Test :: Inscription')
                    ->emailFormat('html')
                    ->template('signup')
                    ->viewVars(array('username'=>$d'User']'username'],'link'=>$link))
                    ->send();
                $this->Session->setFlash("Votre compte a bien été créé","notif");
                $this->request->data = array(); 
            }else{
                $this->Session->setFlash("Merci de corriger vos erreurs","notif",array('type'=>'error'));
            }
        }
    }
Hotgeart, il y a 14 ans

tu as bien chargé cakemail? Tu as bien un template signup en html?

Nalius, il y a 14 ans

Oui Cakemail est bien charger j'ai revérifier et j'ai bien le fichier signup.ctp dans /app/View/Emails/html

Nalius, il y a 14 ans

Bon je vais laisser de coté l'espace membre pour le moment car cela me prend un peu la tête je recommencerai depuis le début plupart

Merci quand même pour votre aide :)

lepetitnico, il y a 14 ans

J'ai trouvé la solution : au lieu d'écrire cela,

$link = array('controller'=>'users','action'=>'activate',$this->User->id.'-'.md5($d'User']'password']));

essaye d'écrire cela :

$link = array('controller'=>'users','action'=>'activate','identifiant'=>$this->User->id.'-'.md5($d'User']'password']));

A mon avis cela réglera ton problème, j'ai toujours préféré écrire mes paramètres avec un identifiant, cela fait plus propre et on peut faire de la réécriture d'URL avec cela dans le fichier routes.php même si le lien est dans un email !

Nalius, il y a 14 ans

Salut !

Je viens d'essayer ta solution mais le problème persiste, il m'affiche toujours le mail dans le navigateur et non pas par mail.

lepetitnico, il y a 14 ans

Au sin tu as essayé d'envoyer ton lien sans les paramètres, si il n'y a plus le problème ceci veut dire que le problème viens de tes paramètres, dans ce cas essaye d'écrire une variable avec le user et le mdp concaténé et met le la variable dans ton paramètre.

Nalius, il y a 14 ans

Elle et pas bête ta solution je viens de faire un test, j'ai supprimer tous les paramètres de CakeMail dans signup et j'ai aucune erreur, certes je ne reçois pas de mail d'activation logique (de toute façon de n'ai jamais réussi à en recevoir) donc le problème vient des paramètres de Cakemail.

lepetitnico, il y a 14 ans

Salut désolé pour l'attente, je n'ai pas pu me connecter ce weekend, mais cela fonctionne comme ceci, rajoute des paramètres au fur et à mesure et test, si tu vois une erreur, cela veut dire que l'erreur viens de la dernière instruction que tu as écris cela ciblera mieux le problème.

tm070193, il y a 14 ans

Il y a des solutions pour ce problème car moi j'ai exactement le même et je panique depuis 3 jours

lepetitnico, il y a 14 ans

Salut désolé je viens de voir ton passage, mais je crois que Warranty a du trouver mais n'as pas expliquer sa solution. Sans lui on ne peux pas faire grand chose.

Nalius, il y a 14 ans

Désolé de cette attente, mais malheureusement je n'ai pas réussi à réglé se problème.

Cordialement, Warranty

Jérôme_v, il y a 14 ans

Bonjour ! Même Problème !

Pas de message d'erreur mais je suis renvoyer vers le message que l'on reçoit par email !

  • je ne reçoit pas l’émail
  • l'utilisateur et bien enregistrer dans la bdd
Abou Bakr Essidik, il y a 12 ans

Salut Il faut plutot que tu ajoutes dans la librairie de CAkeEmail ceci protected

$_helpers = array('Html');

le chemin a suivre : lib/Cake/Network/Email/CakeEmail.php

$_helpers = array('Html');

chez moi il est a la ligne 119 dans ma librairie

Kareylo, il y a 12 ans

Suis-je le seul à trouver bizarre que le link() à un url() ?
T'as essayer de passer de

<p><?php echo $this->Html->link('Activer mon compte',$this->Html->url($link,true)); ?></p>

à

<p><?php echo $this->Html->link('Activer mon compte',$link); ?></p>

en déclarant un 'full_base' dans $link :

$link = array('controller'=>'users', 'action'=>'activate', $this->User->id.'-'.md5($d'User']'password'], 'full_base' => true));

Le full_base permet de donner l'url absolue (comme avec le true en second paramètre à url())

Après, je ne suis pas sûr que c'est la solution à ton problème, mais ça vaut le coup d'essayer.