建立大型电子邮件通知系统都有哪些方法?

Posted

技术标签:

【中文标题】建立大型电子邮件通知系统都有哪些方法?【英文标题】:What methods exist for setting up a large email notification system?建立大型电子邮件通知系统有哪些方法? 【发布时间】:2011-01-06 23:05:15 【问题描述】:

我的公司有一个使用 php 构建的网站。我们使用内置的 PHP 电子邮件功能每天向订阅者发送数千封电子邮件。

这是一个糟糕的主意。它阻塞了我们的服务器,并且需要几个小时才能完成整个批处理。

现在我已经研究了 MailChimp 之类的群发邮件服务(它将取代我们当前向许多人发送相同电子邮件的系统),但我认为我真正想做的是建立一个稍微复杂的通知系统。

我希望客户能够自定义他们收到的电子邮件的速率和内容,而不是每次发生重要事情时向每个人发送大量电子邮件。

即使使用这个新想法,我们仍然在谈论发送大量电子邮件。

所以我的问题非常具体:我对如何在内部构建系统有一个粗略的了解,但是发送所有这些电子邮件的最佳方式是什么?

要考虑的要点:

有时电子邮件的内容在收件人之间是相同的,但其中许多将针对每个用户进行定制(他们选择收到通知的内容,有时是汇总的)。 我想要一个不会阻塞服务器并且能在相当长的时间内完成的系统。如果需要的话,我不介意使用第三方服务(甚至是付费服务)。 系统应该可以轻松地挂接到 PHP,或者 API 或任何对我来说相对容易从您的典型 Web 服务器调用的东西。 我们有一个专用服务器并对其进行完全控制(因此我们可以安装应用程序、服务等)。 任何类型的详细跟踪信息(打开、点击等)都是一个巨大的优势。 这些电子邮件有时具有时间敏感性(因此不能花一整天时间发送)。

想法?提示?为我指明正确的方向?


编辑

澄清一下:

我可以自己做这些:

维护用户列表 根据用户偏好处理电子邮件内容生成

并且需要其他东西(应用程序、第三方服务、w/e)来:

接受电子邮件内容和地址并实际发送电子邮件 提供跟踪数据(打开、点击等)。越详细越好。

我倾向于使用第三方服务,因为我不确定是否有任何应用程序可以避免在发送数千封电子邮件时阻塞服务器(尽管我不认为自己是电子邮件专家,所以我可能是错的)。

【问题讨论】:

【参考方案1】:

我们使用内置的 PHP 电子邮件功能每天向订阅者发送数千封电子邮件。

这是一个糟糕的主意。它阻塞了我们的服务器,并且需要几个小时才能完成整个批处理。

为什么您认为您的问题与内置的 PHP 电子邮件功能有关?它是一个非常薄的“邮件”包装器或一个简单的 SMTP 客户端,具体取决于您运行的平台。

当您说它阻塞您的服务器时 - 您是指您的电子邮件服务器吗?你的网络服务器?还有什么?

这里没有足够的信息来做出正确的诊断,但问题似乎是您自己造成的 - 当然,有很多人承诺只要您购买最新的产品,就会为您解决所有问题产品/服务。但很有可能这并不能解决您当前的问题。

你能告诉我们吗:

    PHP 运行在什么操作系统上

    如何调用代码来创建电子邮件

    php.ini 文件中的邮件配置是什么

    您使用的是哪种类型的 MTA?在什么操作系统上?

    您的 MTA 是如何配置的 - 它是直接传送还是通过智能中继传送?

    哪个服务器“阻塞”了?

    您对外发邮件采取了哪些反垃圾邮件措施?

然后告诉我们你做了什么来诊断故障以及为什么你认为它专门用于发送邮件。

C.

【讨论】:

Symcbean,感谢您的详尽。永远赞赏!我不知道所有的配置细节,也不知道代码的复杂性(我是新员工)。我会更深入地研究一下,并为您的问题寻找一些答案。我知道我们正在运行 CentOS,并且只有一台机器运行所有东西。 “阻塞”是指我们的网络服务器速度变慢,发送所有电子邮件需要 5 或 6 个小时以上。我认为这是错误的编码和您无法通过典型配置发送那么多电子邮件的事实的结合。 "为什么您认为您的问题与内置的 PHP 电子邮件功能有关?它是一个非常薄的“邮件”包装器或一个简单的 SMTP 客户端,具体取决于您运行的平台在。”并且澄清一下:我的意思从来不是简单的邮件功能是罪魁祸首。很简单,我们正在运行的代码或服务器配置本身是我们发送电子邮件速度的瓶颈。我对电子邮件服务器或配置不是很熟悉,所以我不知道典型的 Web 服务器可以处理出站电子邮件。 我们对电子邮件使用“sendmail”,这是默认设置(“sendmail -t -i”)。 您可能想尝试禁用 MTA 中的消息出列(即实际上将它们发送到门外)并查看填充邮件队列需要多长时间,然后打开出列并查看多长时间需要清除积压 - 这样您就可以从其他地方渗出 MTA 的问题。如果这是 MTA 上的问题,那么我建议您开始另一个主题。 OTOH,如果 MTA 仍然运行缓慢,请尝试在 PHP 代码中注释掉对 mail() 的调用,看看运行脚本需要多长时间。 HTH【参考方案2】:

我建议使用第三方邮件服务Silverpop,或类似的东西。我们已经使用了几年并且相当满意。他们已经与主要的电子邮件客户端(AOL、Yahoo!、Gmail 等)建立了合作关系,并且可以很好地告诉您您发送的内容是否可能被归类为垃圾邮件。

他们有一个相当广泛的 API,它使用可以绑定到现有系统的 XML HTTP/HTTPS 请求。您可以使用它来远程触发电子邮件、安排邮件发送、自定义电子邮件内容、设置、管理和查询庞大的收件人列表、运行批处理等。

这不是一项完美的服务,但与那里的许多其他服务相比,他们做得很好。到目前为止,我对他们的投诉很少。

【讨论】:

【参考方案3】:

我通常通过使用邮件“发送”功能来解决这个问题,该功能将电子邮件转储到队列(数据库表)中,每几分钟运行一次作业,抓取队列中的下 x 封电子邮件,将它们发送出去并将它们标记为成功。这就是它的简单骨头。然后,您可以在版本 2 中添加对电子邮件故障、退回邮件等的处理。

【讨论】:

我目前正在使用这种方法。我的托管公司允许我每个域每小时最多发送 200 封电子邮件。因此,我使用 cronjob 处理队列和时间。它工作得很好,而且实现起来有点简单。 发布此内容后,杰基尔博士让我回过头来并附上一个警告:在构建这个内部系统之前,一定要问自己为什么要这样做。如果它满足需求/如果它满足需求并且您没有其他工作要做,那很好。如果您认为这样做很有趣,但可以通过第 3 方选项来解决(理论上已经清除了大多数主要错误),那么这是一个坏主意。 汤姆,感谢您的细心考虑。我的首要目标是,无论我做什么,功能丰富、错误少、与他人相处融洽,并且可以在未来轻松扩展。这几乎就像使用第三方应用程序/服务而不是我自己构建的东西的指南针。另外,一般来说,我倾向于为这类事情提供云类型的服务,所以我不必担心细节。让 MailChimp 等的专家担心不被标记为垃圾邮件或跟踪打开/点击的最佳技术。 如果您有一个正确配置的 MTA,那么这实际上会减慢邮件处理速度 - 排队邮件是 MTA 的功能,它应该比您自己的更有效代码。【参考方案4】:

如果您担心可扩展性和自定义,请使用 Google AppEngine:它提供了一个电子邮件 API,您可以通过 HTTP 接口与它连接任何东西。

当然,这只是一个建议 - 如果不合适,请忽略。

【讨论】:

【参考方案5】:

可能不太理想,但如果您正在研究大规模传输,则可以设置诸如 Port 25's PowerMTA 之类的商业解决方案以有效传输给定文件夹的内容。

因此,您只需使用 PHP 为每封出站电子邮件创建个性化的 MIME 格式的原始数据,并在传输之前将这些数据放在一个临时目录中。 (我过去曾编写过这样的系统,您会惊讶于 PHP 能够处理电子邮件,即使是非常复杂的文本和带有图像作为内联附件的 html 电子邮件等。)一旦你准备好了传输,然后您将文件整体移动到 PowerMTA 监控的文件夹,它会负责传输。

根据您的看法,这种解决方案的好处/问题是您需要与 AOL、MSN/Hotmail 等人建立信任关系,以确保您的邮件服务器不被列入黑名单由于用户将电子邮件报告为垃圾邮件。 (也就是说,这可能是任何 DIY 解决方案的一个因素。)

【讨论】:

【参考方案6】:

为什么不保留您的 PHP 系统并使用第三方 SMTP 服务?一些可靠的公司以合理的价格提供仅用于发送电子邮件的机器,例如Dewahost我打算用谁。

另请参阅问题Third Party Email Senders 和我的答案。

【讨论】:

【参考方案7】:

查看Campaign Enterprise 了解可能的内部解决方案。

【讨论】:

【参考方案8】:

我的一个朋友使用http://www.tailoredmail.com,但我没有亲自使用过

【讨论】:

【参考方案9】:

我知道这是一个较老的问题,但我只是想建议SendGrid,它本质上是一个“电子邮件服务器即服务”,允许您以每封电子邮件的成本发送电子邮件。

【讨论】:

以上是关于建立大型电子邮件通知系统都有哪些方法?的主要内容,如果未能解决你的问题,请参考以下文章

电子商务网站一般架构都有哪些

电子商务网站一般架构都有哪些

开源的linux运维监控工具都有哪些

电子排版系统中,用户文件都有哪些

国内都有哪些好的java开源电子商城系统

Java可以应用到哪些领域?