我已经使用 CakePHP 的电子邮件类将近一年了。系统一直在发送 html 电子邮件,没有问题。两天前,我收到报告说客户没有收到他们的通知。我还注意到我没有收到我的管理员通知。
我的第一个想法是我的服务器(由 GoDaddy 托管)发生了一些变化。我不相信它是我的托管服务提供商,因为我已经测试了 php 的原始 mail() 函数,甚至通过 CakePHP 的类发送了一封快速的文本电子邮件。我还测试了每种调试模式和错误日志,没有任何迹象表明发生了错误。这是我几天前(成功)使用的代码。这段代码在我的应用程序中大约有 10 次相同。
$Email = new CakeEmail();
$Email->template('order_status_change', 'default')
->emailFormat('html')
->to($order['Order']['email'])
->subject('blah blah ' . $order['Order']['id'] . ' status change: ' . $status['Status']['label'])
->from(array('myemail@gmail.com' => 'blah blah'))
->viewVars(array(
'id' => $order['Order']['id'],
'firstName' => $order['Order']['first_name'],
'statusLabel' => $status['Status']['label'],
'statusDescr' => $status['Status']['description']
))
->send();
有几点需要注意:
- 我已经确认 html 模板 'order_status_change' 和默认布局位于正确的文件夹中(它们之前工作过)
- 我已确认在发送电子邮件时所有变量均已正确设置
如果我必须切换到文本电子邮件,我会的,但我似乎无法理解代码是如何突然停止工作的。我唯一改变的是调试模式(我从一开始就一直这样做)。
更新
电子邮件再次停止工作,所以我切换到短信。但是,由于某些奇怪的原因,当我在正文中放置一个 url(如http://www.google.com)时,邮件失败了。但是,如果我只删除 .com,它将通过。到底发生了什么?
更新 2
这是我当前的配置,它将发送没有链接的文本电子邮件(当我说链接时,我的意思是 url 字符串)
class EmailConfig {
public $godaddy = array(
'transport' => 'Smtp',
'host' => 'relay-hosting.secureserver.net',
'port' => 25,
'timeout' => 300,
'log' => true,
'charset' => 'utf-8',
'headerCharset' => 'utf-8'
);
}
我确认 Go Daddy 不需要身份验证,并且端口是 25。