CakePHP捕获无效电子邮件
我正在尝试使用CakePHP(2.3.6)发送电子邮件邀请,用户在输入字段中输入逗号分隔的电子邮件地址列表。
目前,只要没有无效的电子邮件地址,我就可以毫无问题地发送电子邮件。但是,如果有一封坏的电子邮件,我尝试添加一个try/Catch来捕获错误,但我的代码从未成功捕获。
这是我的资料
try {
if($Email->send()) {
$this->Session->setFlash(__('Email successfully sent'), 'flash/success');
} else {
$this->Session->setFlash(__('Could not invite guests. Please, try again.'), 'flash/error');
$this->redirect($this->referer());
}
} catch(Exception $e) {
$this->Session->setFlash(__('Could not invite guests. Probably a bad email. Please, try again.'), 'flash/error');
$this->redirect($this->referer());
}
$this->redirect($this->referer());
当我在启用调试的情况下输入无效电子邮件时,我收到以下错误:
无效电子邮件:"foo" 错误:发生内部错误。
当调试关闭时:
发生内部错误。
我以为我的尝试/捕捉有问题,但在我看来它是正确的。是否有其他我应该使用的方法来捕获CakePHP错误?
提前谢谢!!
解决方案
无效的电子邮件地址会导致在设置它们时立即引发异常。这发生在调用Send方法之前,因此它不会到达您发布的try块。
这来自我编写的一个组件,该组件处理为我们的系统发送几个不同的电子邮件。我已经将每个地址设置包装在一个try块中,这样就可以更容易地追踪到有问题的地址,但如果您不想要那么多细节,可以将所有这些都包装在一个块中。您可以使用getMessage方法检查来自异常的消息以查看有问题的地址字符串。这适用于我的Cake 2.3:
$email = new CakeEmail();
//...
// set to for email
try
{
$email->to($recipient);
}
catch(SocketException $e)
{
$result['problem'] = 'Recipient Address';
$result['message'] = $e->getMessage();
return $result;
}
// set cc for email - not required
try
{
if($cclist != '') $email->cc(preg_split('/, */', $cclist));
}
catch(SocketException $e)
{
$result['problem'] = 'CC List';
$result['message'] = $e->getMessage();
return $result;
}
相关文章