2009-02-03 44 views
0

我有一個腳本,似乎以前工作,但不再。從php腳本發送郵件,給我錯誤

腳本運行後它顯示這樣的信息:503-不可路由的地址503有效RCPT:

陣列([0] =>不可路由的地址[1] => - 所有的RCPT命令用該錯誤拒絕命令必須在DATA之前)Array([0] => Unrouteable address [1] => - 所有RCPT命令都被拒絕並出現此錯誤:503-無路由地址503有效的RCPT命令必須先於DATA)Array([0] => Unrouteable address [1] => - 所有RCPT命令均被拒絕並顯示此錯誤:503-Unrouteable地址503有效的RCPT命令必須在DATA之前)

function emailUser($table, $subject, $message) { 
    $query = "SELECT * FROM $table"; 
    $result=mysql_query($query); 

    while($row = mysql_fetch_array($result)) { 
     $i = 0; 

     while($i <= 0) { 
      $to = $row['email']; 
      $to_all .= '<li>'.$row['email'].'</li>'; 
      $mail = new htmlMimeMail(); 
      $mail->setHTML($message); 
      $mail->setSubject($subject); 
      $mail->setSMTPParams('mail.site.net', 25, 'site.net'); 
      $mail->setReturnPath("[email protected]"); 
      $mail->setFrom("[email protected]"); 

      $mail_result = $mail->send(array($to), 'smtp'); 

      if (!$mail_result) { 
        print_r($mail->errors); 
        //failure 
       } else { 
        //success 
       } 
      $i++; 
     } 
    } 
    print '<h3>Mail successuly sent to:</h3>'; 
    print '<ul>'.$to_all.'</ul>'; 
} 

有更好的腳本可以使用嗎?也許電子郵件服務器已更改?

任何幫助表示讚賞。

+0

首先想到的是檢查電子郵件地址的有效性。但是,除此之外,內部while循環(「$ i <= 0」)的目的是什麼?它似乎完全是虛假的,並且該循環只會執行一次。 – 2009-02-03 03:33:02

回答

1

嘗試重新排序如下(setHTML爲末):

$mail->setSubject($subject); 
$mail->setSMTPParams('mail.site.net', 25, 'site.net'); 
$mail->setReturnPath("[email protected]"); 
$mail->setFrom("[email protected]"); 
$mail->setHTML($message); 
+0

做了這項工作。但我確實收到了超時錯誤,但電子郵件通過了。也許我應該更好地發送羣發郵件。 – Brad 2009-02-03 03:35:55

+0

有趣。我感到奇怪的是,爭論的順序會導致問題。 我已經使用/目前使用PEAR:Mail,它對我來說算得很好。 – 2009-02-03 04:04:04

1

你肯定$行[「電子郵件」]是正確的列?

該錯誤似乎表明,該函數正在接收的收件人列表是可疑的。

0

什麼是您正在使用的這個htmlMimeMail類?你自己寫了嗎?

這是PHP的好郵件發送者庫:SwiftMailer

至於爲什麼它用來工作,現在沒有,這是可能的郵件服務器的配置改變的原因。它是你的郵件服務器嗎?或者它是你的ISP的?我懷疑它由於一些垃圾郵件防範機制而改變了它的行爲。它可能會拒絕SMTP RCPT收件人,因爲您尚未使用某種方式(如SMTP之前的POP或已驗證的SMTP)首先登錄。