2013-07-29 62 views
0

我通過PHPMailer在循環中發送電子郵件,但如果由於某種原因,我發送到接收服務器不接受的地址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 
} 
+2

顯示一些代碼,我們可以幫助您 – Orangepill

+0

更新了代碼。 – adp

回答

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. 
     } 
} 
+0

我已經準備好了。 – adp

+0

@adp我從你沒有發佈的代碼中無法看出 – Orangepill

+0

對不起。我的不好:) – adp