Я запускаю запрос MySQL, чтобы получить имя, фамилию и адрес электронной почты из таблицы, где «уведомлять» установлено значение «ДА», как показано ниже. И в цикле while я создаю всю информацию, которую затем помещаю в массив сразу после:
$sql = "SELECT firstname, lastname, email, notify FROM guesses WHERE poolid = '$poolid' AND notify = 'yes'"; $getnotify = mysqli_query($connection, $sql); if (!$getnotify) { die("Database query failed: " . mysqli_error()); } else { while ($row = mysqli_fetch_array($getnotify)) { $notifyemailscontent.="'".$row['email'] . "' => '" . $row['firstname'] . " " . $row['lastname']. "',"; } } $notifyemails=array($notifyemailscontent);
Затем в PHP почтовый код я всегда отправляю на свой адрес, например:
$mail->addAddress(myemail@myemail.com, 'Me');
Но затем я также хочу добавить электронные письма, которые я получаю в запросе mysql (есть ли 1 или 100), как CC или BCC (либо это нормально). Я попытался сделать это, как показано ниже, на основе того, что я нашел в Интернете, но он не ведет себя так, как хотелось бы.
foreach($notifyemails as $email => $name) { $mail->AddBCC($email, $name); }
ПРИМЕЧАНИЕ. Он отправляет электронное письмо в ME, но он не отправляет электронное письмо людям BCC. Когда я печатаю массив $ notifyemails, я получаю следующее (только одно сообщение BCC в этом случае):
Массив ([0] => 'bjones@bobscompany.com' => 'Боб Джонс',)
Опять же, я получаю сообщение по электронной почте, но Боб не является BCC'd на нем. Поэтому я думаю, что что-то должно быть неправильно в цикле for выше или, возможно, в цикле запросов mysql вверху ??? Будет оценено любое понимание / направление.
Учитывая другие ответы, я представляю следующее.
Как я уже сказал в комментариях, вытащили из своего примера следующие и слегка измененные, чтобы также показать имя человека, если вы хотите его использовать.
Вы можете добавить к нему также, используя разные столбцы при назначении им переменной.
Заимствован из https://github.com/PHPMailer/PHPMailer/blob/master/examples/mailing_list.phps
Примечание. Вам нужно будет немного изменить имена запросов / столбцов и, возможно, часть кода, так как вы не опубликовали полный код.
Ниже приводится рабочий пример того, что я использовал, и надеюсь, что он вам поможет.
<?php include ('/path/to/database_connection.php'); error_reporting(E_STRICT | E_ALL); date_default_timezone_set('Etc/UTC'); require 'PHPMailerAutoload.php'; $mail = new PHPMailer; $mail->isSMTP(); $mail->Host = 'xxx'; $mail->SMTPAuth = true; $mail->SMTPKeepAlive = true; // SMTP connection will not close after each email sent, reduces SMTP overhead $mail->SMTPSecure = 'tls'; // if required $mail->Port = 587; // or use the preferred port of your choice $mail->Username = 'xxx'; $mail->Password = 'xxx'; $mail->addAddress('your_email@example.com', 'John'); $mail->setFrom('email@example.com', 'List manager'); $mail->addReplyTo('email@example.com', 'List manager'); $mail->Subject = "PHPMailer Simple database mailing list test"; //Same body for all messages, so set this before the sending loop //If you generate a different body for each recipient (eg you're using a templating system), //set it inside the loop //msgHTML also sets AltBody, but if you want a custom one, set it afterwards $mail->AltBody = 'To view the message, please use an HTML compatible email viewer!'; $result = mysqli_query($connection, "SELECT user, email FROM table WHERE col = 'x'"); foreach ($result as $row) { //This iterator syntax only works in PHP 5.4+ $user = $row['user']; $body = "Hello $user, <br><br>This is the HTML message body <b>in bold!</b>"; $mail->msgHTML($body); $mail->addBCC($row['email'], $row['user']); /* if (!empty($row['photo'])) { $mail->addStringAttachment($row['photo'], 'YourPhoto.jpg'); //Assumes the image data is stored in the DB } */ if (!$mail->send()) { echo "Mailer Error (" . str_replace("@", "@", $row["email"]) . ') ' . $mail->ErrorInfo . '<br />'; break; //Abandon sending } else { echo "Message sent to:" . $row['user'] . ' (' . str_replace("@", "@", $row['email']) . ')<br />'; //Mark it as sent in the DB /* UPDATE the table if needed mysqli_query( $connection, "UPDATE mailinglist SET sent = true WHERE email = '" . mysqli_real_escape_string($connection, $row['email']) . "'" ); */ } // Clear all addresses and attachments for next loop $mail->clearAddresses(); $mail->clearAttachments(); }
Ваш array
не построен правильно, используйте следующее:
while ($row = mysqli_fetch_array($getnotify)) { $notifyemailscontent[$row['email']] = "{$row['firstname']} {$row['lastname']}"; }
Затем внутри блока phpmailer
:
foreach($notifyemailscontent as $email => $name) { $mail->AddCC($email, $name); }