-146

如何在 PHP 中每周向 100,000 位用户发送一封电子邮件?这包括使用以下提供商向订阅者发送邮件:

  • 美国在线
  • 邮箱
  • 热邮件
  • 雅虎

在可能的范围内,实际发送所有电子邮件非常重要。显然,按照惯例只发送邮件只会产生问题。

是否有一个 PHP 库可以让这变得更简单?

4

3 回答 3

679

简短回答:虽然从技术上讲,每周自己发送 10 万封电子邮件是可行的,但最简单、最简单和最便宜的解决方案是将其外包给专门从事此业务的公司之一(我确实说过“最便宜”:没有限制尝试 DIY 时可以投入的开发时间(以及金钱)。

长答案:如果您决定绝对要自己做这件事,请为一个充满伤害的世界做好准备(毕竟,这是我们正在谈论的电子邮件/电子邮件失败)。你需要:

  • 不是垃圾邮件的电子邮件内容(否则您在每一步都会遇到额外的主要障碍,甚至会产生法律后果)
  • 此外,您的内容应该很容易与垃圾邮件区分开来 - 在某些情况下可能有点难以做到(我听说某家制药公司不得不放弃电子邮件,因为他们的品牌名称在垃圾邮件中很常见)
  • 您自己的可配置 SMTP 服务器,当您将 10 万封电子邮件转储到其上时,它不会崩溃(您的 ISP 的上游服务器在这里不够用,您会让 ISP 非常不高兴;我们使用了两个专用盒子)
  • 一些邮件包装器(例如,如果 PHP 是你选择的毒药,则为 PhpMailer;使用 PHPmail()本身就足够可怕了)
  • 您自己的发件人函数在循环中运行,创建邮件并将它们传递给包装器(请注意,如果您的应用程序有内存泄漏,您可能会遇到 PHP 的内存限制;您可能需要定期回收发送过程,甚至更好,将“创建电子邮件”和“发送电子邮件”完全解耦)

令人惊讶的是,这很容易。困难的部分实际上是发送它:

  • 当您发送太多邮件并排在一起时,某些服务器会禁止您,因此您需要随机播放并监视您的队列(例如,将一封邮件发送到 joe@example.com,然后将三封邮件发送到其他域,然后再将另一封邮件发送到 otheraddress@example.com )
  • 您需要有正确的PTR、SPF、DKIM 记录
  • 处理远程服务器超时、错误配置的 DNS 记录和其他网络问题
  • 处理无效的电子邮件(不,正则表达式是错误的工具
  • 处理退订(许多合法的时事通讯已被重新归类为垃圾邮件,因为许多沮丧的用户无法一步退订而是选择“标记为垃圾邮件” - 垃圾邮件过滤器确实学习,尤其是大型电子邮件提供商)
  • 处理退回和拒绝(“没有这样的邮箱 ojhn@example.com”、“邮箱 john@example.com 已满”)
  • 处理黑名单和从黑名单中删除(当然,你不是在发送垃圾邮件。一些收件人不会那么肯定 - 有这么大的名单,无论你采取什么预防措施,有时都会发生这种情况。有些人(例如你的不那么- 谨慎的竞争对手)甚至可能将您的邮件错误地报告为垃圾邮件 - 它确实发生了。平均而言,需要数周时间才能将自己从黑名单中删除。)

最重要的是,您必须管理其中的法律部分(各种联邦、州和地方法律;甚至在您发送到美国境外时也会遇到不同的法律问题(注意:您无法找到 joe @hotmail.com 住在西南埃尔博尼亚,这个国家拥有世界上最严厉的反垃圾邮件法律))。

我很确定我错过了这个九头蛇的几个头 - 你仍然确定你想自己做这个吗?如果是这样,将会有另一波浪潮,这一次仅仅是发送电子邮件固有的烦人问题。(您看,SMTP 是一种存储转发协议,这意味着您的电子邮件将在 Internet 上的许多 SMTP 服务器上进行洗牌,希望下一个更接近最终收件人。基本上,电子邮件被发送到 SMTP 服务器,该服务器将其放入转发队列;时间到了,它将进一步转发到不同的 SMTP 服务器,直到它到达给定域的 SMTP 服务器。这种转发可能会立即发生,或几分钟,或几小时,或几天,或永远不会。)因此,您将看到以下问题 - 其中大部分可能发生在途中以及目的地:

  • 远程 SMTP 服务器不想与您的 SMTP 服务器通信
  • 您的邮件被标记为垃圾邮件(<blink>不是您的朋友,也不是<font color=...>
  • 您的邮件会延迟几天甚至几周送达(与流行的观点相反,SMTP 旨在尽最大努力在未来的某个时间送达邮件 - 而不是现在送达)
  • 您的邮件根本没有送达(已经从跃点 #4 的电子邮件服务器发送,尚未从跃点 #5 的服务器发送,当前保存邮件的服务器崩溃,数据丢失)
  • 你的邮件在途中被一些脑残的服务器破坏(这在某种程度上可以用 base64 编码解决,但随后大小增加,电子邮件看起来更可疑)
  • 您的邮件已送达,而收件人似乎不想要它们(“我确定我没有注册,我清楚地记得一年前我做了什么”(您当然知道,先生))
  • 使用各种版本的 Microsoft Outlook 及其对 Internet 邮件的特殊处理的用户
  • 向导的学徒模式(一个自我强化的积极反馈循环 - 换句话说,自动电子邮件作为对自动电子邮件的回复作为对......的回复;你真的不想成为一个设置这个的人,因为你会激怒一半的互联网)

工作就是排除故障和解决这个问题(提示:你不能,大多数情况下)。经营合法的群发邮件业务的人知道,最终你无法解决它,他们也无法解决它——他们有充分研究、记录和概述的原因(甚至可能作为 Powerpoint 演示文稿- 完整的声音和很酷的过渡 - 你的老板可以理解),因为他们之前已经解释过一百万次了。另外,对于实际可以解决的问题,他们非常清楚如何解决。

如果在这一切之后,你没有气馁并且仍然想这样做,那就继续吧:你甚至有可能找到更好的方法来做到这一点。只要知道前面的路并不容易 - 发送电子邮件是微不足道的,传递它是困难的。

于 2010-10-11T11:36:37.220 回答
46

人们推荐了 MailChimp,它是一个很好的批量电子邮件供应商。如果您正在寻找交易电子邮件的优秀供应商,我可能会提供帮助。

在过去的 6 个月中,我们使用了四个不同的 SMTP 供应商,目的是找出哪个是最好的。

以下是我们发现的摘要......

验证SMTP

  • 最便宜的
  • 没有分析/报告
  • 不跟踪打开/点击
  • 对某些发送稍有犹豫

邮戳

  • 非常便宜,但不如 AuthSMTP 便宜
  • 漂亮的 cpanel,但没有跟踪打开/点击
  • 发送级别的活动跟踪,因此您可以打开一封已发送的电子邮件并查看它的外观和交付数据。
  • 必须使用 API。最近引入了通过 SMTP 发送,但它有问题。例如,我们注意到主题行中的引号 (") 被去掉了。
  • 无法发送您想要的任何附件。必须在已批准的文件类型列表中且小于一定大小。(我认为是 10 MB)
  • 需要一组来自名称/地址的列表。

JangoSMTP

  • 相对于其他的昂贵——在某些情况下超过 10 倍
  • 丑陋的cpanel,但对打开/点击的跟踪非常好,带有电子邮件级别的详细信息
  • 发送时有时会犹豫。有两次,邮件需要一个小时才能送达
  • 需要一组来自名称/地址的列表。

发送网格

  • 不像 AuthSMTP 那样便宜,但仍然非常便宜。许多客户每天可以免费发送 200 次。
  • 不错的cpanel,但没有关于打开/点击跟踪的深入细节
  • 很多 API 选项。选项(打开/点击跟踪等)可以在逐个电子邮件的基础上自定义。入站(回复)电子邮件可以发布到我们的 HTTP 端点。
  • 发送时绝对零犹豫。发送的每封电子邮件几乎都会立即进入收件箱。
  • 可以从任何名称/地址发送。

结论

SendGrid 是最好的,Postmark 排在第二位。我们从来没有看到这两者中的任何一个在发送时间上有任何犹豫——在某些情况下,我们一次发送了数百封电子邮件——而且它们都具有最好的投资回报率,因为它们具有可靠的功能集。

于 2010-10-13T16:56:24.213 回答
4

这是我最近在我的一个更大的系统上使用 PHP 所做的:

  1. 用户输入时事通讯文本并选择收件人(这会生成查询以检索电子邮件地址以供以后使用)。

  2. 将时事通讯文本和收件人查询添加到 mysql 表中名为 *email_queue* 的行

    • (表 email_queue 有列“to”“subject”“body”“priority”)
  3. 我创建了另一个脚本,它作为 cron 作业每分钟运行一次。它使用SwiftMailer类。这个脚本很简单:

    • 在工作时间,发送所有优先级 == 0 的电子邮件

    • 下班后,按优先级发送其他电子邮件

根据主机设置,我现在可以使用标准的 swiftmailers 插件(如 antiflood 和 throttle...

$mailer->registerPlugin(new Swift_Plugins_AntiFloodPlugin(50, 30));

$mailer->registerPlugin(new Swift_Plugins_ThrottlerPlugin( 100, Swift_Plugins_ThrottlerPlugin::MESSAGES_PER_MINUTE ));

等等等等。

我已经将它扩展到这个伪代码之外,带有附件和许多其他可配置的设置,但只要你的服务器设置正确以发送电子邮件,它就可以很好地工作。(可能不适用于共享主机,但理论上应该......) Swiftmailer 甚至有一个设置

$message->setReturnPath

我现在用它来跟踪反弹...

快乐的足迹!(快乐的电子邮件?)

于 2011-10-25T08:55:15.180 回答