如何向数百个接收器发送邮件?

时间:2009-11-10 15:05:19

标签: php email

现在我用这个循环发送电子邮件:

while($data = mysql_fetch_assoc($resultat)){
    ...
    sendMail();
}

function sendMail(){
    ...
    mail($to, $subject, $text, $headers);
}

但这并不是我能理解的内存效率。该脚本应该能够发送给超过1000个接收器。

你知道如何以更好的方式做到这一点吗?我想保持简单,不要安装任何框架。

6 个答案:

答案 0 :(得分:7)

将“注释”删除到cron作业。换句话说,编写一个cron作业选择的文件,并在PHP会话之外执行冗长的操作。

当然,您可以将PHP用于cron将运行的实际脚本: - )

我建议这样做的原因:你可能不希望阻止你的PHP会话挂起太长时间:委托给外部进程会使(可能)更有意义。

另请注意,每个PHP会话非常通常在内存中受限:委托给外部流程可能会减轻这种压力。

答案 1 :(得分:1)

你说你不想安装框架,但我不认为PHP的邮件真的是为了快速有效地发送大量电子邮件而构建的。我会尝试Pear的Mail_QueueMail

答案 2 :(得分:1)

考虑与Majordomo等列表管理器软件集成。做一个足够的工作广播电子邮件很容易。很难做得很好,这些人为这项工作做了很多血汗和泪水。

请注意您的收件人正在收到该电子邮件,否则您最终会将自己置于实时垃圾邮件黑名单中,并可能让您的主人将您从网络中踢出。

答案 3 :(得分:0)

AJAX可能是此类操作的最佳选择。

使用AJAX,您可以调用一个小* .php文件,其中只包含向下一个用户发送电子邮件的功能。每隔几秒就会调用一次,然后就完成了。

当然,如果您不喜欢客户端脚本,那么使用PHP管理这些操作将非常困难。

答案 4 :(得分:0)

有几种方法可以解决这个问题,MightyE与邮件列表管理器合作的想法可能是“正确的事情(tm)” - 使用Listman,Sympa,Majordomo或其中一个设置邮件列表其他数百个邮件列表管理员。它通常很容易从您的PHP脚本管理它,然后您发送一封电子邮件到邮件列表地址,让经理完成剩下的工作。

话虽这么说,这个解决方案需要一些非平凡的设置,并且当你需要动态生成目标电子邮件时(即每封电子邮件被发送到不同的电子邮件子集),它很难实现。地址)。

另一种更简单的方法是对贾斯塔斯凡的回答使用一种扭曲(这是一种耻辱,因为它是如此低调):它有严重的问题,但可以使其发挥作用。

您需要做的是确保PHP脚本的mail()例程传递给本地MTA。这是Linux / BSD服务器上的默认安装。另外,请确保使用postfixexim等良好的MTA。然后,当您要发送群发电子邮件时,请为发送创建BCC标头列表:

$bcc = array();
while($data = mysql_fetch_assoc($resultat)){
    $bcc[] = "Bcc: {$data['email']}";
}
sendMail($bcc);

function sendMail($extraheaders){
    ...
    mail($to, $subject, $text, array_merge($headers, $extraheaders));
}

这是一种相当有效的方式 - BCC标头非常紧凑,只能由mail()直接传送到的本地MTA服务进行解析。

您需要注意一些注意事项,否则收件人的邮件服务器可能会将您的电子邮件标记为“垃圾邮件”:

  1. 始终确保您拥有可以接受(并可能默默忽略)电子邮件的有效“收件人”地址 - 每封电子邮件也会发送到那里。这个“收件人”地址看起来应合法。
  2. 请务必添加带有电子邮件地址的“回复”标题,以便收件人能够轻松回复您。
  3. 请务必设置有效的“返回路径”标头,其中包含可接受电子邮件退回的有效电子邮件地址 - 丢失或无效的“返回路径”是自动发送电子邮件失败的最可能原因。

答案 5 :(得分:-4)

$to='user1@asdf.com;user2@asdf.com;user3@asd.fi;...';