现在我用这个循环发送电子邮件:
while($data = mysql_fetch_assoc($resultat)){
...
sendMail();
}
function sendMail(){
...
mail($to, $subject, $text, $headers);
}
但这并不是我能理解的内存效率。该脚本应该能够发送给超过1000个接收器。
你知道如何以更好的方式做到这一点吗?我想保持简单,不要安装任何框架。
答案 0 :(得分:7)
将“注释”删除到cron作业。换句话说,编写一个cron作业选择的文件,并在PHP会话之外执行冗长的操作。
当然,您可以将PHP用于cron将运行的实际脚本: - )
我建议这样做的原因:你可能不希望阻止你的PHP会话挂起太长时间:委托给外部进程会使(可能)更有意义。
另请注意,每个PHP会话非常通常在内存中受限:委托给外部流程可能会减轻这种压力。
答案 1 :(得分:1)
你说你不想安装框架,但我不认为PHP的邮件真的是为了快速有效地发送大量电子邮件而构建的。我会尝试Pear的Mail_Queue或Mail。
答案 2 :(得分:1)
考虑与Majordomo等列表管理器软件集成。做一个足够的工作广播电子邮件很容易。很难做得很好,这些人为这项工作做了很多血汗和泪水。
请注意您的收件人正在收到该电子邮件,否则您最终会将自己置于实时垃圾邮件黑名单中,并可能让您的主人将您从网络中踢出。
答案 3 :(得分:0)
AJAX可能是此类操作的最佳选择。
使用AJAX,您可以调用一个小* .php文件,其中只包含向下一个用户发送电子邮件的功能。每隔几秒就会调用一次,然后就完成了。
当然,如果您不喜欢客户端脚本,那么使用PHP管理这些操作将非常困难。
答案 4 :(得分:0)
有几种方法可以解决这个问题,MightyE与邮件列表管理器合作的想法可能是“正确的事情(tm)” - 使用Listman,Sympa,Majordomo或其中一个设置邮件列表其他数百个邮件列表管理员。它通常很容易从您的PHP脚本管理它,然后您发送一封电子邮件到邮件列表地址,让经理完成剩下的工作。
话虽这么说,这个解决方案需要一些非平凡的设置,并且当你需要动态生成目标电子邮件时(即每封电子邮件被发送到不同的电子邮件子集),它很难实现。地址)。
另一种更简单的方法是对贾斯塔斯凡的回答使用一种扭曲(这是一种耻辱,因为它是如此低调):它有严重的问题,但可以使其发挥作用。
您需要做的是确保PHP脚本的mail()
例程传递给本地MTA。这是Linux / BSD服务器上的默认安装。另外,请确保使用postfix
或exim
等良好的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服务进行解析。
您需要注意一些注意事项,否则收件人的邮件服务器可能会将您的电子邮件标记为“垃圾邮件”:
答案 5 :(得分:-4)
$to='user1@asdf.com;user2@asdf.com;user3@asd.fi;...';