2012-07-27 57 views
1

我使用的是sendmail包和php,当我尝试在PHP中使用邮件功能时,它返回true,但没有发送任何内容。PHP不发送出站邮件

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('[email protected]','Testing','test.')); 

的邮件日志通过CLI显示该

mail() on [/var/www/misc/mail.php:5]: To: [email protected] -- Headers: 

下运行sendmail,因为这:

echo -e "To: [email protected]\nSubject: Test\nTest\n" | sendmail -bm -t -v 

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

任何可能导致PHP无法发送电子邮件的任何东西都知道吗?

回答

6

PHP与邮件传递无关。它的工作开始和结束将邮件交给指定的SMTP代理/服务器。如果mail()没有返回布尔值FALSE,那么PHP的作业已经成功并且不在图片中。

检查您的SMTP服务器的日志,以查看切换完成后电子邮件会发生什么。很可能邮件被拒绝/灰名单/垃圾邮件过滤器被遗忘,因为PHP的mail()确实受到打击。

考虑切换到SwiftmailerPHPMailer,这两者都提供远远好于PHP()的SMTP交互式诊断。

从命令行手动测试意味着很少:您的shell环境与web服务器环境非常不同,脚本可能在苹果和橙子中执行。

+0

我会回应这里的评论,依赖于邮件()是任何应用程序,你不控制和了解如何配置整个服务器环境真的是一个坏主意。我更喜欢使用像SendGrid,Amazon SES(不适合用于营销电子邮件)的服务,或者您只需通过API调用发送邮件的类似服务。如果您只是在测试环境中发送低容量电子邮件,那么许多这些服务都可以使用免费套餐。 – 2012-07-27 16:22:59

+0

结束了去swiftmail,工作的魅力,谢谢 – 2012-07-28 11:12:17

1

这可能会引起误解。 PHP将返回true,因为,至于有关,它已完成其部分。但它不能保证SMTP服务器会遵守请求。

当我碰巧遇到过这种情况,原来我的主机实施了一项新的规定,即所有脚本邮件必须在标题中包含一个“发件人”地址,该地址必须是与托管帐户关联的有效地址。

值得研究这种可能性。