如何在 Zend 框架 2 中邮件传输失败时返回 false


how to return false when mail transport failed in zend framework 2?

如果邮件发送失败,我正在尝试返回带有 json fail消息,这是我的代码:

$transport = new SmtpTransport();
            $options   = new SmtpOptions(array(
                    'name'              => 'localhost',
                    'host'              => 'localhost',
                    'connection_class'  => 'login',
                    'connection_config' => array(
                            'username' => 'cscsacsac',
                            'password' => 'csdca',
                            //'ssl'=>'ssl',
                            //'port' => '465',
                    ),
            ));
            $transport->setOptions($options);
            $sent = true;
            try {
                $transport->send($mail);
            }
            catch ('Zend'Mail'Transport'Exception'DomainException $e) {
                $sent = false;
            }
            if($sent){
                echo "success";
                exit;
            }
            elseif(!$sent){
                echo "fail";
                exit;
            }

这是 Ajax:

$.ajax({
          type: "POST",
          url: '<?php echo MAIN_URL?>cases',
          data: { name: name, email: email, mobile: mobile, address: address, compliant: compliant },
          success:function(data){
            if(data =='success'){
                $('.casesMailResponse').css({'color':'#00917D'});
                $('.casesMailResponse').html('Your case has been sent successfully.');
            }
            else if(data == 'fail'){
                $('.casesMailResponse').css({'color':'#F6565B'});
                $('.casesMailResponse').html('Some errors occurred, please try again.');
            }
          },
        });

但是如果失败,我因Incorrect authentication data而收到内部服务器错误,因此不显示失败消息

您只捕获Zend'Mail'Transport'Exception'DomainException,但 SMTP 传输适配器也可以引发其他异常。例如send方法中,它可以抛出Zend'Mail'Transport'Exception'RuntimeException

我建议捕获邮件包的异常接口:

    $sent = true;
    try {
        $transport->send($mail);
    } catch ('Zend'Mail'Transport'Exception'ExceptionInterface $e) {
        $sent = false;
    }

你能试试:

 }
 catch ('Zend'Mail'Transport'Exception'DomainException $e) {
    $sent = false;
 } catch (Exception $e) {
    $sent = false;
}

只是一个猜测....