【问题标题】:PHP mail() function and scalabilityPHP mail() 函数和可扩展性
【发布时间】:2011-08-29 01:23:04
【问题描述】:

假设我的网站增长到每天需要发送成百上千封电子邮件...... PHP mail() 函数是否仍然足以作为这种情况的解决方案,或者我是否必须实施替代解决方案?如果是这样,在这种情况下我应该寻求什么解决方案?

【问题讨论】:

  • 这是一个性能问题,但我认为使用邮件功能或套接字连接是相同的,我的意思是 SMTP 直接连接。
  • 忘记你听说过 PHP 的 mail() 函数。这相当于您在美元商店购买的螺丝刀。它会工作一次或两次,然后会以惊人而可怕的方式失败。请改用 PHPMailer 或 Swiftmailer 等真正的邮件包。

标签: php email scalability


【解决方案1】:

数十万并不容易。从技术上讲,这是可能的,应该没有什么可以阻止你,但不要指望它是一件容易的事。

“必须”发送该金额的网站必须考虑 DKIM 签名,这是一个耗时的过程。

例如,假设一封电子邮件需要 0.5 秒的时间进行签名、排队和处理。这只是一个示例:

100,000 封电子邮件 = 50,000 秒 = 13.5 小时

要做到这一点,您必须考虑购买 X 台 VPS 服务器(最好在多个地理位置)并将每个服务器定义为邮件中继。然后使用队列系统使用所有这些网关发送邮件。

假设您有 6 个邮件中继服务器,上述相同的 10 万封电子邮件将在 2 小时内发送出去。

希望这能清除一些想法。

【讨论】:

    【解决方案2】:

    mail() 每次发送消息时都会打开和关闭一个套接字,所以不,这不是最好的主意,因为这些操作效率很低。

    更好的解决方案是使用PHP的PEAR Mail extension;这是为发送电子邮件而设计的大量

    作为 PEAR Mail 的扩展,还有 Mail_queue 将消息放入队列并在后台发送。在您的情况下,这可能是一个更好的选择。

    【讨论】:

      【解决方案3】:

      它会起作用,但它会很慢(比如需要几个小时)。您绝对应该研究一些用于处理此类事情的商业软件包。

      退房 - http://sendgrid.com/

      它很容易设置,相当便宜,而且它们保证您的邮件能够到达您的客户!

      【讨论】:

      • 广告?如果没有,请在答案的页脚中添加一个小免责声明,以便人们知道您不是试图在这里赚钱的会员;)人们害怕点击您知道;)
      • 不是广告...之前只是用它来做一些类似于海报想要的东西。免责声明:我不为 sendgrid.com 工作,也不关心它,我只是认为这是一项很好的服务。
      猜你喜欢
      • 2018-01-27
      • 2012-05-03
      • 2011-11-18
      • 2018-04-26
      • 2013-07-15
      • 2020-07-25
      • 2016-07-26
      • 1970-01-01
      • 2022-11-24
      相关资源
      最近更新 更多