0

PHPMailer を使用している一部の人のように、私はこの問題を抱えており、インターネット上で解決策を見つけることができません。問題は、ループ (while、foreach) に設定すると、PHPMailer が重複 (2 つ以上) を送信することです。ループに問題がないことを確認しましたが、重複を送信し続けます。

よりシンプルに見えるようにした後のコードは次のとおりです。

<?
require("PHPMailer/class.phpmailer.php");
$select = mysql_query("SELECT * FROM `pm_mailmembers` WHERE `mm_interval`='2' AND   mm_blocked = 0") or die(mysql_error());
$mail = new PHPMailer();
$mail->SingleTo = true;
$mail->CharSet = "UTF-8";
$mail->Subject = "Fiscanet Nieuws";
$sendContent = "<p>This is test mail</p>";
$r_receivers = array("John"=>"john@mail.com","Mary"=>"mary@mail.com","Rob"=>"rob@mail.com");
foreach($r_receivers as $name=>$email){
    $mail->SetFrom('no-reply@yoursite.com', "Yoursite");
    $mail->MsgHTML($sendContent);
    $mail->AddAddress($email, $name);
    if($mail->Send())
        echo "Sent to: ".$email."<br/>";
    else
        echo "Not sent to: ".$email.", reason: ".$mail->ErrorInfo."<br/>";
    $mail->ClearAddresses();
}
?>

ループ内で mail->addaddress をリセットする必要があると思いますが、mail->clearaddresses は役に立ちません。また、3 つのメールはすべて、常に同じメールを受信します。だから、全員が2、3通のメールを受け取ります。

誰かここで私を助けてくれませんか?? ありがとう。アヨク


問題はさらに複雑になります...コードを単純なmail()に変更しようとしましたが、重複を送信し続けます。原因は何ですか?サーバーの設定の問題ですか??

これを mysite.com のサブドメイン、たとえば sub.mysite.com で行いました。Mysite.com と sub.mysite.com は別のサーバーにあります。それが原因でしょうか?

ありがとう、アヨク

4

3 に答える 3

1

私はあなたが投稿したコードに取り組んできました。コードに問題はないと思います。

ページを更新するたびにメールが送信されると思います。

そのため、メールコードの状態を維持してから、受信するメールの数を確認してください。この回答がお役に立てば幸いです。

于 2012-06-18T13:30:26.940 に答える
0

ところで、コンテンツに時間を設定しました。複製は最初の 6 分後に送信されます。注文番号も設定しましたが、重複したものはすべて同じ番号です。

<?php
require("PHPMailer/class.phpmailer.php");
$mail = new PHPMailer();
$mail->SingleTo = true;
$mail->CharSet = "UTF-8";
$mail->Subject = "Fiscanet Nieuws";
$r_receivers = array("John"=>"john@mail.com","Mary"=>"mary@mail.com","Rob"=>"rob@mail.com");
    $i = 1;
foreach($r_receivers as $name=>$email){
    $mail->SetFrom('no-reply@yoursite.com', "Yoursite");
    $mail->MsgHTML($sendContent);
    $mail->AddAddress($email, $name);
        $sendContent = "<p>This is test mail number ".$i." sent at ".date('H:i:s')."</p>";
    if($mail->Send())
        echo "Sent to: ".$email."<br/>";
    else
        echo "Not sent to: ".$email.", reason: ".$mail->ErrorInfo."<br/>";
    $mail->ClearAddresses();
            $i++;
}
?>
于 2012-06-19T14:07:48.910 に答える
0

試す

$mail->ClearAllRecipients();
于 2016-08-25T14:37:44.373 に答える