2017-01-10 6 views
1

Я использую почтовую программу php для запуска почты. Его работает отлично. Но я дал от 2 до 5 получателей, он отправляет почту только одному получателю. В будущем, я должен вызвать почту почти 100 получателей .. я поделился мой код ниже .. Пожалуйста, проверьте его ..PHP Mailer Несколько получателей

require 'phpmailer/PHPMailerAutoload.php'; 

    $mail = new PHPMailer; 

    //$mail->SMTPDebug = 3;        // Enable verbose debug output 

    $mail->isSMTP();          // Set mailer to use SMTP 
    $mail->Host = 'smtp.gmail.com'; // Specify main and backup SMTP servers 
    $mail->SMTPAuth = true;        // Enable SMTP authentication 
    $mail->Username = 'karthick****@gmail.com';     // SMTP username 
    $mail->Password = '********';       // SMTP password 
    $mail->SMTPSecure = 'tls';       // Enable TLS encryption, `ssl` also accepted 
    $mail->Port = 587;         // TCP port to connect to 

    $mail->setFrom('karth*******@gmail.com', 'A**n'); 

    $addresses = explode(',',$emailM); 
    foreach ($addresses as $address) { 
     $mail->AddAddress($address); 
    } 


$mail->isHTML(true);         

$mail->Subject = 'Need for '.$keyword.''; 
$mail->Body = 'Hi,The Message'; 


if(!$mail->send()) { 
    echo 'Message could not be sent.'; 
    echo 'Mailer Error: ' . $mail->ErrorInfo; 
} else { 
    echo 'Qoute has been sent to all the Manufacturers'; 
    echo "$address"; 

} 
+1

ли адреса электронной почты в '$ адресов Действительно ли? Вы должны хотя бы добавить сообщение отладки в каждом цикле foreach-loop. – Raptor

+0

Вы уверены, что это только отправка одной? Вы эхом отдаете «$ address» в конце, который будет содержать только последний адрес, который вы добавили, но сообщение все равно будет отправлено всем им (хотя вы должны проверить возвращаемое значение 'addAddress()', чтобы быть уверен, что он работает). – Synchro

+0

Я не думаю, что вы поправитесь с этим в правильном направлении - учитывая текст «Все производители» в конце, я очень сомневаюсь, что вы действительно хотите добавить их все в одно и то же сообщение (где все они будут см. адреса друг друга). Вы должны отправить отдельное сообщение каждому из них. См. [Пример списка рассылки, предоставленный с помощью PHPMailer] (https://github.com/PHPMailer/PHPMailer/blob/master/examples/mailing_list.phps) для того, как это сделать эффективно. – Synchro

ответ

-1

Основная идея заключается в том, что делают другое соединение (объект) для каждого ваш почтовый адрес, например, ниже , если у вас не так много адресов в вашем массиве.

require 'phpmailer/PHPMailerAutoload.php'; 

$addresses = explode(',',$emailM); 
    foreach ($addresses as $address) { 
    $mail = new PHPMailer; 

    //$mail->SMTPDebug = 3;        // Enable verbose debug output 

    $mail->isSMTP();          // Set mailer to use SMTP 
    $mail->Host = 'smtp.gmail.com'; // Specify main and backup SMTP servers 
    $mail->SMTPAuth = true;        // Enable SMTP authentication 
    $mail->Username = 'karthick****@gmail.com';     // SMTP username 
    $mail->Password = '********';       // SMTP password 
    $mail->SMTPSecure = 'tls';       // Enable TLS encryption, `ssl` also accepted 
    $mail->Port = 587;         // TCP port to connect to 

    $mail->setFrom('karth*******@gmail.com', 'A**n'); 


     $mail->AddAddress($address); 


$mail->isHTML(true);         

$mail->Subject = 'Need for '.$keyword.''; 
$mail->Body = 'Hi,The Message'; 


if(!$mail->send()) { 
    echo 'Message could not be sent.'; 
    echo 'Mailer Error: ' . $mail->ErrorInfo; 
} else { 
    echo 'Qoute has been sent to all the Manufacturers'; 
    echo "$address"; 

} 

UPDATE:

Вторая идея заключается в том, что вы можете удалить получателям каждый раз, и добавить новый, а затем отправить, как показано ниже

require 'phpmailer/PHPMailerAutoload.php'; 

    $mail = new PHPMailer; 

    //$mail->SMTPDebug = 3;        // Enable verbose debug output 

    $mail->isSMTP();          // Set mailer to use SMTP 
    $mail->Host = 'smtp.gmail.com'; // Specify main and backup SMTP servers 
    $mail->SMTPAuth = true;        // Enable SMTP authentication 
    $mail->Username = 'karthick****@gmail.com';     // SMTP username 
    $mail->Password = '********';       // SMTP password 
    $mail->SMTPSecure = 'tls';       // Enable TLS encryption, `ssl` also accepted 
    $mail->Port = 587;         // TCP port to connect to 

    $mail->setFrom('karth*******@gmail.com', 'A**n'); 

    $addresses = explode(',',$emailM); 
    foreach ($addresses as $address) { 

     // for clear last recipients 

     $mail->ClearAllRecipients() 


     $mail->AddAddress($address); 


     $mail->isHTML(true);         

      $mail->Subject = 'Need for '.$keyword.''; 
      $mail->Body = 'Hi,The Message'; 


     if(!$mail->send()) { 
      echo 'Message could not be sent.'; 
      echo 'Mailer Error: ' . $mail->ErrorInfo; 
     } else { 
      echo 'Qoute has been sent to all the Manufacturers'; 
      echo "$address"; 

     } 

} 
+0

Не делайте этого. Он будет работать, но он медленный, расточительный и неэффективный. – Synchro

+0

Нет, неправда. PHP Mailer может одновременно поддерживать несколько получателей. – Raptor

+0

Я знал это. но когда вы постоянно добавляете адреса, а затем отправляете их, вы увидите всех получателей в каждом получателе. –

Смежные вопросы