CakePHP捕获无效电子邮件

2022-05-27 00:00:00 sendmail php 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;
}

相关文章