我是CakePHP的新手,正在拼命地学习!
我最近的挣扎是在电子邮件组件上。
我有合同。当我创建契约时,我添加了一个用户。当我第一次保存新的contract...for时,我想向该合同中的用户发送一封电子邮件,允许他们单击返回合同的链接,然后接受或拒绝合同。
如何发送此电子邮件?
我能得到的细节越多,答案就越好。我在那里读到的所有东西都令人惊讶地感到困惑。是否需要配置smtp设置?如何在保存合同后获取合同中的用户,并将合同和合同链接传递到电子邮件?我如何知道电子邮件是否已经发送,而不是每次都去检查我的电子邮件?
下面是我的contracts_controller.php中用于电子邮件发送功能的代码:(一个契约belongsTo a User,一个用户hasMany Contracts。)
function _sendContractEmail($id) {
$this->Email->smtpOptions = array(
'port'=>'465',
'timeout'=>'30',
'host'=>'ssl://smtp.gmail.com',
'username'=>'username',
'password'=>'password'
);
$this->Email->delivery = 'smtp';
$User = $this->Contract->User->read(null,$id);
$this->Email->to = 'jeremiah@jeremiahotis.com';
$this->Email->subject = '';
$this->Email->replyTo = 'no-reply@goodvaluation.com';
$this->Email->from = 'Jeremiah Oits <jeremiah@jeremiaotis.com>';
$this->Email->template = 'simple_message';
$this->Email->sendAs = 'html';
$this->set('User', $User);
$this->Email->_debug = true;
$this->Email->send('Test Email');
$this->redirect(array('controller'=>'contracts', 'action'=>'index'));
}下面是我的contracts_controller.php add()函数中的代码:
function add() {
if (!empty($this->data)) {
$this->Contract->create();
if ($this->Contract->save($this->data)) {
$this->Session->setFlash(__('The Contract has been saved', true));
$this->_sendContractEmail($this->Contract->User->id);
} else {
$this->Session->setFlash(__('The Contract could not be saved. Please, try again.', true));
}而且,这是在$name和$helpers之后的我的contracts_controller.php文件的顶部:
var $components = array('Email');我想我应该指出我在使用模板时遇到了问题,所以为了测试它,我在send()中直接包含了电子邮件的正文,并且指定了收件人电子邮件地址,而不是使用变量。Still...nothing!没有错误,没有电子邮件。
任何帮助都将不胜感激!我真的不知道我做错了什么!
谢谢,
耶利米
发布于 2010-01-06 06:32:31
http://book.cakephp.org/view/481/Sending-A-Message-Using-SMTP
使用页面中的代码示例,特别是最后一节来获取错误通知
/* Check for SMTP errors. */
$this->set('smtp-errors', $this->Email->smtpError);您可以使用pr(smtp-errors)您的视图打印smtp错误。
电子邮件的布局应位于以下位置
/app/view/layout/email/html
/app/view/layout/email/text如果要复制和修改默认模板,可在以下位置找到
/libs/view/layouts/email/html
/libs/view/layouts/email/text您的代码看起来是正确的。问题可能与SMTP服务器拒绝电子邮件有关。
哦,你还应该检查/ debug.log /tmp/logs下的error.log和
发布于 2010-01-05 23:53:55
我会把这个放在一个评论里,但它有点长了。
您是否尝试过只使用本地电子邮件服务器,而不是连接到gmail?这可能是因为gmail服务器拒绝了您的电子邮件,因为它是从本地源生成的。我建议在本地尝试像MDaemon这样的东西,看看你是否可以先给自己生成一封电子邮件。请确保允许开放中继,否则您的邮件将在本地退回。
您将电子邮件模板保存在何处?它们应该在这里,app/views/elements/email/html和app/views/elements/email/text也一定要设置您的内容,并在模板中根据文档使用echo $content_for_layout,http://book.cakephp.org/view/269/Sending-a-basic-message api也值得一看,以确保您具有正确的参数http://api.cakephp.org/class/email-component
要将详细信息传递到电子邮件消息中,您只需在控制器操作中使用$this->set,然后在电子邮件模板中,您可以执行一个echo $var来输出它。电子邮件的工作原理与常规视图一样,只是它是通过电子邮件而不是浏览器发送的。
如果您想检查邮件是否已经发送,那么可以将$email->Send()封装在一个If语句中。
if($email->Send()){ echo "Your contract has been dispatched!"; }这让我想到您是否实例化了电子邮件组件?我倾向于使用,
$email = new Email();然后在上面设置类变量。我以前没有见过它被用作$this->电子邮件,尽管这可能很好用:)
发布于 2011-07-27 14:17:57
也许这个问题已经解决了,但对我来说,解决方案是安装一个电子邮件服务器。我选择了postfix;在https://help.ubuntu.com/community/MailServer上有一个有用的指南可以安装它。
有了它,你不必从邮件的实例中设置smtpOptions,考虑到邮件也可以作为垃圾邮件传递。
https://stackoverflow.com/questions/2006312
复制相似问题