2011-03-08 6 views
0

PHPMailer를 작성하여 전자 메일을 보내려고합니다. 나는 mysqli_fetch_array와 while 루프를 사용하여 MySQL로부터 전자 메일 레코드를 추출하고 '$ to'라는 변수에 'email'데이터베이스 필드를 지정하고 PHPMailer $ mailer-> AddAddress ("[email protected]")로 전달했습니다. 요구.

스크립트는 작동하지만 데이터베이스에서 발견 된 첫 번째받는 사람에게만 전자 메일을 보냅니다. 내가 속이고있는 모든 단서? 고마워!

$from = '[email protected]'; 
    $from_name = 'My Name'; 
    $subject = $_POST['subject']; 
    $text = $_POST['elvismail']; 

$dbc = mysqli_connect('localhost', 'username', 'the_password', 'database_name') 
    or die('Error connecting to mysql'); 

$query = "SELECT * FROM email_list"; 
$result = mysqli_query($dbc, $query) 
    or die('Error querying database.'); 

    while ($row = mysqli_fetch_array($result)){ 
     $to = $row['email']; 
     $first_name = $row['first_name']; 
     $last_name = $row['last_name']; 
     $msg = "Dear $first_name $last_name,\n$text"; 
    } 


    require("PHPMailer_v5.1 2/class.phpmailer.php"); 
    $mailer = new PHPMailer(); 
    $mailer->IsSMTP(); 
    $mailer->Host = 'ssl://smtp.gmail.com:465'; 
    $mailer->SMTPAuth = TRUE; 
    $mailer->Username = '[email protected]'; // Sender's gmail address 
    $mailer->Password = 'the_password'; // Sender's gmail password 
    $mailer->From = "$from"; // Sender's email address 
    $mailer->FromName = "$from_name"; // senders name 
    $mailer->Body = "$msg"; 
    $mailer->Subject = "$subject"; 
    $mailer->AddAddress("$to"); // Recipient 
     if(!$mailer->Send()) 
    { 
     echo 'Email sent to:' . $to . '<br/ >'; 
     echo "Mailer Error: " . $mailer->ErrorInfo; 
    } 
    else 
    { 
     echo 'Email sent to:' . $to . '<br/ >'; 
    } 


    mysqli_close($dbc); 
+0

이 이곳에 답하고있다

$mailer->Send()를 호출하는 것을 잊지 마십시오. http://stackoverflow.com/questions/1770765/phpmailer-addaddress –

답변

1

while 루프를 너무 빨리 닫습니다. 에

변경을 : 루프, $to (다른 변수)의 끝에서

require("PHPMailer_v5.1 2/class.phpmailer.php"); 
while ($row = mysqli_fetch_array($result)){ 
    $to = $row['email']; 
    $first_name = $row['first_name']; 
    $last_name = $row['last_name']; 
    $msg = "Dear $first_name $last_name,\n$text"; 

    $mailer = new PHPMailer(); 
    $mailer->IsSMTP(); 
    $mailer->Host = 'ssl://smtp.gmail.com:465'; 
    $mailer->SMTPAuth = TRUE; 
    $mailer->Username = '[email protected]'; // Sender's gmail address 
    $mailer->Password = 'the_password'; // Sender's gmail password 
    $mailer->From = "$from"; // Sender's email address 
    $mailer->FromName = "$from_name"; // senders name 
    $mailer->Body = "$msg"; 
    $mailer->Subject = "$subject"; 
    $mailer->AddAddress("$to"); // Recipient 
    if(!$mailer->Send()) 
    { 
     echo 'Email sent to:' . $to . '<br/ >'; 
     echo "Mailer Error: " . $mailer->ErrorInfo; 
    } 
    else 
    { 
     echo 'Email sent to:' . $to . '<br/ >'; 
    } 


// Then close your while loop here 
} 

mysqli_close($dbc); 
+0

감사합니다. 나는 그것을 작동 시켰어. – ven

+0

당신을 진심으로 환영합니다. upvote 및 대답을 수락하는 것을 잊지 마십시오. 스택 오버 플로우에 대한 감사를 표시하는 방법입니다. – webbiedave

0

는 루프의 마지막 반복으로 설정됩니다.

코드를 조정하여 루프 위의 PHPMailer를 초기화 한 다음 루프 내에서 $mailer->AddAddress($to)을 호출하십시오. 루프가 완료되면 :)

+0

도움 주셔서 감사합니다! – ven

관련 문제