Может ли электронное письмо быть отправлено, но все равно выдается исключение? - PullRequest
0 голосов
/ 26 октября 2019

Итак, я хочу отправить электронное письмо и записать в базу данных, что оно было успешно отправлено, вот что я делаю:

  • Сначала попробуйте отправить электронное письмо пользователю, содержащемуинформация о продукте

  • Во-вторых, проверьте, было ли письмо успешно отправлено. Если да, то укажите в базе данных, что оно было успешно отправлено.

Но если отправка электронной почты не удалась (было сгенерировано исключение), я хочу перехватить это исключение и вернуть сообщение об ошибке.

Мой вопрос: Есть ли случаи, когда электронное письмо отправляется, но все равно выдает исключение?

Таким образом, код возвращает ошибку, думая, что электронное письмо не было отправлено ... но оно действительно было отправлено, и после этого было выдано исключение.

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

1 Ответ

1 голос
/ 26 октября 2019

Есть ли случаи, когда электронное письмо отправляется, но все равно выдает исключение?

Это зависит.

Если электронное письмо отправлено одному получателю, могут возникнуть следующие 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

...