Пакетная отправка электронной почты с SwiftMailer - PullRequest
6 голосов
/ 29 октября 2009

В настоящее время я использую SwiftMailer для отправки электронных писем нескольким пользователям (до 50). Он настроен и работает должным образом, однако я не совсем уверен, как вытащить получателей из моей базы данных MySQL и выполнить итерацию для их отправки.

Вот что у меня сейчас есть:

<?php  
require_once 'swift/lib/swift_required.php';
$mailer = Swift_Mailer::newInstance(
Swift_SmtpTransport::newInstance('smtp.connection.com', 25)  
->setUsername('myUserName')
->setPassword('myPassword')
 );

 $mailer->registerPlugin(new Swift_Plugins_AntiFloodPlugin(9));

 $message = Swift_Message::newInstance()

  ->setSubject('Let\'s get together today.')

  ->setFrom(array('myfrom@domain.com' => 'From Me'))

  ->setTo(array('tom_jones@domain.com' => 'Tom Jones', 'jsmith@domain.com' => 'Jane Smith', 'j_doe@domain.com' => 'John Doe', 'bill_watson@domain.com' => 'Bill Watson',))

  ->setBody('Here is the message itself')
  ->addPart('<b>Test message being sent!!</b>', 'text/html')
   ;

  $numSent = $mailer->batchSend($message, $failures);

  printf("Sent %d messages\n", $numSent);

Как вы можете видеть выше, в setTo я бы хотел перебрать своих пользователей в базе данных. Что-то вроде:

SELECT first, last, email FROM users WHERE is_active=1

Документация гласит:

Note: Multiple calls to setTo() will not add new recipients – each call overrides the previous calls. If you want to iteratively add recipients, use the addTo() method.

Но я не уверен: 1: Как выбрать из моей базы данных в этом скрипте и: 2: Если мне нужно будет использовать метод addTo () в мое дело. Любые предложения о том, как правильно это настроить?

Спасибо!

1 Ответ

7 голосов
/ 29 октября 2009

Я не совсем уверен, что правильно понял ваш вопрос, но вот способ сделать это:

<?php
$message = Swift_Message::newInstance()
  ->setSubject('Let\'s get together today.')
  ->setFrom(array('myfrom@domain.com' => 'From Me'))
  ->setBody('Here is the message itself')
  ->addPart('<b>Test message being sent!!</b>', 'text/html')
;

$data = mysql_query('SELECT first, last, email FROM users WHERE is_active=1') or die(mysql_error());
while($row = mysql_fetch_assoc($data))
{
   $message->addTo($row['email'], $row['first'] . ' ' . $row['last']);
}

$message->batchSend();
?>

Надеюсь, это то, что вы хотели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...