Использование переменной массива в $ mailer-> AddAddress ("user@domain.com");Скрипт PHPMailer - PullRequest
0 голосов
/ 09 марта 2011

Я пытаюсь написать PHPMailer для отправки электронной почты.Я использую цикл while с mysqli_fetch_array для извлечения записей электронной почты из MySQL и назначил поле базы данных «email» переменной с именем «$ to» и передаю ее PHPMailer $ mailer-> AddAddress («user@domain.com»)вызов.

Сценарий работает, но отправляет электронную почту только первому получателю, найденному в базе данных.Любые подсказки о том, где я облажался?THX!

  $from = 'myemail@gmail.com';
  $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 = 'myemail@gmail.com';  // 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);

Ответы [ 3 ]

1 голос
/ 09 марта 2011

Вы закрываете цикл while слишком рано.

Измените его на:

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 = 'myemail@gmail.com';  // 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 голосов
/ 09 июля 2018

По-моему, я сделал это:

$to = $row['email'];

$mailer->AddAddress("{$to}");  // Recipient
0 голосов
/ 09 марта 2011

В конце вашего цикла, $to (и другие переменные) будут установлены на последнюю итерацию цикла.

Настройте свой код так, чтобы вы инициализировали PHPMailer над циклом, а затем вызываете $mailer->AddAddress($to) в вашем цикле.

Не забудьте позвонить $mailer->Send() после завершения вашего цикла:)

...