0

特定のデータベースに存在するすべての電子メールIDに電子メールを送信する大量メールスクリプトに取り組んでいます。しかし、いくつかの問題があります。

次のデータベースがあるように:

id   email     link
1    a@bc.com  bc.com
2    b@cd.com  cd.com

そして、メールの内容が「このスクリプトをテストしています」であるとします。

スクリプトは電子メールを a@bc.com に完全に送信しますが、電子メールを 2 回目に送信すると、つまり b@cd.com にコンテンツが 2 倍になります。

つまり、2 番目の受信者は次のような電子メールを受け取ります。

このスクリプトのテスト

このスクリプトのテスト

3 番目の受信者は内容が 3 回繰り返される電子メールを受信し、4 番目の受信者はそれを 4 回受信するというように繰り返されます。

スクリプトは、データベースの電子メール フィールドから電子メール アドレスを取得し、電子メールを送信します。

私のコード:

<?
  include "header.php"; 
  include "config2.php"; 

$subject="Massmail";
$headers .= "Content-type:text/html;charset=iso-8859-1" . "\r\n";
mysql_connect($server, $db_user, $db_pass)
      or die ("Database CONNECT Error"); 
        $resultquery = mysql_db_query($database, "select * from $table");       
    while ($query = mysql_fetch_array($resultquery)) 
    { 
        $mailto=$query[$table_email];
        $domain=$query[$table_link];
$domain2 = str_replace(array('http://','HTTP://','Http://'), '',$domain);
$handle = fopen("http://$domain2","r") or die("Unable to open link ( $domain ). <a href='javascript:history.go(-1);'>Go back</a> and please try again  ");
$contents = '';
while (!feof($handle)) {
$contents .= fread($handle, 8192);
$contents = str_replace('window.location = "/abc.html"','window.location = ""',$contents);
$contents = mb_convert_encoding($contents, "HTML-ENTITIES", "auto");
}
$i = md5(uniqid(rand(), true)) . '.' . html;
$fh = fopen("/home/host/public_html/content/$i", "w");
fwrite($fh, $contents);
fclose($fh);
$filename = '/files/$i';
$message1 .= "Testing Mail Script Version 2";
        mail($mailto, $subject, $message1, $headers, "-f" . 'noreply@domain.com');
        echo 'Mail sent to '.$mailto.'<br>'; 
        sleep($seconds);
    }
  include "footer.php";    
  ?>

送信する必要があるメールをエコーし​​ようとしたところ、次のようになりました。

To: a@bc.com

Subject: Massmail

Message:
Testing mail script
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
to: b@cd.com

Subject: Massmail

Message:
Testing mail scriptTesting mail script
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

どうぞよろしくお願いいたします。前もって感謝します

4

4 に答える 4

0

同意した。ループが正しく機能していないように聞こえますか? 完全なコードを投稿できない場合は、問題を診断するために抽象化を投稿してみてください。

できない場合は、任意のカウンターではなく、所有しているメールアドレスの数に基づいてループすることを検討します。それはあなたを助けるかもしれません。

于 2013-05-07T01:18:38.693 に答える
0

これがあなたのテーブルだとします。ID、メール、リンク、メッセージは次のように構成されています。

id     email         message 
1    a@test.com   hello, how are you doing..
2    b@test.com   hey, dude this is me..
3    c@test.com   we are sending you this...

ここで、100レコードがあるとします。私がすることは(ex$resultからすべての結果を返すmysql配列であると仮定します)mysqlSELECT * FROM mail...

私は試してみます:

for($i=0; $i <= count($result); $i++){

     $send = mail($result['to'], $result['subject'],
                  $result['message'], $result['headers']);

     if(!$send){
       echo 'e-mail, sending has stopped';
       break;
        }
    else{
        echo 'all e-mails are sent successfully'; }
     }
于 2013-05-07T01:25:26.130 に答える
0

気にしないで、私はそれを修正しました。@Pirionの投稿が役に立ちました。私が変更され

$message1 .= "Testing Mail Script Version 2";

$message = "Testing Mail Script Version 2";

そして、すべてが完璧に機能しました。私を助けてくれて本当にありがとう。

于 2013-05-07T11:41:17.313 に答える