2012-08-14 34 views
5

Este código salidas:envía un correo electrónico con el enlace

Call to a member function link() on a non-object 

Lo que yo quiero es enviar un enlace por correo electrónico. ¿Qué está mal con el código? gracias

class User extends AppModel { 
    public $helpers = array('Html'); 
    public function sendEmail($email_user, $code) { 
      $email = new CakeEmail(); 
      $email->config('smtp'); 

      $pwrurl = "http://xxx/users?se=check&mail=".$email_user."&code=".$code; 
      $link = $this->Html->link('Link name', $pwrurl, array('target' => '_blank')); 
      $email->from(array('[email protected]' => 'xxxx')) 
      ->to($email_user) 
      ->emailFormat('html') 
      ->send('My message:: '.$link); 
      return true; 
     } 
} 

docs

Actualización: Me sale el mismo error.

App::uses('CakeEmail', 'Network/Email'); 
App::uses('AppHelper', 'View/Helper'); 

class AppController extends Controller { 
     public $helpers = array('Form', 'Html'); 

     public function sendEmail($email_user, $codeLink) { 
      //same code. 
     } 

}

+1

'$ this-> Html' es probablemente' nulo' –

+0

puede rayar el "probablemente";) Me pregunto cómo la gente tiene la idea de incluir la matriz de ayudantes en un modelo ... – mark

+0

@mark, y una posible la solución es? – user1311784

Respuesta

0

En lugar del código anterior, se puede tratar de utilizar los siguientes:

App::uses('HtmlHelper', 'View/Helper'); 
class User extends AppModel { 
public function sendEmail($email_user, $code) { 
     $email = new CakeEmail(); 
     $email->config('smtp'); 

     $pwrurl = "http://xxx/users?se=check&mail=".$email_user."&code=".$code; 
     $link = $this->Html->link('Link name', $pwrurl, array('target' => '_blank')); 
     $email->from(array('[email protected]' => 'xxxx')) 
     ->to($email_user) 
     ->emailFormat('html') 
     ->send('My message:: '.$link); 
     return true; 
    } 
} 

Como causa de $helpers es un miembro de datos válido para los controladores, no para el modelos. También es una buena alternativa para escribir el método sendEmail() en su AppController.php e invocar este método en el método de su controlador usando $this->sendEmail($user_email, $code);

This documentation page podría ayudar a lograr lo mismo.

Espero que funcione para usted.

+0

Obtengo exactamente el mismo error, incluso si puse el código en el controlador. – user1311784

1

de here:

$pwrurl = '<a href="http://' . $_SERVER['SERVER_NAME'] ."https://stackoverflow.com/users/otpregister/".$email_user."&code=".$codeLink.'"> Registration link</a>'; 
2

probablemente debería tener esto en el controlador:

class UsersController extends AppController { 
    var $name = 'Users'; 
    var $helpers = array('Html'); 
    var $components = array('Email'); 

    function _email($email_user, $code){ 
     $pwrurl = "http://xxx/users?se=check&mail=".$email_user."&code=".$code; 
     $this->Email->from = 'From: Someone'; 
     $this->Email->to = $email_user; 
     $this->Email->subject = 'Your Subject'; 
     $this->Email->sendAs = 'html'; 
     $this->Email->template = 'your_template'; 
     $this->set('pwrurl', $pwrurl); 
     $this->Email->send(); 
    } 
} 

A continuación, cree una plantilla de correo electrónico en views/elements/email/html el mismo nombre que su plantilla en el código anterior. Para este ejemplo your_template.ctp. Componer el mensaje de la forma en que desea que se vea y donde cada vez que desea que el enlace aparezca uso:

$this->Html->link('Link name', $pwrurl, array('target' => '_blank')); 

Esperemos que ayuda.

+0

Obtendré una variable indefinida: pwrurl en plantilla. \t Creo que solo puedo hacer $ this-> HTML-> link ... en la carpeta view/users. – user1311784

+0

Si usa $ this-> set ('pwrurl', $ pwrurl); la variable estará disponible en su plantilla de correo electrónico especificada. Ejecuté el código anterior para asegurarme de que funciona y pude enviar y recibir el enlace. – JadedCore

+0

Tu ejemplo es pastel 1.3 ¿verdad? Bueno, la plantilla del pastel 2.2 debe colocarse en view/email/html/template.ctp. Todavía recibo el mismo error. Pero si utilizo una vista de la carpeta de usuarios entonces puedo usar el enlace '$ this-> Html-> ('Nombre del enlace', $ pwrurl, array ('target' => '_blank')); correctamente. ' – user1311784

Cuestiones relacionadas