【发布时间】:2015-10-30 17:59:00
【问题描述】:
我在组件内部有一个功能,可以使用 Gmail 发送联系邮件。无论出于何种原因,如果我使用手机互联网,我的工作网络会阻止与 Gmail 的安全连接,例如它工作正常,因此很明显电子邮件配置很好。我真正感兴趣的是捕获 FatalErrorException,这样我就可以向控制器返回 false 并在网站上显示错误消息,但我没有这样做。
这是我的组件代码:
try{
$correo = new Email();
$correo
->transport('mail')
->template('contacto_negocio')
->emailFormat('html')
->to($correoPara)
->from($correoDe, $nombreDe)
->replyTo($correoDe, $nombreDe)
->subject(__('Mensaje de contacto desde ').$sitio_nombre_secundario)
->viewVars([
'sitio_nombre_secundario'=>$sitio_nombre_secundario,
'sitio_nombre' => $sitio_nombre,
'nombreDe'=>$nombreDe,
'correoDe'=>$correoDe,
'mensaje'=>$mensaje
])
->send();
} catch (FatalErrorException $ex){
return false;
} catch(SocketException $ex){
return false;
}catch (\Exception $ex) {
return false;
}
以及控制器中的代码:
if($this->Correo->contactoNegocio($correo, $nombreDe, $correoDe, $mensaje)){
$respuesta = ['cod'=>1, 'mensaje'=>'Message sent'];
}else{
$respuesta = ['cod'=>0, 'mensaje'=>'<span style="color:red; font-size: 12px;">Message not sent.<span>'];
}
我错过了什么??
【问题讨论】:
-
您的代码没有达到它可以捕获
FatalErrorException的程度,因为执行时间错误或多或少是蛋糕自行处理的关闭函数的结果。据我所知,您可以增加限制或尝试修改他们的关闭方法,但您将无法将其“捕获”为异常。 -
该错误表明您的脚本正在超时。就@skrilled 而言,它永远不会到达
catch块,因为在此之前它已经停止执行。 -
你们说的都对,我看不出来。我将 max_execution_time 设置为 60 秒,并将 configTransport 的超时设置为 30 秒,这解决了我的问题。谢谢两位的回复。
-
@skrilled 请将您的评论变成答案,这样这个问题就不会再出现在“未回答”列表中。
-
@InigoFlores 完成 :)
标签: php cakephp cakephp-3.0