我在"/etc/php5/apache2/php.ini“中设置了"sendmail_path = "/usr/sbin/sendmail",并在服务器上安装了sendmail,从而将服务器配置为发送邮件。
当我通过cli从php5运行这个脚本或它的任何变体时,邮件发送得很好,但当我有一个浏览器运行它时,例如Chrome或Firefox,它每次都会失败。
<?php
$to = "notreal@email.com";
$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 " mail ()“函数的基于PHP的web应用程序也不会发送邮件。
发布于 2011-12-23 02:43:26
Apache和CLI似乎在您的设置中使用不同的配置。
将/etc/php5/cli/php.ini中的配置与您的Apache的php.ini进行比较。也许Apache PHP的sendmail配置有问题,而CLI配置是正确的。
发布于 2011-12-23 03:00:18
您首先需要验证当前设置是否为您认为的设置:
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服务器上配置错误是很奇怪的。)
发布于 2011-12-23 03:17:44
当你从cli运行php时,它是在你登录linux的帐号下运行的。当您从Apache运行时,php以Apache运行时所使用的用户身份运行,通常是“无名之辈”
“没有人”的邮件失败可能有几个原因--一些垃圾邮件过滤器会拒绝它。
此外,我不确定你所说的“失败”是什么意思--没有收到你期望的电子邮件并不意味着它没有发送出去。您应该检查邮件日志(通常位于/var/ log /maillog中),在从浏览器运行脚本检查该日志中的最新几行后,键入
# tail -20 /var/log/maillog看看你是否能发现你的电子邮件是被发送还是被拒绝。另外,等待几分钟并再次检查日志-您的原始电子邮件可能会从某些邮件服务器退回,它将包括为什么退回的解释
https://stackoverflow.com/questions/8608249
复制相似问题