向大量人发送邮件

时间:2011-08-12 20:30:38

标签: php phpmailer

我在StackOverflow上已经阅读了很多关于这个问题的问题和答案,但我读过的都没有特别回答我的问题。

我不想有邮件列表。如果用户希望收到批量电子邮件,则会勾选一个框。没有错误的电子邮件,因为帐户是使用电子邮件激活的。所以没有反弹检查。但是,我已经使用了PHPMailer(因此没有标题等问题)并将每个地址添加到电子邮件的“to”字段中。这意味着每个人都可以查看所有电子邮件(通过阅读电子邮件来源或点击其电子邮件客户端中的“回复所有”),这是其他用户不可取的。问题是:

1)我应该单独发送每封电子邮件,还是将所有地址都放在“密件抄送”字段中? 2)这不会使一些邮件服务器将电子邮件标记为“垃圾邮件”,无论它的结构如何良好?如果是这样,有没有办法进一步防止这种情况(除了将地址添加到某些白名单或设置域密钥或Unix cron作业)?

谢谢!

此处提到的所有内容都要求用户使用表单“订阅”,然后确认他们的电子邮件地址(如PHPList中)。但是,当人们注册时我已经要求确认,所以一次又一次地询问他们是没有意义的。我现有的代码检查数据库;如果他们的“receive-movie-mail”位设置为1(这些是使用sql查询收集的),则在将新电影添加到数据库时会向他们发送电子邮件。所以,如果你仍然相信这是一个邮件列表(我认为它的类型,但也许我的定义违反现有的软件功能),我希望它有,1)某种方式订阅用户到列表中PHP代码(EG,如果“我希望每次上传电影到数据库时都收到一封电子邮件”复选框被选中,在我的表格处理代码中我会订阅它们),以及2)用PHP邮寄人的方式( IE是一个类似send_mail_to_list($ content)的函数,当提交“添加电影”表单时,它会将电子邮件发送给我订阅的人。有没有这样的邮件列表管理软件?

5 个答案:

答案 0 :(得分:3)

您应该遍历电子邮件列表并为每个地址发送单独的电子邮件:

$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 :(得分:1)

  

1)我应该单独发送每封电子邮件,还是将所有地址放入   'bcc'字段?

绝对是个人的。密件抄送将您的电子邮件视为垃圾邮件。

  

2)这不会使一些邮件服务器将电子邮件标记为“垃圾邮件”,不   这是多么好的结构?如果是这样,有没有办法进一步发展   防止这种情况(除了将地址添加到某些白名单或   设置域密钥或Unix cron作业)?

使用SPF记录可能有所帮助。确保服务器的反向dns未列入黑名单,特别是如果它是共享主机。

答案 2 :(得分:0)

我还没有在php中这样做,因为我知道默认情况下php中没有超线程。

在Ruby或.NET等其他语言/框架中,您可以通过超级/多线程将各个电子邮件一起发送出去。这类似于你所知道的* nix cron jobs方法,除了它在运行时执行 - 你为你发送的每5个地址创建一个线程,然后所有线程一个接一个地发送5个邮件。

请记住,即使采用这种方法,瓶颈也会从应用程序转移到您正在使用的邮件服务器。因此,假设您正在使用随附apache的内置postgre - 它将无法处理大量卷,因为每个线程都会为其添加负载。

当然,如果你可以使用MailChimp !!你应该一起避免这一切。

答案 3 :(得分:0)

向每个用户发送一封单独​​的电子邮件,仅发送给他们。

设置DKIMSPF,或者至少创建适当的SPF记录。 DKIM需要对实际为您发送邮件的邮件服务器进行一些配置,但可以极大地提高可传递性,尤其是对于大型电子邮件提供商。

答案 4 :(得分:0)

我的旁边的其他提示是:维护一个电子邮件队列,您可以限制投放率。当您尝试一次向其域中发送数千封电子邮件时,某些电子邮件提供商不喜欢。

这应该可以通过一些MTA来实现..但我还没有看到一个足够灵活的方法来做到这一点。我用的是Pear class Mail_Queue + cron job。