我目前正在写一个音乐博客。 管理员发布一个新的文章每2-3天。 一旦管理员岗位的文章,群发电子邮件将被立即发送到5000左右的用户。
什么是实现群发邮件功能的最佳方法是什么?
请问下面的函数工作?
function massmail()
{
$content = '...';
foreach ($recipients as $r) {
$_content = $content . '';
mail($r, 'subject', $_content);
}
}
另一个问题是:如果所有用户5000使用雅虎邮件,雅虎将会把它当作一个DDOS攻击,并阻止我的SMTP服务器的IP地址?
Answer 1:
首先,使用随PHP的mail()函数是不是最佳解决方案。 这是很容易被标记为垃圾邮件,你需要设置标题,以确保您正确发送HTML格式的电子邮件。 至于是否会将代码段的工作,它会,但我怀疑你会得到里面的HTML代码不正确指定额外的头
我建议你看一看SwiftMailer ,其中有HTML的支持,针对不同的MIME类型和SMTP认证(这是不太可能的标记为垃圾邮件)的支持。
Answer 2:
我会插入所有邮件到一个数据库(有点像队列),然后处理它们一次一个,你在你的代码做了(如果你想使用swiftmailer或PHPMailer的等等,你可以做到这一点。)
每封邮件发送后,更新数据库,记录日期/时间被发送。
通过将在数据库中你首先得
你把它发给谁的纪录
如果你的脚本超时或失败,你必须重新运行它,那么你就不会结束发送相同的电子邮件到的人的两倍
你可以从一个cron作业运行发送过程,并在同一时间做一个批处理,让您的邮件服务器不不堪重负,并跟踪哪些已发送
请记住,如何自动退回邮件或无效的电子邮件,使他们能够自动从你的列表中删除。
如果您要发送多封电子邮件,你一定会得到一些反弹。
Answer 3:
这是建议,不是一个答案:你是非常非常最好使用专用的邮件列表软件。 邮递员是一个经常被使用的例子,但作为简单的东西mlmmj可能就足够了。 发送邮件质量实际上比它实际上似乎是一个更艰巨的任务。 你不仅需要发送邮件,你还必须跟踪的“死”的地址,以避免您的邮件,或者更糟,你的邮件服务器,被标记为垃圾邮件。 你必须处理人退订出于同样的原因。
您可以自己实现这些东西,但特别是反弹操作困难和吃力不讨好的工作。 使用邮件列表管理起来会方便很多。
至于如何让你的邮件可口的雅虎,那完全是另一回事。 尽管有种种缺点,它们好像把伟大的股票在SPF和域关键字。 你可能会实现它们,这将需要从你的邮件服务器管理员合作。
Answer 4:
您可以考虑使用cron的那种操作。 一次发送邮件群发肯定是不好的,它可能被检测为垃圾邮件,DDOS,崩溃的服务器等。
所以科雷可能是一个很好的解决方案,一次发送邮件100,然后等待几分钟,接下来的100等
Answer 5:
不要发送电子邮件使用标准的PHP工具5000余人。 您可以通过大多数ISP在几秒钟内得到禁止和永远不会知道它。 您应该使用一些邮件列表软件或电子邮件服务提供商做到了这一点。
Answer 6:
你为什么不喜欢使用phplist ? 它也建立在PHP梅勒的顶部和大量的行业领导者都在使用它。 我已经用它自己几次批量邮件发送给我的客户。 关于phplist的好处是,你可以在域级别加上一个期限级节流您的邮件。
我们也已经与一对夫妇,我们已经有了内部采集系统做的是我们的用户群推到mailling列表,然后有一个cron项每天触发一个给定的邮件。 可能性是无穷的,这是开源的东西真棒!
Answer 7:
另外,梨包:
http://pear.php.net/package/Mail_Mime http://pear.php.net/package/Mail http://pear.php.net/package/Mail_Queue
下。
PS:不要使用电子邮件()发送的邮件5000。 除了其他人都表示,这是非常低效的,因为邮件()创建每个电子邮件设置单独的插座,即使是同一个MTA。
Answer 8:
也有看的PHPMailer类。 PHPMailer的
Answer 9:
我已经做到了用Lotus Notus和PHP 。 如果你有机会到邮件服务器,也可以要求一些东西到这种解决方案mail server管理员:
1)创建的一组mail server :“销售部”。
2)分配给该group你需要该组中的帐户。
3)分配一个因特网地址的组:salesdept@DOMAIN.com。
4)在使用邮件功能创建你的PHP脚本:
$到= “salesdept@DOMAIN.com”;
邮件($到,$主题,$消息,$头);
它的工作对我来说,所有包括在该组中的帐户接收邮件。
最好的卢克斯的。
Answer 10:
您可以使用swiftmailer它。 通过使用批处理过程。
$message = Swift_Message::newInstance()
->setSubject('Let\'s get together today.')
->setFrom(array('myfrom@domain.com' => 'From Me'))
->setBody('Here is the message itself')
->addPart('Test message being sent!!', 'text/html');
$data = mysql_query('SELECT first, last, email FROM users WHERE is_active=1') or die(mysql_error());
while($row = mysql_fetch_assoc($data))
{
$message->addTo($row['email'], $row['first'] . ' ' . $row['last']);
}
$message->batchSend();
?>
Answer 11:
自己何苦编程? 这是一个博客,只是使用谷歌Feedburner的其中通过电子邮件自动更新推给用户。
它是免费的 ,它使用谷歌的基础设施 。 不能得到任何比这更好的。 我用它为我的一些网站/博客和它奇妙的作品。
不足之处是它似乎并没有得到大力发展,而不是支持任何更多。 我建议你皱眉客场以商业电子邮件列表,如果你是认真对待您的业务。
文章来源: Sending mass email using PHP