Отправка почты большому количеству людей - PullRequest
6 голосов
/ 13 августа 2011

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

Я не хочу иметь список рассылки. Люди отмечают флажок, если они хотят получать массовую электронную почту. Нет неправильных писем, потому что аккаунты активируются с помощью писем. Так что без проверки отказов. Тем не менее, я уже использую PHPMailer (так что никаких проблем с заголовками и т. Д.) И добавляю каждый адрес в поле «к» письма. Это означает, что каждый может просматривать все электронные письма (читая источник электронной почты или нажимая кнопку «ответить всем» в своем почтовом клиенте), что нежелательно для других пользователей. Вопрос:

1) я должен отправлять каждое электронное письмо индивидуально или указывать все адреса в поле «bcc»? 2) Разве это не заставит некоторые почтовые серверы помечать письмо как «спам», независимо от того, насколько оно хорошо структурировано? Если да, есть ли способ предотвратить это (кроме добавления адреса в некоторые белые списки или настройки доменных ключей или заданий Unix cron)?

Спасибо!

Все вещи, упомянутые здесь, требуют от пользователя «подписаться» с помощью формы, а затем подтвердить свой адрес электронной почты (как в PHPList). Тем не менее, я уже прошу подтверждения, когда люди регистрируются, поэтому нет смысла спрашивать их снова и снова. Мой существующий код проверяет базу данных; если их бит «receive-movie-mail» установлен в 1 (они собираются с помощью SQL-запроса), то электронное письмо отправляется им при добавлении нового фильма в базу данных. Итак, если вы все еще считаете, что это список рассылки (что, я думаю, так и есть, но, возможно, мое определение не поддается существующим программным возможностям), я бы хотел, чтобы это имело: 1) некоторый способ подписки пользователей на список с помощью PHP-код (например, если установлен флажок «Я хочу получать электронную почту каждый раз при загрузке фильма в базу данных», в коде обработки моей формы я подпишусь на них), и 2) способ отправки писем людям с помощью PHP ( IE функция наподобие send_mail_to_list ($ content), которая отправляет электронное письмо людям, на которых я подписан, при отправке формы «Добавить фильм»). Существует ли такое программное обеспечение для управления списком рассылки?

Ответы [ 5 ]

3 голосов
/ 13 августа 2011

Вы должны просмотреть список электронных писем и отправить отдельное электронное письмо для каждого адреса:

$mail = new PHPMailer();
$mail->IsSMTP();           // set mailer to use SMTP
$mail->Host = "mail.{domain_name}.com";    // specify main and backup server
$mail->SMTPAuth = true;           // turn on SMTP authentication
$mail->Username = "{username}";   // SMTP username
$mail->Password = "{password}";      // SMTP password

$emailFrom  = '{email_address}';

$mail->From = $emailFrom;
$mail->IsHTML(true);    // set email format to HTML if needed

$emailSubject = '{your subject}';
$emailBody  = "Whatever content you are sending.";

$mail->Subject = $emailSubject;
$mail->Body    = $emailBody;

foreach($emails => $email) {

    $emailTo = $email['email'];
    $emailToName = $email['name'];

// send an email to customer
    $mail->AddAddress($emailTo, $emailToName);

    if(!$mail->Send())
    {
        echo 'failed';
    }

    $mail->ClearAddresses();
}
1 голос
/ 13 августа 2011

1) я должен отправлять каждое электронное письмо отдельно или указывать все адреса в поле 'bcc'?

Определенно индивидуально.Bcc будет рассматривать вашу электронную почту как спам.

2) Разве это не заставит некоторые почтовые серверы пометить письмо как «спам», независимо от того, насколько оно структурировано?Если да, есть ли способ предотвратить это (кроме добавления адреса в некоторые белые списки или настройки ключей домена или заданий Unix cron)?

с использованием записи SPF может помочь.Убедитесь, что обратный DNS к вашему серверу не занесен в черный список, особенно если это общий хостинг.

0 голосов
/ 13 августа 2011

Мой совет рядом с другими будет: поддерживать очередь писем, где вы можете ограничить скорость доставки.Некоторым провайдерам электронной почты не нравится, когда вы пытаетесь доставить тысячи писем на их домены одновременно.

Это возможно с некоторыми MTA. Но я не видел ни одного, который был бы достаточно гибким для этого.Для этого я использовал класс Pear Mail_Queue + cron.

0 голосов
/ 13 августа 2011

Отправьте каждому пользователю отдельное электронное письмо, адресованное только им.

Установите DKIM и SPF или, по крайней мере, создайте соответствующие записи SPF.DKIM требует некоторой конфигурации почтового сервера, который фактически отправляет почту для вас, но может сильно помочь с доставкой, особенно крупным почтовым провайдерам.

0 голосов
/ 13 августа 2011

Я не делал этого в php, так как знаю, что по умолчанию в php нет гиперпоточности.

В других языках / фреймворках, таких как Ruby или .NET, вы отправляете отдельные электронные письма вместе посредством гипер / многопоточности. Это похоже на известный вам подход * nix cron, за исключением того, что он выполняется во время выполнения - вы создаете, скажем, один поток на каждые 5 отправляемых вами адресов, а затем все потоки отправляют 5 писем одно за другим.

Имейте в виду, что даже при таком подходе узкое место переходит от приложения к почтовому серверу, который вы используете. Допустим, вы используете встроенный Postgre, который поставляется с Apache - он не будет обрабатывать большие объемы, так как каждый поток будет добавлять к нему нагрузку.

И, конечно, вам следует избегать всего этого вместе, если вы можете использовать MailChimp !!

...