0

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つのメールがあるとしましょう)、最初のメールは通常どおり送信されますが、2番目のメールは二重化された$body変数で送信されます。つまり、$body変数が二重化されて送信されます。

修正: 完了しました。追加したばかりで、$body = "";今では完璧に動作します!

4

3 に答える 3

1

クエリに a"SELECT DISTINCT"を追加するだけで、データベースに問題が発生することはなくなります。

于 2009-11-12T13:14:31.657 に答える
1

データベース内のデータが重複している可能性が高いと思います。

また、POST 配列の検証が行われていない (またはまったく検証されていない) ことも心配しています。

これを見る価値があるかもしれません:

$_POST 変数の消去

更新:クエリで DISTINCT を使用することはできますが、最初に重複がどのように発生したかを疑問視し、それを別の問題として検討します。

于 2009-11-12T13:15:00.860 に答える