2016-12-28 5 views
0

Я использую phpmailer, и я хочу отправить его сразу нескольким электронным письмам, используя for loop. Это мое текущее кодирование:phpmailer looping через несколько писем [PHP PHPMAILER]

require 'phpmailer/PHPMailerAutoload.php'; 
$mail = new PHPMailer;      
$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 = 'yyy.com';     // SMTP username 
$mail->Password = 'yyy';       // SMTP password 
$mail->SMTPSecure = 'tls';       // Enable TLS encryption, `ssl` also accepted 
$mail->Port = 587;         // TCP port to connect to 
$person = array(0 => 'xxx.com', 'xxx2.com'); 
for ($x = 0; $x < 2; $x++) { 
$mail->addAddress($person[$x]); 
} 
$mail->setFrom('yyy.com'); 
$mail->isHTML(true);         // Set email format to HTML 
$mail->Subject = 'Here is the subject'; 
$mail->Body = "xxx"; 
$mail->AltBody = 'This is the body in plain text for non-HTML mail clients'; 

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

Прямо сейчас, код работает, но, когда вы проверяете на «К» в почтовом клиенте, он также выводит другие сообщения, включенные вместе - и я не хочу, чтобы , Это как, когда вы отправляете сообщение по электронной почте xxx.com, xxx2.com может видеть в своем поле «TO», говоря TO <name1> <xxx.com>, <name2> <xxx2.com>. Как этого избежать? Должен ли я создать цикл, начинающийся с $mail = new PHPMailer;?

+0

Вы просто добавляете адрес электронной почты в список получателей перед отправкой. Вы также должны поместить '' '' mail-> send() '' 'в цикл. – CUGreen

+0

Как должен выглядеть мой код сейчас? –

+0

См. Мой ответ ниже – CUGreen

ответ

0

Вот еще один возможный способ без повторного создания Класса каждый раз.

<?php 

require 'phpmailer/PHPMailerAutoload.php'; 
$mail = new PHPMailer; 
$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 = 'yyy.com';     // SMTP username 
$mail->Password = 'yyy';       // SMTP password 
$mail->SMTPSecure = 'tls';       // Enable TLS encryption, `ssl` also accepted 
$mail->Port = 587;         // TCP port to connect to 
$person = array(0 => 'xxx.com', 'xxx2.com'); 

$mail->setFrom('yyy.com'); 
$mail->isHTML(true);         // Set email format to HTML 
$mail->Subject = 'Here is the subject'; 
$mail->Body = "xxx"; 
$mail->AltBody = 'This is the body in plain text for non-HTML mail clients'; 

$errors = []; 
for ($x = 0; $x < 2; $x++) { 
    $mail->addAddress($person[$x]); 
    if(!$mail->send()) { 
     $errors[] = 'Message could not be sent. Mailer Error: ' . $mail->ErrorInfo; 
    } 
    $mail->clearAddresses(); 
} 

if(empty($errors)) { 
    // success 
} else { 
    // handle errors 
} 

Использование $mail->clearAddresses(); в рамках цикла.

+0

'$ mail-> clearAddresses();' то, что я ищу, спасибо! –

0

Лучший способ добавить их в качестве получателей Carbon Copy.

$mail->AddCC('[email protected]', 'Person One'); 
$mail->AddCC('[email protected]', 'Person Two'); 
// .. 

Чтобы все было легко, вы должны пройти через массив, чтобы сделать это.

$recipients = array(
    '[email protected]' => 'Person One', 
    '[email protected]' => 'Person Two', 
    // .. 
); 
foreach($recipients as $email => $name) 
{ 
    $mail->AddCC($email, $name); 
} 

Я не реализовал это, но думаю, что это сработает для вас.

+0

BCC будет лучше - он не будет раскрывать адреса всех получателей всем. – Synchro

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

  • Нет связанных вопросов^_^