簡體   English   中英

在while循環中發送電子郵件

[英]Sending email in while loop

當我嘗試使用PHPMailer從while循環發送電子郵件時,有時會向每個收件人發送2份,有時是3份相同電子郵件的副本(就像隨機的一樣)。

這是我的代碼。 您認為它有問題嗎?

 $list = $_POST['list'];
    $items = rtrim($_POST['items'],",");
    $query = "SELECT * FROM `mail` WHERE `ID` IN ($items)";
    $result = mysql_query($query);
    $from = "donotreply@mysite.net";
    $fromname = "mysite";

    $mail = new PHPMailer(true); 

    $mail->IsSendmail(); 

    $mail->From       = $from;
    $mail->FromName   = $fromname;

    $mail->Subject  = "Your subscription was confirmed";

while ($row = mysql_fetch_array ($result))
{
    // HTML body
    $body .= "<p>Hi ". $row['name'] ." <br /><br />";
    $body .= "Your subscription request to " . $l_name ."'s list was confirmed.<br /><br />";
    $body .= "Thank You !<br /><br />";

    // Plain text body (for mail clients that cannot read HTML)
    $text_body  = "To view the message, please use an HTML compatible email viewer!";

    $mail->Body    = $body;
    $mail->AltBody = $text_body;
    $mail->AddAddress($row['email']);


    $mail->Send();
    $mail->ClearAddresses();

}

你認為我應該把那個mail->send(); 走出while循環並從數組中獲取所有電子郵件?

還是您認為這是MySQL查詢的問題?

編輯:我檢查了數據庫,關於數據庫沒有問題,但是我發現(讓我說數組中有2封郵件)它正常發送第一封電子郵件,但是第二封郵件帶有$ body變量,這意味着它發送了$ body變量。

FIX:嘿,我完成了,我只添加了$body = ""; 現在可以完美使用!

只需在查詢中輸入"SELECT DISTINCT"就不會再出現數據庫問題。

我認為很可能是數據庫中的重復數據。

我也擔心在POST數組上缺少驗證(或根本沒有驗證)。

也許值得您關注一下:

清理$ _POST變量

更新:雖然您可以在查詢上使用DISTINCT,但我會質疑重復項是如何首先到達那里的,並將其視為單獨的問題。

您在問題的結尾提到了修復程序,但這就是為什么會有所不同的原因:

.=運算符會附加到現有值上,而=覆蓋它。 在第一次迭代的末尾和第二次迭代的開始, $body包含電子郵件正文,在第二次迭代期間,您將追加到現有值。 每次執行循環時,您都會在電子郵件末尾添加另一個副本。 如您所說,設置$body = ""解決此問題,因為它會清空電子郵件的正文。

解決該問題的另一種方法是進行第一個賦值=而不是.=

while ($row = mysql_fetch_array ($result))
{
  // HTML body
  $body = "<p>Hi ". $row['name'] ." <br /><br />"; // This line only has '='
  $body .= "Your subscription request to " . $l_name ."'s list was confirmed.<br /><br />";
  $body .= "Thank You !<br /><br />";

  // etc...
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM