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