2017-03-14 8 views
-1

私は自分のサーバーからメールを送信するためにphpemailerを使用しようとしています。一つのことを除いて正常に動作しています:複数のメールがphpemailerで送信されます

<?php 

$serverName = "xxx.x.x.xxx"; //serverName\instanceName 
$connectionInfo = array("Database"=>"test", "UID"=>"xxxxxx", "PWD"=>"xxxxxx"); 
$conn = sqlsrv_connect($serverName, $connectionInfo); 

if($conn) { 
    echo "Connection established.<br />"; 
}else{ 
    echo "Connection could not be established.<br />"; 
    die(print_r(sqlsrv_errors(), true)); 
} 


$sqll=sqlsrv_query($conn,"select bla from table"); 


//while($row=sqlsrv_fetch_array($sql)) 

// { 

    // $cnp=substr($row['bla'],-6); 

//  echo $bla; 
//  echo "<br>"; 

// } 
$con=mysqli_connect("localhost","root","","database"); 


$sql=mysqli_query($con,"select * from table"); 



if(isset($_POST['submitted'])){ 


    require 'phpmailer/PHPMailerAutoload.php'; 
//Create a new PHPMailer instance 
$mail = new PHPMailer; 
//Tell PHPMailer to use SMTP 
$mail->isSMTP(); 
//Enable SMTP debugging 
// 0 = off (for production use) 
// 1 = client messages 
// 2 = client and server messages 
$mail->SMTPDebug = 2; 
$mail->SMTPAuth = true; 
//Ask for HTML-friendly debug output 
$mail->Debugoutput = 'html'; 
//Set the hostname of the mail server 
$mail->Host = "xxxxxx"; 
//Set the SMTP port number - likely to be 25, 465 or 587 
$mail->Port = xxx; 

$mail->SMTPSecure = 'ssl'; 

//Whether to use SMTP authentication 
$mail->SMTPAuth = true; 
//Username to use for SMTP authentication 
$mail->Username = "xxxxxx"; 
//Password to use for SMTP authentication 
$mail->Password = "xxxxxx"; 
//Set who the message is to be sent from 
$mail->setFrom('xxxxxx'); 
//Set an alternative reply-to address 
$mail->addReplyTo('xxxxxx'); 
//Set who the message is to be sent to 



while($row=mysqli_fetch_array($sql)) 

    { 
     echo $row['bla']; 
     echo "<br>"; 


     $mail->AddBCC($row['bla2']); 



//Set the subject line 
$mail->Subject = 'text text'; 
//Read an HTML message body from an external file, convert referenced images to embedded, 
//convert HTML into a basic plain-text alternative body 

//Replace the plain text body with one created manually 
$mail->Body = "test test<br>link:<a href='http://localhost:8181/?cod=".$bla."'>click</a>"; 



$mail->IsHTML(true); 




$mail->send()) { 
     echo 'Message could not be sent.'; 
     echo 'Mailer Error: ' . $mail->ErrorInfo; 
    } else { 
     echo 'Message has been sent'; 
    } 


    } 


} 
?> 

<form name="contact" method="post" action=""> 

<input type="submit" name="submitted" value="Submit"> 
</form> 

問題がある:私は私のデータベースに持っているすべての電子メールへの別のリンクを電子メールで送信しようとしています。

$mail->AddBCC($row['email']); 



//Set the subject line 
$mail->Subject = 'text text'; 
//Read an HTML message body from an external file, convert referenced images to embedded, 
//convert HTML into a basic plain-text alternative body 

//Replace the plain text body with one created manually 
$mail->Body = "test test<br>link:<a href='http://localhost:8181/?cod=".$bla."'>click</a>"; 



$mail->IsHTML(true); 




$mail->send()) { 
     echo 'Message could not be sent.'; 
     echo 'Mailer Error: ' . $mail->ErrorInfo; 
    } else { 
     echo 'Message has been sent'; 
    } 


    } 

電子メールが送信されているが、例えば、私は2回送信されるEMAIL2する、電子メールを3回送信されemail1にその後、私のテーブルで3通の電子メールを持っている場合:私はしばらくの間、この部分を入れていましたemail3が1回送信されます。何故ですか?なぜ私のテーブルの最初の電子メールに3回電子メールが送信されますか?

+0

これはあなたの質問に答えるものではありませんが、上記のスクリプトに含まれている実際のメールの資格情報であるとは言いませんか?そして、なぜあなたは私のSQLサーバーとMySQLに接続していますか? –

+0

'$ mail-> addBCC()'の代わりに '$ mail-> setAddress($ row ['email'])'を使用してください。 – DrKey

+0

ローカルホストサーバxamppからのダミーデータです。 – user1147188

答えて

0

私はBCCに電子メールを追加しているため、最初のループでは最初の電子メールに送信し、2番目の電子メールには最初の電子メールに送信し、新しく追加された2番目のメールアドレスなど...

新しいメールを追加する前にbccをきれいにする必要があります。

0

コール$mail->ClearBCCs()$mail->send()

は、BCCの配列に割り当てられたすべての受信者をクリアします。 voidを返します。

- または -

は、あなたが$mail->send()ループが送信する後に、すべてのBCCが一度にメールを取り上げ移動します。 (メール・サーバーに応じてバッチでこれを実行する必要があるかもしれません)

0

私は電子メールを送信した後、私は次の行を追加しました:

一つだけ送ら
$mail->ClearAllRecipients(); 

そして今、電子メールが送信されると時間。ありがとうございます!

関連する問題