Email 如何使用CakePHP电子邮件组件?

Email 如何使用CakePHP电子邮件组件?,email,cakephp,Email,Cakephp,我是CakePHP新手,正在拼命学习 我最近的一个难题是电子邮件组件 我有合同。当我创建合同时,我添加了一个用户。当我第一次保存新合同时,我想向该合同中的用户发送一封电子邮件,允许他们单击返回合同的链接,然后接受或拒绝该合同 如何发送此电子邮件 我能得到的细节越多,答案越明智越好。我在那里读到的所有东西都令人惊讶地困惑。我需要配置smtp设置吗?保存合同后,如何抓取合同中的用户并将其和合同链接传递到电子邮件?我如何知道电子邮件是否已发送,而不必每次都去查看我的电子邮件 以下是我在contract

我是CakePHP新手,正在拼命学习

我最近的一个难题是电子邮件组件

我有合同。当我创建合同时,我添加了一个用户。当我第一次保存新合同时,我想向该合同中的用户发送一封电子邮件,允许他们单击返回合同的链接,然后接受或拒绝该合同

如何发送此电子邮件

我能得到的细节越多,答案越明智越好。我在那里读到的所有东西都令人惊讶地困惑。我需要配置smtp设置吗?保存合同后,如何抓取合同中的用户并将其和合同链接传递到电子邮件?我如何知道电子邮件是否已发送,而不必每次都去查看我的电子邮件

以下是我在contracts\u controller.php中用于电子邮件发送功能的代码:(一个合同属于一个用户,而一个用户有许多合同。)

这是我的contracts_controller.php文件的顶部,在$name和$helpers后面:

var $components = array('Email');
我想我应该指出,我在使用模板时遇到了问题,所以为了测试它,我将电子邮件正文直接包含在send()中,并指定了to email地址,而不是使用变量。还是…没什么!没有错误,没有电子邮件

任何帮助都将不胜感激!我真的不知道我做错了什么

谢谢


耶利米

我想把这句话放在评论里,但它有点长

你是否尝试过只使用本地电子邮件服务器,而不是连接到gmail?可能是gmail服务器拒绝了您的电子邮件,因为它是从本地来源生成的。我建议您在本地尝试类似MDaemon的方法,看看您是否可以先为自己生成电子邮件。确保允许开放中继,否则您的邮件将在本地反弹

您在哪里保存了电子邮件模板?他们应该在这里,
app/views/elements/email/html
app/views/elements/email/text
也要确保设置您的内容,并在模板中根据文档使用echo$content\u布局,api也值得一看,以确保您有正确的参数

要将详细信息传递到电子邮件消息中,只需在控制器操作中使用$this->set,然后在电子邮件模板中,使用echo$var将其输出。电子邮件的工作原理与常规视图类似,只是它是通过电子邮件而不是浏览器发送的

如果要检查邮件是否已发送,则可以将$email->Send()包装在If语句中

if($email->Send()){ echo "Your contract has been dispatched!"; }
这让我想你已经实例化了电子邮件组件了吗?我倾向于使用

$email = new Email();
然后在上面设置类变量。我以前从未见过它被用作$this->Email,尽管这可能很有效:)

使用页面中的代码示例,特别是最后一节,获取错误通知

/* Check for SMTP errors. */
    $this->set('smtp-errors', $this->Email->smtpError);
您可以使用视图打印smtp错误

电子邮件的布局应位于

/app/view/layout/email/html
/app/view/layout/email/text
如果要复制和修改默认模板,可以在下找到它们

/libs/view/layouts/email/html
/libs/view/layouts/email/text
您的代码看起来是正确的。问题可能是SMTP服务器拒绝了电子邮件


哦,你还应该检查一下/app/tmp/logs下的debug.log和error.log,也许这个问题已经解决了,但对我来说,解决方案是安装一个电子邮件服务器。我选择了后缀;有一个有用的指南可以在安装它


有了它,您不必从邮件实例中设置
smtpOptions
,考虑到邮件也可以作为垃圾邮件发送。

普通的php邮件可以工作吗?您有smtp服务器设置吗?这可能是一个常见的php配置问题,而不是特定于蛋糕的问题。在通过gmail发送邮件之前,请检查/app/tmp/logs/I下的错误日志。此外,我相信gmail对你每天通过SMTP发送的电子邮件数量有一个严格的限制——我想是500或1k。因此,如果你的应用程序需要发送更多信息,你需要一个不同的解决方案。就个人而言,我使用gmail收发邮件,并通过我的本地服务器发送邮件(还允许你欺骗邮件服务器设置,以便你可以转储“来自travis的代表…”另外,David,如果您将电子邮件放入控制器中的$components数组中,控制器将为您实例化它,创建一个成员属性,您可以从controller::Email访问该属性(如上所述)。您也可以尝试使用第三方电子邮件库(如PHPMailer),以确保smtp设置正确。电子邮件模板应位于/app/views/layouts/email以及文件夹“html”和“text”下
/app/view/layout/email/html
/app/view/layout/email/text
/libs/view/layouts/email/html
/libs/view/layouts/email/text