【问题标题】:can php send email without mail server installed in server?php 可以在服务器中未安装邮件服务器的情况下发送电子邮件吗?
【发布时间】:2013-01-08 05:37:03
【问题描述】:

我知道我们可以使用不同主机上的 smtp 服务器从 php 发送电子邮件,或者如果安装了本地 smtp 服务器。我想知道的是php可以在没有任何本地或远程smtp服务器的情况下发送电子邮件吗?我听说过 sendmail 程序,但它可以在服务器中不安装任何邮件服务器的情况下运行吗?

【问题讨论】:

    标签: smtp


    【解决方案1】:

    在某些时候,您必须与 SMTP 服务器通信。通过本地主机上的 SMTP 服务器发送是最干净的选择,并且最有可能成功通过垃圾邮件过滤器。

    邮件服务器的工作相当复杂。让我们将您的平均电子邮件从您的电子邮件客户端到达您的电子邮件服务器,并将出站主机作为目的地:

    1. 服务器会检查您的用户帐户并确保其有效。
    2. 电子邮件会单独进入每个收件人的队列,或者作为一条消息进入队列(取决于服务器)。
    3. 服务器在队列中找到电子邮件并处理每个收件人地址。这需要 DNS 查找每个目标域的 MX 记录。
    4. 电子邮件服务器连接到 MX 记录指定的地址,并像通过 SMTP 一样将电子邮件传递给它。
    5. 成功后,电子邮件将从队列中删除。失败时,电子邮件可能会保留在队列中,服务器稍后会重试(指数退避 - 请参阅灰名单)或放入邮件队列中,以便稍后在您通过 POP3 检查电子邮件时返回给您。

    队列中的下一个电子邮件服务器然后重复上述操作,直到最后一个服务器收到电子邮件并进入收件人的邮箱。

    在 PHP 中这样做是可能的,但我不建议这样做。 MX 记录查找可能很棘手,因为人们会做各种邮件服务器可以容忍的不合规的事情。此外,您的脚本在尝试直接连接到目标 SMTP 服务器时可能会超时。一些服务器还配置了“灰名单”电子邮件,这意味着电子邮件最初会被拒绝,但稍后会被接受(例如 30 分钟并不罕见)。一般的 PHP 脚本无法处理这种情况。

    【讨论】:

    • 嗯,在某些时候,某些地方必须与 SMTP 服务器通信。这就是电子邮件的工作原理。如果 PHP(以及任何语言)遵循 SMTP 协议,它可以直接与 SMTP 服务器对话。它很快就会变得混乱,因为发送电子邮件实际上是一个复杂的话题。 (我们有大约 12 个当前的 RFC 和大量过时的 RFC,每个 RFC 平均有 50 页左右。)这就是为什么人们将电子邮件从 PHP 传递到可靠的东西,比如本地 SMTP 服务器来处理消息。 'sendmail' 直接将邮件放到本地队列中发送。
    • 对于'sendmail',它将电子邮件放入队列中,以便本地邮箱的SMTP服务器发送出去。因此,它往往比连接和与本地 SMTP 服务器对话更快。因为它是一个 *NIX OS 程序,所以你不能保证你的 PHP 代码会在任何地方运行。我倾向于使用可移植的代码,因此我不会将自己束缚在单个系统上。
    猜你喜欢
    • 2011-06-25
    • 2010-10-12
    • 2011-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-11
    • 2011-03-07
    相关资源
    最近更新 更多