【问题标题】:Difference between PHP mail function and using email delivery service like Sendgrid, MandrillPHP邮件功能与使用Sendgrid、Mandrill等邮件投递服务的区别
【发布时间】:2016-01-16 18:49:40
【问题描述】:

我正在构建一个程序,需要根据某些事件发送多封电子邮件。我使用 PHP 邮件函数进行了编码,但被建议不要使用它。

有人能解释一下 PHP 邮件功能的工作原理与使用 Sendgrid、Mandrill 等商业服务之间的区别吗?既然我可以很好地使用免费的 PHP 邮件功能来发送邮件,为什么还要使用这些服务?

【问题讨论】:

  • 恕我直言,如果您注意正确创建标头,则使用 mail() 函数没有任何问题。如果您可以在this SO Q&A 中看到错误的标头元素,则会出现一些问题
  • 如果您拥有并维护自己的邮件服务器,并且不想使用这些服务可能提供的任何附加功能,那么您可能不需要这些服务。并非每个人都维护(或想要维护)自己的邮件服务器,并且某些用例需要额外的功能,而这些功能的开发成本更高。

标签: php email


【解决方案1】:

批量邮件和活动管理是一项复杂的组织和技术挑战,但大多数用于电子邮件的开源 php lib 都无济于事(它只是添加了 html 格式和对附件的支持)。

他们不会处理IPRSPF、避免垃圾邮件陷阱、bounce handlingthrottling、订阅管理等。哪些好的批量电子邮件提供者提供。

如果您知道自己在做什么,对您的系统和 NS 记录拥有完整的管理员权限,并且有时间编写代码,那么,是的,您可以构建相同的服务 - 但不仅仅是将蚂蚁与大象进行比较 - 它是比较扳手变橙子。

【讨论】:

    【解决方案2】:

    您无法使用此功能一次性发送大量电子邮件。 例如,如果您想向 10 万用户发送电子邮件,则必须遍历电子邮件 ID。是的,您可以使用 cc,但如果您有一个模板,在每封电子邮件中都会添加用户名,例如:

    Dear User abc

    您必须一一发送。除非你使用多个进程,否则你无法在邮件功能中实现这种突发电子邮件拍摄功能。

    MailQueue 不错,但我用过,它做同样的事情,将电子邮件保存到数据库中,然后将电子邮件出列并逐一发送。

    我们也有swift mailer

    同样,这是您的要求。如果您不需要发送数百条时间敏感的通知,那么您就不需要这些工具。

    【讨论】:

      【解决方案3】:

      将 mail() 与商业服务进行比较就像将蚂蚁与大象进行比较。如果您不需要大量自定义,mail() 对于来自服务器的一些快速通知很有用,但是如果您想做一些类似电子邮件活动的事情,您将不得不做很多额外的服务器设置并在您的邮件周围构建大量自定义功能() 功能。商业服务适用于广告系列,但不适用于通知(恕我直言浪费金钱)。尝试使用一些开源 php lib 来处理电子邮件,它会为您整理出很多自定义功能。

      【讨论】:

        【解决方案4】:

        首先,就职业而言,我是全球 ESP“Pepipost”的一员,它帮助品牌最多向其客户发送关键业务触发和交易电子邮件。

        但是,我在这里回答这个问题的目的不是为了推广 ESP over PHP 邮件功能。我将与您分享我们在 Pepipost Labs 研究期间观察到的一些事实。

        1. PHP 邮件功能只是生成电子邮件的基本方法/核心功能。但是,它无法大规模地传递您的电子邮件,也无法帮助提高可传递性,这两者都是任何企业的关键。

        2. 随着更复杂的技术和算法的发展,ISP(Gmail、雅虎、Outlook 等)和垃圾邮件过滤器变得越来越智能。在到达邮箱之前,每封电子邮件都会通过所有这些过滤器,在这些过滤器中扫描内容、信誉和其他参数。因此,拥有良好的知名 IP 和信封域非常重要。

        3. 一旦电子邮件到达收件人服务器,它将被传递、限制或退回。如果出现退回、垃圾邮件投诉、退订,收件人服务器将与您的服务器通信,在这种情况下,您需要妥善处理所有这些情况,否则您的域和 IP 的声誉将会下降。

        在节流的情况下,需要另一组复杂的交付逻辑。

        简而言之,如果您打算发送几百封电子邮件,那么 PHP 邮件功能可能可以使用,但要进一步扩展,使用好的 ESP(电子邮件服务提供商)很重要。

        【讨论】:

          【解决方案5】:

          Mail() 函数在 *nix 系统上工作非常简单,它只是执行本地命令sendmail 来发送消息。它确实有以下缺点:

          • 不能在许多廉价的托管环境中工作
          • 如果邮件被发送 MTA 接受,您没有任何信息,它可能会被拒绝或隔离或永远留在本地队列中
          • 在某些环境中,由于错误的 EOL 字符(\r\r\n 而不是 \r\n),它可能会生成乱码标题

          我认为你应该使用像PHPMailerSwift Mailer 这样的开源库,因为它除了发送邮件之外还有更多的功能。 这些库的一些优点:

          • 您可以轻松发送带有附件和图像的 HTML 邮件
          • 您可以通过外部 SMTP 服务发送邮件
          • 他们有 DKIM 和 S/MIME 签名支持

          PS。我不使用 Sendgrid、Mandrill 等商业服务,因此无法比较。

          【讨论】:

          • 不受支持的断言,例如“有很多缺点”和“更多功能”不是很有帮助。您提到的产品中的额外功能与参数验证、格式设置和与 MTA 的连接性有关——这些都与原始问题无关。
          • 我添加了一些库的优点和mail()函数的缺点。
          • 你的缺点都不是使用 mail() 的结果,所有的优点都可以通过使用 mail() 和 PHP 中的其他代码来实现。
          • 我不同意。您无法使用 mail() 通过外部 SMTP 服务发送邮件,并且您无法编写代码以避免某些服务器上出现乱码的标题或确保您的消息已发送 - 这些特定于使用 mail() 正在使用的本地 sendmail .
          • 您认为“本地发送邮件”如何传递邮件?再多的 PHP 代码也不会改变远程 MTA 的行为。
          猜你喜欢
          • 1970-01-01
          • 2011-08-19
          • 1970-01-01
          • 2018-11-11
          • 1970-01-01
          • 2020-01-25
          • 1970-01-01
          • 2017-12-04
          • 2016-04-12
          相关资源
          最近更新 更多