我有一个用于在CakePHP 2.0中发送电子邮件的组件。它完全正常工作,直到我把网站放在现场主机上。现在,我收到错误:
电子邮件无效:“admin@website.com”
显然,上面的电子邮件地址是有效的,所以我不知道为什么Cake会在这里抛出异常。请注意,无论我使用哪个电子邮件地址,都会得到相同的结果。
我使用的组件功能:
public function send($to, $subject, $body = null, $view = 'default', $vars = array(), $layout = 'layout'){
try{
$Email = new CakeEmail();
$Email->config('default');
$Email->template($view, $layout)->viewVars($vars);
$Email->from(array(Configure::read('Site.email') => Configure::read('Site.name')));
$Email->to($to);
$Email->subject($subject);
if(strlen(trim($body)) > 0){
$Email->send($body);
} else{
$Email->send();
}
} catch(Exception $e){
var_dump($e);
}
}
在我的电子邮件配置文件中,我使用默认的Mail传输。
更新:我似乎遇到与person in this question完全相同的问题。基本上,我收到了错误:
电子邮件无效:“email@website.com” 发生内部错误。
答案 0 :(得分:2)
基本上,我意识到我没有在我的电子邮件配置中设置内容类型。在我的本地计算机上,我使用Google的电子邮件服务器发送HTML电子邮件。在生产服务器上,我使用的是常规邮件配置。不幸的是,我忘了为这种特定类型的邮件设置内容类型(而它是为Gmail配置设置的)。这里的问题是我的许多布局和基于文本的电子邮件不存在HTML电子邮件的查看文件。这似乎已经以某种形式破坏了Cake,导致它抛弃了关于电子邮件无效的无意义错误,即使它们是。
说实话,我偶然发现了这件事。昨天,我上传了一些代码来尝试调试问题。令我惊讶的是,我的测试代码工作正常。然后我突然意识到,在我的测试代码中,我 手动 指定默认视图和布局。即我没有使用任何自定义视图。
为了测试我的理论,我确保HTML视图和布局也存在于基于文本的电子邮件中。果然,我的电子邮件开始发送。
从那时起,我将内容类型设置为HTML,一切都按预期工作。
答案 1 :(得分:0)
一些想法
$Email->to(Sanitize::paranoid($to, array('@'));
另外,请确保 - > to()函数实际上将$ to设置为 - > to:)
否则,请按以下方式设置:
$Email->to = Sanitize::paranoid($to, array('@');