0

ループで PHPMailer を介して電子メールを送信していますが、何らかの理由で受信サーバーによって受け入れられないアドレスに送信すると、PHPMailer は例外をスローし、スクリプトは終了します。スクリプトを続行して、この不適切なアドレスを別の方法で処理したいと考えています。

PHPMailer が例外で停止するのを回避する方法についてのアイデアはありますか?

try
{
    // prep
    $mail->IsSMTP();
    $mail->SMTPKeepAlive = true;
    $mail->SMTPDebug = 0;
    $mail->SetFrom(email_reply_adress, email_from_name);
    $mail->Host = email_smtp_host;
    $mail->SMTPAuth = true; 
    $mail->Username = email_username; 
    $mail->Password = email_password;
    $mail->IsHTML(true);
    $mail->AddReplyTo(email_reply_adress, email_from_name);

    //
    $query = "SELECT * FROM table WHERE sent = '0'";
    $result = @mysql_query($query);
    while($row = @mysql_fetch_array($result))
    {
        // receiver
        $mail->AddAddress($row['email']);

        // subject
        $mail->Subject = utf8_decode($row['subject']);

        // build mail
        $mail->Body = utf8_decode(stripslashes($row['content']));

        // send it                  
        if($mail->Send())
        {
            // stats
            $sent = "UPDATE table SET sentdate = now(), sent = '1' WHERE id = '".$row['id']."'";
            mysql_query($sent);
        }

        // clean up lists
        $mail->ClearAllRecipients();
    }
}
catch(phpmailerException $e)
{
    echo $e->errorMessage(); //Pretty error messages from PHPMailer
}
4

1 に答える 1

0

おそらく、例外をスローするコードを try..catch ブロックに配置したいと思うでしょう...コードがどのように見えるかについて多くの推測作業を行っていますが、これでアイデアが得られるはずです。

foreach($emails as $email){
      try{
          // do your work
      } catch (Exception $e){
          echo $email." not sent .. Error = ".$e->getMessage()."\n";
          // perform logging and so other meaningful stuff here. 
      }
}
于 2013-07-29T19:43:51.627 に答える