可以发送邮件但仍然抛出异常吗?

Could email be sent but still throws an exception?

所以我想发送一封电子邮件并在数据库中记录它已成功发送,我是这样做的:

但如果发送电子邮件失败(抛出异常),我想捕获该异常并return一条错误消息。

我的问题是: 是否存在邮件已发送但仍然抛出异常的情况?

因此,代码 return 认为电子邮件未发送的错误.. 但它实际上已发送,之后抛出异常。

    // pseudo code      
    try{
        $is_sent = send_email();
        if($is_sent){
            $db->email_was_sent();
        }
    }catch(Exception $e){
        return 'Email was not sent. An exception';
    }

Is there a case that the email gets sent but still throws an exception?

视情况而定。

如果为单个收件人发送电子邮件,则可能导致以下任何 3 种情况:

  • 电子邮件已发送给收件人
  • 电子邮件未能发送给收件人
  • 出现异常

对于这种情况,这将是 SwiftMailer 电子邮件客户端的未记录行为 发送电子邮件但仍然抛出异常。

如果将电子邮件发送给多个收件人,则可能会导致以下任何 3 种情况:

  • 电子邮件已发送给所有收件人
  • 电子邮件未能发送给一位或多位收件人
  • 出现异常

对于另一种情况,电子邮件可以发送给某些收件人,但仍会引发异常。

https://swiftmailer.symfony.com/docs/sending.html#using-the-send-method

AbstractSmtpTransport::send() 表示电子邮件可能无法发送给一个或多个收件人。 https://github.com/swiftmailer/swiftmailer/blob/v6.2.1/lib/classes/Swift/Transport/AbstractSmtpTransport.php#L178