我正在使用软件包https://github.com/barbushin/php-imap从邮件服务器读取电子邮件,我有以下代码
$folder = Storage::disk('local')->getAdapter()->getPathPrefix();
try {
$mailbox = new \PhpImap\Mailbox('{imap.gmail.com:993/imap/ssl}INBOX', 'xxxxx@gmail.com', 'xxxxxxxxxx', $folder);
}
catch(\Exception $e) {
return 'rroor';
}
但没有捕获错误,如果登录失败,我想记录该错误。
以下代码引发异常
if(!$result) {
$errors = imap_errors();
if($errors) {
if($throwExceptionClass) {
throw new $throwExceptionClass("IMAP method imap_$methodShortName() failed with error: " . implode('. ', $errors));
}
else {
return false;
}
}
}
如何在我的控制器方法上捕获此异常?
查看错误页面
答案 0 :(得分:2)
您只能在try ... catch中使用类构造函数。我看着仓库,似乎没有从构造函数中抛出该异常。 https://github.com/barbushin/php-imap/blob/master/src/PhpImap/Mailbox.php#L33
您的代码中还有更多内容可以调用代码https://github.com/barbushin/php-imap/blob/master/src/PhpImap/Mailbox.php#L148的这一部分吗?
我认为您需要将更多代码包装到示例中缺少的try ... catch中。
答案 1 :(得分:0)
尝试一下:
use PhpImap\ConnectionException;
//....
$folder = Storage::disk('local')->getAdapter()->getPathPrefix();
try {
$mailbox = new \PhpImap\Mailbox('{imap.gmail.com:993/imap/ssl}INBOX', 'xxxxx@gmail.com', 'xxxxxxxxxx', $folder);
}
catch(ConnectionException $e) {
return 'rroor';
}
或编辑您的App \ Exceptions \ Handler;
public function render($request, Exception $exception)
{
if ($exception instanceof \PhpImap\ConnectionException\ConnectionException) {
//add log
return 'error';
}
return parent::render($request, $exception);
}
答案 2 :(得分:0)
try {
$folder = Storage::disk('local')->getAdapter()->getPathPrefix();
$mailbox = new \PhpImap\Mailbox('{imap.gmail.com:993/imap/ssl}INBOX',
'xxxxx@gmail.com', 'xxxxxxxxxx', $folder);
}
catch(\Throwable $e) {
return 'error';
}