使用swiftmailer发送多封电子邮件时,如何绕过失败的电子邮件?

布莱恩·哥提尔

我在MySQL数据库中有一个电子邮件队列,通过cron我每分钟处理X条未发送的电子邮件。我的问题是,如果任何特定的电子邮件失败,它将停止执行其余电子邮件。在一种情况下,这是由于SMTP身份验证失败而导致的,由于发送失败电子邮件的尝试不断发生,电子邮件处理基本上停止了。swiftmailer还有其他我应该知道的失败方法吗?

我想知道我在这里可以做些什么来使此循环更安全?如果任何一封电子邮件失败,我想用错误代码(我的或swiftmailers)标记数据库中的记录。

Swiftmailer不是我们发送电子邮件的唯一方法,以下方法是驱动程序的一部分。有什么解决方案?

public function process_queue()
{
    $result = [... a few mail queue records ...];

    foreach( $result as $params )
    {
        if( ! class_exists( 'Swift', FALSE ) )
        {
            require '/libraries/Mail/swiftmailer/lib/swift_required.php';
        }

        // Prepare transport for sending mail through SMTP
        if( $params['protocol'] == 'smtp' )
        {
            $transport = Swift_SmtpTransport::newInstance( $params['smtp_host'], $params['smtp_port'] )
                ->setUsername( $params['smtp_user'] )
                ->setPassword( $params['smtp_pass'] );
        }

        // Prepare transport for simple mail sending
        else
        {
            $transport = Swift_MailTransport::newInstance();
        }

        // Prepare swiftmailer mailer object
        $mailer = Swift_Mailer::newInstance( $transport );

        // Get a new message instance, and apply its attributes
        $message = Swift_Message::newInstance()
            ->setSubject( $params['subject'] )
            ->setFrom( [ $params['from_email'] => $params['from_name'] ] )
            ->setTo( $params['to'] )
            ->setBody( $params['body'], $params['mailtype'] );

        $mailer->send( $message );
    }
}
特里斯坦

您可以将send放在一个try-catch块中,并在循环完成后处理所有异常。

try {
    $mailer->send($message);
} catch(Exception $exception) {
    // do something with $exception that contains the error message
}

或者,您可以将第二个参数添加到send并利用失败。

// Pass a variable name to the send() method
if (!$mailer->send($message, $failures))
{
  // do something with $failures that contains the error message
}

另外,如果setTo由于无效的电子邮件地址而失败,Swift将返回一个错误,因此,不用链接来构建消息,您可以分别执行每种方法并捕获/处理任何错误。

try {
    $message->setTo($params['to']);
} catch(Swift_RfcComplianceException $e) {
    echo "The email ".$params['to']." seems invalid";
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用Codeigniter使用cc发送多封电子邮件?

来自分类Dev

从Excel发送多封电子邮件

来自分类Dev

如何使用swiftmailer获取电子邮件队列ID?

来自分类Dev

在GAE中连续发送多封电子邮件

来自分类Dev

使用Swiftmailer批量发送电子邮件

来自分类Dev

如何在R中发送读取csv的电子邮件并一次发送多封电子邮件?

来自分类Dev

使用Namecheap电子邮件发送Nodemailer电子邮件

来自分类Dev

如何使用CodeIgniter中的循环发送多封电子邮件?

来自分类Dev

PHPMailer发送带有循环的多封电子邮件

来自分类Dev

使用Google脚本发送到多封电子邮件

来自分类Dev

使用Symfony Messenger异步发送电子邮件时如何翻译电子邮件?

来自分类Dev

发送电子邮件/ swiftmailer时图像未显示

来自分类Dev

NET Core Mailkit无法发送多封电子邮件

来自分类Dev

使用python发送多封电子邮件

来自分类Dev

使用codeigniter发送多封电子邮件

来自分类Dev

Python / Django EmailMultiAlternatives发送多封电子邮件

来自分类Dev

阻止用户发送多封电子邮件

来自分类Dev

从数据库查询发送多封电子邮件

来自分类Dev

发送多封电子邮件时smtplib断开连接

来自分类Dev

PB电子邮件,不想发送多封电子邮件-phpmailer

来自分类Dev

使用php邮件将消息发送到多封电子邮件

来自分类Dev

使用字典提取电子邮件地址。某些键有多封电子邮件,如何发送到所有电子邮件?

来自分类Dev

PHPMailer发送多封电子邮件失败

来自分类Dev

如何在R中发送读取csv的电子邮件并一次发送多封电子邮件?

来自分类Dev

如何使用CodeIgniter中的循环发送多封电子邮件?

来自分类Dev

如何使用 swiftmailer 发送电子邮件 - Symfony 3

来自分类Dev

如何使用 PHPMailer 从数据库发送多封电子邮件作为抄送?

来自分类Dev

如何绕过 DMARC 使用用户的任何电子邮件发送电子邮件

来自分类Dev

多封电子邮件的swiftmailer电子邮件错误

Related 相关文章

  1. 1

    如何使用Codeigniter使用cc发送多封电子邮件?

  2. 2

    从Excel发送多封电子邮件

  3. 3

    如何使用swiftmailer获取电子邮件队列ID?

  4. 4

    在GAE中连续发送多封电子邮件

  5. 5

    使用Swiftmailer批量发送电子邮件

  6. 6

    如何在R中发送读取csv的电子邮件并一次发送多封电子邮件?

  7. 7

    使用Namecheap电子邮件发送Nodemailer电子邮件

  8. 8

    如何使用CodeIgniter中的循环发送多封电子邮件?

  9. 9

    PHPMailer发送带有循环的多封电子邮件

  10. 10

    使用Google脚本发送到多封电子邮件

  11. 11

    使用Symfony Messenger异步发送电子邮件时如何翻译电子邮件?

  12. 12

    发送电子邮件/ swiftmailer时图像未显示

  13. 13

    NET Core Mailkit无法发送多封电子邮件

  14. 14

    使用python发送多封电子邮件

  15. 15

    使用codeigniter发送多封电子邮件

  16. 16

    Python / Django EmailMultiAlternatives发送多封电子邮件

  17. 17

    阻止用户发送多封电子邮件

  18. 18

    从数据库查询发送多封电子邮件

  19. 19

    发送多封电子邮件时smtplib断开连接

  20. 20

    PB电子邮件,不想发送多封电子邮件-phpmailer

  21. 21

    使用php邮件将消息发送到多封电子邮件

  22. 22

    使用字典提取电子邮件地址。某些键有多封电子邮件,如何发送到所有电子邮件?

  23. 23

    PHPMailer发送多封电子邮件失败

  24. 24

    如何在R中发送读取csv的电子邮件并一次发送多封电子邮件?

  25. 25

    如何使用CodeIgniter中的循环发送多封电子邮件?

  26. 26

    如何使用 swiftmailer 发送电子邮件 - Symfony 3

  27. 27

    如何使用 PHPMailer 从数据库发送多封电子邮件作为抄送?

  28. 28

    如何绕过 DMARC 使用用户的任何电子邮件发送电子邮件

  29. 29

    多封电子邮件的swiftmailer电子邮件错误

热门标签

归档