如何找出PHP和sendmail是否一起工作?

时间:2011-03-20 09:57:21

标签: php email command-line terminal sendmail

当我使用终端发送电子邮件时,工作正常。我使用以下命令:

echo "Subject: test" | /usr/lib/sendmail -v you@domain.com

但是当我在PHP中尝试这个时:

PHP文档:

<?php bool mail ( string $to , string $subject , string $message [, string $additional_headers [, string $additional_parameters ]] ) ?>

我的实施:

<?php mail("you@domain.com", "my topic", "my message contents", "From: me@domain.com"); ?>

,然后它无法正常工作。这是为什么?我想这与PHP的php.ini文件有关吗?

我配置的所有内容:

  • 打开php.ini:

    nano /etc/php5/apache2/php.ini

  • 取消注释sendmail_path并写:

    sendmail_path = /usr/sbin/sendmail

  • 取消注释sendmail_from并写:

    sendmail_from = me@domain.com

  • 重启apache:

    /etc/init.d/apache2 restart

情况可能如何?为了使这个更清楚:我希望PHP能够通过电子邮件发送!

修改

  • PHP mail()函数返回FALSE。
  • for php.ini:将/usr/sbin/sendmail更改为/usr/lib/sendmail(或其他方式)似乎没有任何区别
  • 对于终端命令:将/usr/sbin/sendmail更改为/usr/lib/sendmail(或其他方式)似乎没有任何区别
  • 我将邮件发送到我自己的域和gmail,两者都没有垃圾邮件文件夹中的邮件。

Sendmail的日志文件:

root@machine:/var/log# cat mail.warn

root@machine:/var/log# cat mail.err

root@machine:/var/log# cat mail.log
Mar 20 10:17:09 machine sendmail[12249]: p2K9H2R9012249: from=root, size=0, class=0, nrcpts=1, relay=root@localhost
Mar 20 10:17:20 machine sendmail[12253]: p2K9HImw012253: from=root, size=0, class=0, nrcpts=0, relay=root@localhost
Mar 20 10:17:25 machine sendmail[12255]: p2K9HOAC012255: from=root, size=0, class=0, nrcpts=1, relay=root@localhost
Mar 20 10:20:00 machine sendmail[12277]: p2K9K09k012277: from=root, size=14, class=0, nrcpts=3, msgid=<201103200920.p2K9K09k012277@machine.domain.com>, relay=root@localhost
Mar 20 10:20:00 machine sm-mta[12279]: p2K9K0Ge012279: <-r@machine.domain.com>... User unknown
Mar 20 10:20:00 machine sendmail[12277]: p2K9K09k012277: to=-r, ctladdr=root (0/0), delay=00:00:00, xdelay=00:00:00, mailer=relay, pri=90014, relay=[127.0.0.1] [127.0.0.1], dsn=5.1.1, stat=User unknown
Mar 20 10:20:00 machine sm-mta[12279]: p2K9K0Ge012279: from=<root@machine.domain.com>, size=290, class=0, nrcpts=2, msgid=<201103200920.p2K9K09k012277@machine.domain.com>, proto=ESMTP, daemon=MTA-v4, relay=localhost [127.0.0.1]
Mar 20 10:20:00 machine sm-mta[12279]: STARTTLS=client, relay=gmail-smtp-in.l.google.com., version=TLSv1/SSLv3, verify=FAIL, cipher=RC4-SHA, bits=128/128
Mar 20 10:20:02 machine sm-mta[12279]: p2K9K0Ge012279: to=<you@domain.com>, ctladdr=<root@machine.domain.com> (0/0), delay=00:00:02, xdelay=00:00:02, mailer=esmtp, pri=60290, relay=gmail-smtp-in.l.google.com. [74.125.77.27], dsn=2.0.0, stat=Sent (OK 1300612802 w59si3196382eeh.92)
Mar 20 10:20:02 machine sm-mta[12279]: STARTTLS=client, relay=aspmx.l.google.com., version=TLSv1/SSLv3, verify=FAIL, cipher=RC4-SHA, bits=128/128
Mar 20 10:20:04 machine sm-mta[12279]: p2K9K0Ge012279: to=<you2@domain.com>, ctladdr=<root@machine.domain.com> (0/0), delay=00:00:04, xdelay=00:00:02, mailer=esmtp, pri=60290, relay=aspmx.l.google.com. [74.125.79.27], dsn=2.0.0, stat=Sent (OK 1300612804 p50si3196335eei.44)
Mar 20 10:20:04 machine sendmail[12277]: p2K9K09k012277: to=you2@domain.com,you@domain.com, ctladdr=root (0/0), delay=00:00:04, xdelay=00:00:04, mailer=relay, pri=90014, relay=[127.0.0.1] [127.0.0.1], dsn=2.0.0, stat=Sent (p2K9K0Ge012279 Message accepted for delivery)
Mar 20 10:20:04 machine sendmail[12277]: p2K9K09k012277: p2K9K09l012277: DSN: User unknown
Mar 20 10:20:04 machine sm-mta[12279]: p2K9K0Gg012279: from=<>, size=1921, class=0, nrcpts=1, msgid=<201103200920.p2K9K09l012277@machine.domain.com>, proto=ESMTP, daemon=MTA-v4, relay=localhost [127.0.0.1]
Mar 20 10:20:05 machine sm-mta[12279]: p2K9K0Gg012279: to=<root@machine.domain.com>, delay=00:00:01, xdelay=00:00:01, mailer=local, pri=31921, dsn=2.0.0, stat=Sent
Mar 20 10:20:05 machine sendmail[12277]: p2K9K09l012277: to=root, delay=00:00:01, xdelay=00:00:01, mailer=relay, pri=31038, relay=[127.0.0.1] [127.0.0.1], dsn=2.0.0, stat=Sent (p2K9K0Gg012279 Message accepted for delivery)
Mar 20 10:25:11 machine sendmail[12321]: p2K9PBC3012321: from=root, size=14, class=0, nrcpts=1, msgid=<201103200925.p2K9PBC3012321@machine.domain.com>, relay=root@localhost
Mar 20 10:25:11 machine sm-mta[12323]: p2K9PBLe012323: from=<root@machine.domain.com>, size=318, class=0, nrcpts=1, msgid=<201103200925.p2K9PBC3012321@machine.domain.com>, proto=ESMTP, daemon=MTA-v4, relay=localhost [127.0.0.1]
Mar 20 10:25:11 machine sm-mta[12323]: STARTTLS=client, relay=gmail-smtp-in.l.google.com., version=TLSv1/SSLv3, verify=FAIL, cipher=RC4-SHA, bits=128/128
Mar 20 10:25:12 machine sm-mta[12323]: p2K9PBLe012323: to=<you@domain.com>, ctladdr=<root@machine.domain.com> (0/0), delay=00:00:01, xdelay=00:00:01, mailer=esmtp, pri=30318, relay=gmail-smtp-in.l.google.com. [74.125.77.27], dsn=2.0.0, stat=Sent (OK 1300613112 u12si3204796eeh.99)
Mar 20 10:25:12 machine sendmail[12321]: p2K9PBC3012321: to=you@domain.com, ctladdr=root (0/0), delay=00:00:01, xdelay=00:00:01, mailer=relay, pri=30014, relay=[127.0.0.1] [127.0.0.1], dsn=2.0.0, stat=Sent (p2K9PBLe012323 Message accepted for delivery)
Mar 20 11:00:17 machine sendmail[12567]: p2KA0HX9012567: from=root, size=20, class=0, nrcpts=1, msgid=<201103201000.p2KA0HX9012567@machine.domain.com>, relay=root@localhost
Mar 20 11:00:17 machine sm-mta[12568]: p2KA0HNn012568: from=<root@machine.domain.com>, size=324, class=0, nrcpts=1, msgid=<201103201000.p2KA0HX9012567@machine.domain.com>, proto=ESMTP, daemon=MTA-v4, relay=localhost [127.0.0.1]
Mar 20 11:00:17 machine sm-mta[12568]: STARTTLS=client, relay=gmail-smtp-in.l.google.com., version=TLSv1/SSLv3, verify=FAIL, cipher=RC4-SHA, bits=128/128
Mar 20 11:00:18 machine sm-mta[12568]: p2KA0HNn012568: to=<you@domain.com>, ctladdr=<root@machine.domain.com> (0/0), delay=00:00:01, xdelay=00:00:01, mailer=esmtp, pri=30324, relay=gmail-smtp-in.l.google.com. [74.125.77.27], dsn=2.0.0, stat=Sent (OK 1300615218 w59si3268114eeh.65)
Mar 20 11:00:18 machine sendmail[12567]: p2KA0HX9012567: to=you@domain.com, ctladdr=root (0/0), delay=00:00:01, xdelay=00:00:01, mailer=relay, pri=30020, relay=[127.0.0.1] [127.0.0.1], dsn=2.0.0, stat=Sent (p2KA0HNn012568 Message accepted for delivery)
Mar 20 11:16:23 machine sendmail[12675]: p2KAGNg8012675: from=www-data, size=188, class=0, nrcpts=0, msgid=<201103201016.p2KAGNg8012675@machine.domain.com>, relay=www-data@localhost
root@machine:/var/log# 

EDIT2:

我找到了解决方案!

正如我所料,它是php.ini中的配置。

在php.ini中:

sendmail_path = /usr/sbin/sendmail **-t -i**

现在,让我们试着理解为什么,因为我在this site找到了-t然后我在php.ini文件中找到了-i。 -t和-i是什么意思?

-t    从邮件标头中提取收件人。这些将添加到命令行中指定的任何收件人。对于2.1之前的Postfix版本,此选项要求在命令行中未指定收件人地址。

-i    从标准输入读取消息时,不要仅使用a处理行。字符作为输入的结尾。

source

希望我能帮助那些遇到类似问题的人。

2 个答案:

答案 0 :(得分:1)

  

情况可能如何?为了使这个更清楚:我希望PHP能够通过电子邮件发送!

案例或更好的原因是,mail()函数和sendmail是两双不同的鞋子。它们本身并不相关。

因此,只因为您可以使用sendmail程序发送电子邮件,这并不意味着php mail()函数也会发送电子邮件。

您面临的是PHP安装的配置问题。 PHP默认发送电子邮件非常好,但PHP无法知道所有设置,所以如果mail()失败,你需要检查是否已经正确配置PHP来发送电子邮件。

PHP手册是mail() function的一个良好开端,了解更多配置,获取大量笔记和通知以及相关信息。

第一次完整性检查 - 正如其他人已经评论过的 - 是检查mail()函数的返回值。如果它是假的,那么PHP知道发送邮件失败了。

如果确实如此,但仍然没有收到电子邮件(out),那么其他一些组件对于进一步传输电子邮件没有帮助。您需要检查传输的整个链并且 - 只是为了使其变粗 - 您的整体配置中可能会出现多个错误,这些错误会阻止您通过PHP发送电子邮件,即使您能够从shell发送一些邮件也是如此。

如果这对您来说太复杂,我建议您与可以帮助您解决问题的系统管理员联系。

顺便说一句,您可以编写自己的包装并使用shell命令发送电子邮件:shell_exec,请注意。

答案 1 :(得分:0)

您可以先查看邮件日志文件。它的位置取决于您的系统,但可以在标准Ubuntu安装的/var/log/mail.log中找到它。您应该尝试运行PHP代码,然后检查是否记录了任何内容。