PHP Отправка массовых писем: один за каждого или один за всех? - PullRequest
5 голосов
/ 14 февраля 2011

При отправке массовых писем с помощью PHP лучше отправлять каждому подписчику электронное письмо (с циклом for по всем адресам электронной почты) или лучше просто добавить все в BCC в списке через запятую иТаким образом, отправив только одно электронное письмо?

Спасибо.

Ответы [ 4 ]

4 голосов
/ 14 февраля 2011

Существует большая вероятность того, что количество адресов в поле BCC ограничено на SMTP-сервере (чтобы избежать спама). Я пошел бы по безопасному маршруту и ​​отправил бы электронное письмо каждому отдельному подписчику. Это также позволит вам при необходимости настроить электронную почту для каждого подписчика.

Также обратите внимание, что mail (), вероятно, не лучший способ отправки массовой почты (из-за того, что он открывает новое соединение с SMTP-сервером при каждом его вызове). Вы можете посмотреть на PEAR :: Mail .

1 голос
/ 14 февраля 2011

Как говорят другие, лучше подходит одно письмо для каждого получателя.

Если вы хотите, чтобы библиотека сделала грязную работу за вас, попробуйте SwiftMailer http://swiftmailer.org

Вот пример непосредственно из документов:

require_once 'lib/swift_required.php';

//Create the Transport
$transport = Swift_SmtpTransport::newInstance('localhost', 25);

//Create the Mailer using your created Transport
$mailer = Swift_Mailer::newInstance($transport);

//Create a message
$message = Swift_Message::newInstance('Wonderful Subject')
  ->setFrom(array('john@doe.com' => 'John Doe'))
  ->setTo(array('receiver@domain.org', 'other@domain.org' => 'A name'))
  ->setBody('Here is the message itself')
  ;

//Send the message
$numSent = $mailer->batchSend($message);

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

/* Note that often that only the boolean equivalent of the
   return value is of concern (zero indicates FALSE)

if ($mailer->batchSend($message))
{
  echo "Sent\n";
}
else
{
  echo "Failed\n";
}

*/

Он также имеет хороший плагин Antiflood: http://swiftmailer.org/docs/antiflood-plugin-howto

1 голос
/ 14 февраля 2011

Если процесс отправки по какой-либо причине не удался (например, причиной может быть неразрешимый домен) для одного из получателей BCC, вся операция будет отменена (что в 99% случаев нежелательное поведение).

Если вы отправляете электронные письма в цикле PHP, даже если одно из электронных сообщений не удается отправить, другие электронные письма будут отправлены.

1 голос
/ 14 февраля 2011

Рекомендуется отправлять электронную почту каждому получателю.

Если это почтовый сервер linux, он может обрабатывать большие объемы, поэтому объем не должен быть проблемой, если это не сервер для дерьма!Если это общий веб-сервер, ваш хост может быть недоволен - если это так, я бы разбил его на куски и распространил посылку.Если он посвящен, то делай как хочешь:)

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