【问题标题】:PHP sendmail works in Ubuntu command line, but not from a php filePHP sendmail 在 Ubuntu 命令行中工作,但不是来自 php 文件
【发布时间】:2011-07-06 02:28:00
【问题描述】:

我在 Ubuntu 上使用 PHP 和 apache 安装了 sendmail。当我尝试以下命令行时

php -r "mail('test@gmail.com', 'test', 'test')"'

它成功发送了电子邮件。

但是,运行文件“test_send_mail.php”:

<?php
mail('test@gmail.com', 'test', 'test')
?>

不发送电子邮件。

使用 .php 文件的不成功尝试会生成日志条目:

`Jul  5 21:24:47 www sendmail[25603]: p661OlL7025603: from=www-data, size=106, class=0,

nrcpts=0, msgid=, relay=www-data@localhost

使用命令行的成功尝试会生成日志条目:

    Jul  5 21:22:40 www sm-mta[25533]: p661MevV025533: from=<root@www.server.com>, 
size=352, class=0, nrcpts=1, msgid=<201107060122.p661Mecm025532@www.server.com>, 
proto=ESMTP, daemon=MTA-v4, relay=localhost [127.0.0.1]

有人知道会发生什么吗?感谢您的帮助!

【问题讨论】:

  • PHP mail() 函数实际上是相当有限和古怪的。如果您打算向您网站的用户或为您网站的用户发送电子邮件,您应该使用适当的库,例如 PHPMailer。这为您提供了附件处理和更好的标头支持等功能。
  • 来吧,邮件可以发送任何东西,包括附件等等。还有更多关于发送电子邮件的传输。在 PHPMailer 的情况下,它主要使用 SMTP,而邮件功能使用 linux sendmail 程序。它似乎是为 root 用户配置的,但不是为 www-data

标签: php apache ubuntu sendmail


【解决方案1】:

PHP 根据环境有单独的ini 文件:

  • cli/php.ini
  • cgi/php.ini
  • php.ini

确保您已对所有文件进行了所有适当的更改,cgi 通常用于 Nginx 和 Lighttpd,但请确保复制所有 3 个中的设置。

您还可以运行phpinfo(); 函数来查看实际使用的设置。

这也可能是直接修复:PHP mail issue with www-data

【讨论】:

    【解决方案2】:

    您的失败尝试是以网络服务器的用户身份发送电子邮件。你可能不想这样做。关键是将更多参数传递给mail(),以便在将电子邮件传递给您的注入器时覆盖这些默认值。

    mail() 的手册页上查看 cmets,会有很多帮助。

    【讨论】:

      猜你喜欢
      • 2013-12-18
      • 2012-02-12
      • 2013-08-19
      • 2010-11-30
      • 2012-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-05
      相关资源
      最近更新 更多