我似乎无法使用 PHP 的 mail() 发送电子邮件。我也尝试过 PHPMailer 和 Swiftmail,但没有成功。但是,服务器上的以下命令成功发送邮件。
cat test.txt | mail -s "test mail" my@email.com
有没有办法追踪问题的来源?mail() 似乎只是返回真或假。
使用 error_reporting(E_ALL) 启用所有错误、警告和通知。让错误出现在有用的地方或注册一个回调来做一些有用的事情。
然后你会看到发生了什么。默认情况下,PHP 错误处理是无用的(并且它的默认值在各处都不同,因此您必须在实践中覆盖它)。
它很可能被配置为对本地主机执行 SMTP,而您的 MTA 不允许从中中继。更改其配置以改用 sendmail,或修复您的 MTA 以允许从 localhost 中继。
在 PHP >= 5.2 上,error_get_last()
可以检索最后一个函数调用返回的任何错误。链接页面上有关于如何从旧版本的 PHP 获取等效信息的详细信息。
至于 PHPMailer,有$mailer->ErrorInfo
一个包含最后发生的错误的属性。SwiftMailer 必须有类似的东西。最有可能的是,如果邮件是从命令行运行的,而不是从 PHP 或邮件库中运行的,则可能是配置错误。我猜你的主机没有sendmail_path
配置 PHP ini 参数。