【问题标题】:Is there a SMTP mail transfer library in PHPPHP中是否有SMTP邮件传输库
【发布时间】:2009-08-20 14:12:44
【问题描述】:

我想编写一个电子邮件传输服务,并且需要一个 MTU 替换 sendmail/postfix。

我不是在寻找如何传送到传输 SMTP 服务器(如 SMTP 端口上的后缀列表)。我也不需要服务器的接收部分,退回等会转到不同的现有后缀。

所有这些都在纯 PHP 中。 SMTP 是一个非常简单的协议,但这需要访问 MX DNS 记录和其他需要注意的许多细节。

我为什么需要这个?因为大多数共享互联网提供商对于每天发送 500 封电子邮件的限制非常低。如果您想设置流量最低的电子邮件列表,那几乎没有。

编辑:请注意:代码需要连接到接收方 SMTP 服务器并使用经过调整的标头集(删除 BCC 列表,添加 Path 路由)传递消息。如果您看到 SMTP 类少于 5000 行或需要您配置 SMTP hostip 和端口,那么这不是我要找的东西。

它需要像 PHP 库一样完成 sendmail 所做的所有事情。

【问题讨论】:

  • 我怀疑 PHP 单独可以完成这项工作,你需要 MX 记录,什么不需要。

标签: php smtp


【解决方案1】:

我使用Pear's Mail 类。

编辑

重新阅读后,我发现它不仅仅是一个库。您要求直接发送到远程 MX。

为什么要重新发明轮子?在服务器上设置一个 postfix 实例,它只监听来自 Web 服务器的连接......并让 MTA 做它最擅长的事情。将消息从 php 传递到真正的邮件服务器,然后继续。

在 ISP 阻止出站端口 25 并强制使用智能主机的情况下,这也允许您限制发送到智能主机的消息速率。

最后,从您的 php 脚本直接发送 MX 是一个坏主意,因为如果您发送给我,我将永远不会收到它。我和许多其他网站使用“灰名单”来减少垃圾邮件,这会拒绝所有初始请求并出现 450 临时错误。真正的 MTA 会重试,但除非您实施延迟队列并重试,否则您的消息将永远无法通过。

【讨论】:

  • 不只是一个 SMTP 客户端,但没有 SMTP 邮件传输代理
  • 延迟队列当然在功能列表中。在我阅读您的答案之前,这只是为了可靠性和性能(多个 MX 查找)。答案是为什么很多人只有一个 php 帐户,或者他们无法像我一样安装 postfix(或者不希望它在廉价 VPS 上占用大量内存)——顺便说一下,你无法安装 postfix作为非根。这个 unix 电子邮件 MTU 太糟糕了。每天在其他优秀的网络空间提供商上发送 500 封电子邮件是邮件列表的亮点。我问他为什么不想增加限制,但他不想。
  • 好吧,您仍然可以使用 Pear 的 Net_SMTP 进行连接,并且可能使用 Pear 模块来查找 MX 记录。然后,您可以检查传递尝试的返回代码,并在收到 4xx 错误时自行缓存消息。
【解决方案2】:

我们使用http://sourceforge.net/projects/phpmailer/ 从 PHP 发送 SMTP 电子邮件

【讨论】:

  • 不只是一个 SMTP 客户端,但没有 SMTP 邮件传输代理。
【解决方案3】:

SwiftMailer 是您唯一需要的库。

【讨论】:

  • 不只是一个 SMTP 客户端,但没有 SMTP 邮件传输代理
  • 哦,对不起,我还没有阅读整个问题。我不知道 PHP 中的任何 MTA 实现,抱歉。 =\
  • 我认为你是对的。经过 2 天的密集搜索,我发现只有一个商业产品可以安装在您的站点上,以设置完整的电子邮件服务,包括 SMTP 服务器,如 php cron 作业。但是像 MX 记录查询这样最重要的部分在基本 PHP 中是可用的,我认为是时候自己编写一个系统了。
【解决方案4】:

试试 Zend Framework 组件 Zend_Mail(可以独立于整个框架使用该组件)。

【讨论】:

  • 这不是 MTU 实现。它会将电子邮件发送到您的 SMTP 服务器,但不会发送到接收者的 SMTP 服务器。
【解决方案5】:

这是我写的。它非常小,我不知道它的性能如何,但我写它的目的是替换 sendmail,这意味着它将接收一条消息,查找收件人域的所有 MX 记录,联系那些邮件服务器并发送一个相应收件人的消息。当时它对我来说已经足够好了。

https://github.com/denvertimothy/ThriveSMTP

好久没用了,刚才在Github上扔了。

【讨论】:

    【解决方案6】:

    我使用了http://www.mailerq.com/,它很酷。它是一个基于队列的邮件传输代理。它需要rabbitmq。 它还提供多个工人。易于存储在数据库中。 它还提供了管理控制台。 值得一看

    【讨论】:

      猜你喜欢
      • 2014-08-17
      • 2010-09-21
      • 2023-03-22
      • 1970-01-01
      • 1970-01-01
      • 2010-10-21
      • 2015-09-15
      • 2011-09-04
      • 2016-12-24
      相关资源
      最近更新 更多