【问题标题】:PHP not sending outbound mailPHP不发送出站邮件
【发布时间】:2012-07-27 16:10:49
【问题描述】:

我正在使用 sendmail 包和 php,当我尝试在 PHP 中使用 mail 函数时,它返回 true 但没有发送任何内容。

php 配置

; For Unix only.  You may supply arguments as well (default: "sendmail -t -i").
; http://php.net/sendmail-path
sendmail_path =/usr/sbin/sendmail -t -i

php 文件

error_reporting(E_ALL|E_STRICT);
ini_set('display_errors', 1);
trace(mail('jamie@domain.tld','Testing','test.'));

邮件日志显示这个

mail() on [/var/www/misc/mail.php:5]: To: jamie@domain.tld -- Headers: 

通过 CLI 运行 sendmail,如下所示:

echo -e "To: jamie@domain.tld\nSubject: Test\nTest\n" | sendmail -bm -t -v

返回“发件人正常”、“收件人正常”

任何人都知道可能导致 php 不发送电子邮件的任何事情吗?

【问题讨论】:

    标签: php sendmail


    【解决方案1】:

    PHP 与邮件传递无关。它的工作以将电子邮件移交给指定的 SMTP 代理/服务器开始和结束。如果mail() 没有返回布尔值 FALSE,那么 PHP 的工作就成功了,它不在画面中了。

    检查您的 SMTP 服务器的日志,了解移交完成后电子邮件会发生什么情况。邮件很可能被拒绝/灰名单/垃圾邮件过滤到遗忘,因为 PHP 的 mail() 真的很糟糕。

    考虑切换到SwiftmailerPHPMailer,这两者都比mail() 提供了更好的PHPSMTP 交互诊断。

    从命令行手动测试意义不大:您的 shell 环境与您的脚本可能在其中执行的网络服务器环境非常不同 - 苹果和橘子。

    【讨论】:

    • 我会回应这里的评论,对于无法控制和了解如何配置整个服务器环境的任何应用程序,依赖 mail() 确实是一个坏主意。我更喜欢使用 SendGrid、Amazon SES(不适用于营销电子邮件)或类似的服务,您只需通过 API 调用发送邮件。如果您只是在测试环境中发送少量电子邮件,其中许多服务都有免费套餐可供您使用。
    【解决方案2】:

    这可能会产生误导。 PHP 将返回 true,因为就 its 而言,它已经完成了自己的职责。但它不能保证 SMTP 服务器会接受请求。

    当这种情况发生在我身上一次时,我发现我的主机已经实施了一项新规定,即所有脚本邮件的标头中必须包含一个“发件人”地址,该地址必须是与主机帐户关联的有效地址。

    可能值得研究这种可能性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-11
      • 2016-02-12
      相关资源
      最近更新 更多