使用链接发送电子邮件

5
这段代码输出:
Call to a member function link() on a non-object 

我想在邮件中发送一个链接。这段代码有什么问题吗?谢谢。

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('xxxn@gmail.com' => 'xxxx'))
            ->to($email_user)
            ->emailFormat('html')
            ->send('My message:: '.$link);
            return true;
        }
}

文档

更新:我遇到了同样的错误。

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 可能是 null - Ja͢ck
你可以删掉“probably”这个词 ;) 我想知道人们是怎么想到在模型中包含helpers数组的... - mark
@mark,有可能的解决方案是什么? - user1311784
对于初学者来说,可以使用cake方式来实现。使用模板/布局,只传递值/数组,然后转换为视图ctps中的链接(在那里可以使用html helper)。 - mark
@符号,好的。那么发送HTML链接的唯一方法就是手动编写HTML代码吗? - user1311784
3个回答

2

可能应该将这个放在控制器中:

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();
   }
}

接下来,在views / elements / email / html中创建一个与上面代码中模板名称相同的电子邮件模板。 以这个例子为例,你的模板应该是your_template.ctp。按照你想要的格式撰写消息,无论在哪里需要链接都使用:

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

希望这有所帮助。

我将在模板中获得未定义的变量:pwrurl。我认为我只能在view/users文件夹中执行$this->HTML->link... - user1311784
如果您使用 $this->set('pwrurl', $pwrurl);,则该变量将在指定的电子邮件模板中可用。我运行了上面的代码以确保它可以正常工作,并且我能够发送和接收链接。 - JadedCore
你的例子是针对cake 1.3的,对吧?那么,在cake 2.2中,模板应该放在view/email/html/template.ctp中。我仍然遇到了相同的错误。但是,如果我使用users文件夹中的视图,那么我就可以正确地使用$this->Html->link('Link name', $pwrurl, array('target' => '_blank')); - user1311784
是的,对不起,我正在使用cake 1.3。[Cake 2.0][cake]展示了如何设置$email->helpers(array('Html'));并使用$email->viewVars(array('pwrurl' => $pwrurl));将您的变量发送到电子邮件视图中。 [cake]: http://book.cakephp.org/2.0/en/core-utility-libraries/email.html - JadedCore

1

这里

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

0

你可以尝试使用以下代码替代上面的代码:

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('xxxn@gmail.com' => 'xxxx'))
        ->to($email_user)
        ->emailFormat('html')
        ->send('My message:: '.$link);
        return true;
    }
}

由于$helpers是控制器的有效数据成员,而不是模型的。在您的AppController.php中编写sendEmail()方法并使用$this->sendEmail($user_email, $code);调用此方法也是一个很好的选择。

此文档页面可能会帮助您实现相同的功能。

希望这对您有所帮助。


我得到了完全相同的错误,即使我把代码放在控制器中。 - user1311784

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接