PHP“邮件()”函数从PHP5 CLI发送邮件而不是当脚本由浏览器中运行

问题描述 投票:2回答:3

我已经配置我的服务器在“/etc/php5/apache2/php.ini”与sendmail是安装在服务器上设置"sendmail_path = "/usr/sbin/sendmail"发送邮件。

当我通过CLI运行此脚本,或者它的任何变化,从PHP5邮件发送就好了,但是当我有一个浏览器中运行它,即Chrome或Firefox,它每次失败。

<?php
 $to = "[email protected]";
 $subject = "Hi!";
 $body = "Hi,\n\nHow are you?";
 if (mail($to, $subject, $body)) {
   echo("<p>Message successfully sent!</p>");
  } else {
   echo("<p>Message delivery failed...</p>");
  }
?>

我使用了“PHP5-CLI”包一个命令行解释。

依赖于PHP其他基于PHP的web-app的“邮件()”函数没有任何发送邮件。

php email apache2 lamp
3个回答
3
投票

Apache和CLI的似乎在你的安装使用不同的配置。

在您的Apache的/etc/php5/cli/php.ini php.ini比较配置。可能是一些不与Apache的PHP sendmail的配置和CLI配置工作是正确的。


1
投票

首先,您需要验证当前的设置是你认为它是一个:

var_dump(ini_get('sendmail_path'));

如果它在Web和CLI不同,PHP可能是不同的php.ini文件。运行此:

phpinfo(INFO_GENERAL);

......找到这部分(您的值将与我的不同):

Configuration File (php.ini) Path => C:\Windows
Loaded Configuration File => C:\Program Files\PHP\php.ini
Scan this dir for additional .ini files => (none)
Additional .ini files parsed => (none)

这将帮助你确定你需要编辑php.ini文件。

(不管结果如何,它的怪异,这个来自错误配置的Linux服务器。)


1
投票

当您从CLI运行PHP它运行在您登录到Linux帐户。当您从运行Apache运行PHP作为Apache下运行,通常是“没有人”用户

这可能有几个原因邮件从“无人”失败 - 一些垃圾邮件过滤器将拒绝它。

另外,我不知道你是什么意思“失败” - 根本没有收到您所期望并不意味着它没有发送的电子邮件。你应该检查你的邮件日志,通常在/ var /日志/ maillog中,只是从浏览器上运行脚本后检查最新的几行字在日志类型

# tail -20 /var/log/maillog

看看你是否能发现你的电子邮件或者被发送或拒绝。也再次等待一两分钟,然后检查日志 - 原始的电子邮件可能会回来的一些邮件服务器反弹,这将包括它为什么被退回解释

© www.soinside.com 2019 - 2024. All rights reserved.