Email 使用CakePHP afterSave发送电子邮件

Email 使用CakePHP afterSave发送电子邮件,email,cakephp,Email,Cakephp,我正在尝试创建一个电子邮件组件/模型,该组件/模型将向数据库中添加电子邮件(使用某些字段,例如,收件人、发件人、主题、消息、已创建、已修改等) 数据成功保存后(目前是这样),我想实际发送消息 我想使用afterSave()函数最简单,但我无法发送电子邮件 以下是一些相关代码: 电子邮件模型 <?php class Email extends AppModel { var $name = 'Email'; var $displayField = 'subject';

我正在尝试创建一个电子邮件组件/模型,该组件/模型将向数据库中添加电子邮件(使用某些字段,例如,收件人、发件人、主题、消息、已创建、已修改等)

数据成功保存后(目前是这样),我想实际发送消息

我想使用afterSave()函数最简单,但我无法发送电子邮件

以下是一些相关代码:

电子邮件模型

<?php
class Email extends AppModel {
    var $name = 'Email';

    var $displayField = 'subject';

        function afterSave() {

            $this->Email->to = $this->data['Email']['email'];
            $this->Email->subject = $this->data['Email']['subject'];
            $this->Email->replyTo = $this->data['Email']['email'];
            $this->Email->from = 'Private Message <' . $this->data['Email']['email'] . '>';
            //$this->Email->template = 'simple_message';
            $this->Email->send($this->data['Email']['email_text']);

        }
}
尝试发送时出错:

Fatal error: Call to undefined method stdClass::send() in /Users/[USER]/Sites/example_app/app/models/email.php on line 14
新控制器代码:

function add() {
        if (!empty($this->data)) {
            $this->Email->create();
//                        pr($this->data);
//                        die;
            if ($this->Email->save($this->data)) {
                $this->Session->setFlash(__('The email has been saved', true));

                                function _sendMail() {
                                    $this->Email->to = $this->data['Email']['email'];
                                    $this->Email->subject = $this->data['Email']['subject'];
                                    $this->Email->replyTo = $this->data['Email']['email'];
                                    $this->Email->from = 'Private Message <' . $this->data['Email']['email'] . '>';
                                    $this->Email->sendAs = 'text'; //Send as 'html', 'text' or 'both' (default is 'text')
                                    $email->send();
                                }

                                $this->_sendMail();

            } else {
                $this->Session->setFlash(__('The email could not be saved. Please, try again.', true));
            }
        }
    }
函数添加(){
如果(!empty($this->data)){
$this->Email->create();
//pr($this->data);
//死亡;
如果($this->Email->save($this->data)){
$this->Session->setFlash(_u('电子邮件已保存',true));
函数_sendMail(){
$this->Email->to=$this->data['Email']['Email'];
$this->Email->subject=$this->data['Email']['subject'];
$this->Email->replyTo=$this->data['Email']['Email'];
$this->Email->from='Private Message';
$this->Email->sendAs='text';//以'html'、'text'或'both'的形式发送(默认为'text')
$email->send();
}
$this->_sendMail();
}否则{
$this->Session->setFlash(_u('电子邮件无法保存。请重试',true));
}
}
}

组件是在控制器中使用的,而不是在模型中使用的-因此最干净的方法是在$this->model->save()返回true时从控制器发送邮件

因为您确实将您的模型命名为“电子邮件”,我认为您不能以标准方式使用组件“电子邮件”,并且需要手动加载:

在控制器中(函数add())

if($this->Email->save($this->data)){
//拯救成功了
应用程序::导入(“组件”、“电子邮件”);
$email=新的EmailComponent();
$email->startup($this);
$email->from=joe@example.com';
$email->to=$this->data['email']['email'];
$email->subject=$this->data['email']['subject'];
$email->replyTo=$this->data['email']['email'];
$email->from='Private Message';
$email->sendAs='text';//以'html'、'text'或'both'的形式发送(默认为'text')
$email->send();
$this->Session->setFlash(_u('电子邮件已保存',true));
}
尽管如此,还是可以从模型发送邮件,请参见此(重复)线程的第二个答案:

如果我在控制器的afterSave中使用相同的代码,它会工作吗,或者我需要修改其他东西吗?嗯。。。这不是那么容易,因为你的模型也被命名为“Email”-你能把控制器中保存数据的部分发布到模型中吗?好的,我已经把它移到了控制器中,然后按照上面答案中链接的说明,得到我刚刚添加到大文本底部的错误消息。添加了我正在尝试的新控制器代码,顺便感谢您的帮助。非常感谢。所以我应该把代码保存在我的模型中,并在上面插入你的代码?对不起,不是每个人都像其他人一样有经验和理解CakePHP。。。再次感谢你的帮助。
Fatal error: Call to undefined method stdClass::send() in /Users/[USER]/Sites/example_app/app/models/email.php on line 14
function add() {
        if (!empty($this->data)) {
            $this->Email->create();
//                        pr($this->data);
//                        die;
            if ($this->Email->save($this->data)) {
                $this->Session->setFlash(__('The email has been saved', true));

                                function _sendMail() {
                                    $this->Email->to = $this->data['Email']['email'];
                                    $this->Email->subject = $this->data['Email']['subject'];
                                    $this->Email->replyTo = $this->data['Email']['email'];
                                    $this->Email->from = 'Private Message <' . $this->data['Email']['email'] . '>';
                                    $this->Email->sendAs = 'text'; //Send as 'html', 'text' or 'both' (default is 'text')
                                    $email->send();
                                }

                                $this->_sendMail();

            } else {
                $this->Session->setFlash(__('The email could not be saved. Please, try again.', true));
            }
        }
    }
if ($this->Email->save($this->data)) {
    // save was successfull

    App::import('Component', 'Email');
    $email = new EmailComponent();
    $email->startup($this);

    $email->from='joe@example.com';
    $email->to = $this->data['Email']['email'];
    $email->subject = $this->data['Email']['subject'];
    $email->replyTo = $this->data['Email']['email'];
    $email->from = 'Private Message <' . $this->data['Email']['email'] . '>';
    $email->sendAs = 'text'; //Send as 'html', 'text' or 'both' (default is 'text')
    $email->send();


    $this->Session->setFlash(__('The email has been saved', true));
}