2009-09-22 42 views
4

我試圖弄清楚爲什麼PHP中的郵件功能通過網絡瀏覽器(即Apache)調用失敗,但我可以從命令行使用相同的腳本PHP郵件()的作品從命令行,但不是阿帕奇

PHP -f mailtest.php

這是我的客戶的Fedora服務器中的一個,所以我不完全神交,但我確實有根訪問我應該需要改變任何東西。

從php.ini中

sendmail_path =/usr/sbin目錄/ sendmail的-t -i

不知道這可能無所謂,但在/ usr/sbin目錄/ sendmail的是一個符號鏈接到/ etc/alternatives/mta,這是一個返回到/usr/sbin/sendmail.sendmail的符號鏈接。 FWIW apache用戶確實有權運行sendmail(直接從命令行測試的sendmail)。

OS: Fedora Core 7 Linux (kernel 2.6.23.17) 
Apache: 2.2.8 
PHP: 5.2.6 

在這裏的任何幫助將不勝感激!

+0

你可能想要在serverfault.com上發佈它 – Josh 2009-09-23 18:30:20

回答

17

我發現了這個問題。 SELinux阻止了Apache能夠使用sendmail。要診斷,我用

$ sestatus -b | grep sendmail 
httpd_can_sendmail     off 

然後,爲了解決這個問題:

$ restorecon /usr/sbin/sendmail 
$ setsebool -P httpd_can_sendmail 1 

瞭解更多關於它here

+0

很高興你知道了。你應該接受你自己的答案 - 授予你代表,一個徽章,並讓其他人知道問題得到了回答。 – Josh 2009-09-24 02:10:10

+0

謝謝,你帶領我走向正確的方向:我有一個類似的問題,在閱讀你的文章後,我的想法是,它可能有我的apparmor安裝待辦事項...的確,這是問題所在。 – aurora 2011-04-28 21:17:16

+1

您必須以root用戶的FYI身份運行此命令。 – anataliocs 2012-02-27 23:03:51

0

apache的error_log中有什麼? PHP是作爲apache模塊還是CGI二進制文件運行的?

編輯:嗯......沒有在錯誤日誌中。撥打mail(...)的電話會返回什麼內容?郵件日誌中有趣的事情?這將取決於MTA不同,往往在/ var /日誌/ maillog中

編輯2:是safe_mode開啓和您使用的是mail()功能的additional_parameters

+0

沒有任何錯誤日誌。 PHP正在作爲apache模塊運行。 – matt 2009-09-23 18:19:57

+0

我也打開了所有的錯誤(即error_reporting(E_ALL);),並沒有看到任何錯誤或警告。 – matt 2009-09-23 18:21:09

0

這是用戶權限錯誤嗎?您的帳戶和用於執行PHP腳本的帳戶可能具有不同的權限。

+0

所有用戶都有權執行sendmail。我通過運行sendmail作爲apache用戶進行了確認。 – matt 2009-09-23 04:11:19

0

這是我在StackOverflow上的第一個答案! :0

所以我有和你一樣的問題,馬特!我使用OpenSuse。我想通了,postfix check導致與

postfix/postfix-script: warning: not owned by group maildrop: /usr/sbin/postqueue 
postfix/postfix-script: warning: not owned by group maildrop: /usr/sbin/postdrop 
postfix/postfix-script: warning: not set-gid or not owner+group+world executable: /usr/sbin/postqueue 
postfix/postfix-script: warning: not set-gid or not owner+group+world executable: /usr/sbin/postdrop 

,所以我跑了下一個命令:

# my postfix user is postfix and postfix group is maildrop 
sudo chown 'postfix:maildrop' /usr/sbin/post{drop,queue} 
sudo chmod g+s /usr/sbin/post{queue,drop} 

,然後,我想簡單的PHP腳本從我的瀏覽器中測試,如果一切正常:(假設你想郵件[email protected]

<?php 
$ret = mail('[email protected]', 'subject', 'message'); 
if ($ret === true) 
    echo 'Success'.PHP_EOL; 
else 
    echo 'Error'.PHP_EOL; 

這很好!我希望你能用這種方法解決這個問題