繁体   English   中英

使用PHP发送大量电子邮件

[英]Sending mass email using PHP

我目前正在写一个音乐博客。 管理员每2-3天发布一篇新文章。 管理员发布文章后,将立即向大约5000个订阅者发送大量电子邮件。

实施群发邮件功能的最佳方法是什么?

以下功能是否有效?

function massmail() 
{
  $content = '...';
  foreach ($recipients as $r) {
    $_content = $content . '<img src="http://xxx/trackOpenRate.php?id='.$r.'">';
    mail($r, 'subject', $_content);
  }
}

另一个问题:如果所有5000个订户都使用Yahoo Mail,雅虎会将其视为DDOS攻击并阻止我的SMTP服务器的IP地址吗?

首先,使用PHP附带的mail()函数不是最佳解决方案。 它很容易被标记为垃圾邮件,您需要设置标题以确保正确发送HTML电子邮件。 至于代码片段是否会起作用,它会,但我怀疑你会在其中正确获取HTML代码而不指定额外的标题

我建议你看看SwiftMailer ,它支持HTML,支持不同的mime类型和SMTP身份验证(不太可能将你的邮件标记为垃圾邮件)。

我会将所有电子邮件插入数据库(有点像队列),然后像在代码中一样处理它们(如果你想使用swiftmailer或phpmailer等,你也可以这样做。)

发送每封邮件后,更新数据库以记录发送的日期/时间。

首先将它们放入数据库中

  1. 你发送给谁的记录
  2. 如果您的脚本超时或失败并且您必须再次运行它,那么您将不会最终向人们发送相同的电子邮件两次
  3. 您可以从cron作业运行发送过程并一次执行一批,以便您的邮件服务器不会被淹没,并跟踪已发送的内容

请注意,如何自动发送退回的电子邮件或无效的电子邮件,以便他们可以自动从列表中删除。

如果你发送了很多电子邮件,你肯定会获得一些反弹。

这是建议,而不是答案:使用专用邮件列表软件你会好得多。 mailman是一个常用的例子,但像mlmmj这样简单的东西就足够了。 发送大量邮件实际上比实际看起来更困难。 您不仅需要发送邮件,还必须跟踪“死”地址,以避免您的邮件,或者更糟糕的是,您的邮件服务器被标记为垃圾邮件。 出于同样的原因,你必须处理取消订阅的人。

你可以自己实现这些东西,但特别是弹跳处理是困难和无益的工作。 使用邮件列表管理器可以使事情变得更容易。

至于如何让你的邮件适合雅虎,这完全是另一回事。 尽管存在缺陷,但它们似乎在SPF和DomainKey中都有很大的优势。 您可能必须实现它们,这将需要您的邮件服务器管理员的合作。

您可以考虑将CRON用于此类操作。 一次发送大量邮件肯定不好,它可能被检测为垃圾邮件,ddos,崩溃你的服务器等。

所以CRON可能是一个很好的解决方案,一次发送100封邮件,然后等待几分钟,接下来的100封等等。

不要使用标准PHP工具向5,000人发送电子邮件。 您将在几秒钟内被大多数ISP禁止,甚至从未知道。 您应该使用一些邮件列表软件或电子邮件服务提供商

你为什么不宁愿使用phplist 它也建立在PHP Mailer之上,很多行业领导者正在使用它。 我自己曾经多次使用它向我的客户发送大量邮件。 关于phplist的好处是你可以在域级加上时间限制级别来限制你的消息。

我们用几个内部捕获系统完成的工作就是将用户群推送到填充列表,然后每天都有一个cron条目触发给定的邮件。 可能性是无穷无尽的,这是开源的绝佳之处!

梨包也是:

http://pear.php.net/package/Mail_Mime http://pear.php.net/package/Mail http://pear.php.net/package/Mail_Queue

哭泣。

PS:不要使用mail()发送5000封电子邮件。 除了其他人所说的,这是非常低效的,因为mail()为每个电子邮件集创建一个单独的套接字,甚至是同一个MTA。

另请参阅PHPmailer类。 PHPMailer的

我已经使用Lotus NotusPHP完成了它。 如果您有权访问邮件服务器,或者您可以向mail server管理员请求某些内容,则此解决方案有效:

1)在mail server创建一个组:“Sales Department”。
2)分配给该group你需要该组中的帐户。
3)为该组分配一个互联网地址:salesdept@DOMAIN.com。
4)使用mail函数创建PHP脚本:
$ to =“salesdept@DOMAIN.com”;
邮件($ to,$ subject,$ message,$ headers);

它对我有用,并且该组中包含的所有帐户都收到了邮件。

最好的运气。

你可以使用swiftmailer。 通过使用批处理。

<?php
    $message = Swift_Message::newInstance()
      ->setSubject('Let\'s get together today.')
      ->setFrom(array('myfrom@domain.com' => 'From Me'))
      ->setBody('Here is the message itself')
      ->addPart('<b>Test message being sent!!</b>', '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();
?>

为什么要打扰自己? 这是一个博客,只需使用Google Feedburner即可通过电子邮件自动向订阅者推送更新。

它是免费的 ,它使用谷歌的基础设施 不能比这更好。 我将它用于我的一些网站/博客,它的工作非常好。

缺点是它似乎没有积极开发, 也不再受支持 如果你认真对待自己的业务,我建议你不要去商业电子邮件列表。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM