2012-09-11 122 views
9

我一直在四處尋找stackoverflow和許多其他網站的想法,但沒有任何工作到目前爲止,我需要更直接的幫助。php mail()返回false,但不是在命令行

我有一個專用的Ubuntu服務器(9.04 jaunty),我在那裏用apache2運行幾個PHP網站。我的問題是,mail()函數已停止工作。一段時間以來,我一直在使用PEAR Mail Queue來處理大多數電子郵件,所以我不確定郵件()什麼時候停止工作,但我仍然需要它用於OpenCart設置,還有一些其他的事情,但郵件()無論我做什麼,都會使返回錯誤。即使這樣簡單的代碼將無法正常工作:

<?php 
mail('[email protected]','test','test'); 
?> 

所以,我一直在尋找在php.ini中的Sendmail的設置,所有檢查,當我在命令行中運行它,它工作正常並給我發來電子郵件:

# sendmail 
[email protected] 
test message 

所以我想這可能是PHP本身是有問題的,所以我嘗試使用以下命令:

# php -r "mail('[email protected]','test','test');" 

而且它還會發送電子郵件沒有任何問題!那可能是什麼?我開始認爲這可能是某種權限問題,也許www-data在運行腳本時遇到了一些問題。仍然不知道這一點,因爲我甚至不能運行這個腳本:

<?php 
echo exec('whoami'); 
?> 

它也返回false!我已經運行了visudo命令命令並添加以下行,以防萬一:

www-data ALL=(ALL) ALL 

而且我已經改變了從根文件的用戶和組業主:根www數據: www-data但仍然沒有!

我還能試試嗎?一定有一些東西!誰能幫我?

+1

在使用郵件失敗時,您是否在系統郵件錯誤日誌(/ var/log/mail或類似的東西)中看到任何錯誤? –

+0

刪除'mail()'。使用「PhpMailer」,並通過「SMTP」傳送,並且您處於安全的地面。 –

+0

有很多錯誤說'SYSERR(UID0):你是誰?:Permission denied'和一些抱怨RunAsUser和TrusedUser行的submit.cf文件'未知用戶smmsp:Permission denied'其中smmsp在兩者上都設置。我該怎麼做? @Louis – user1663164

回答

0

幾周前我有同樣的問題。我想:

和其他幾個人。

我在我的錯誤日誌中有一個條目,說Segmentation fault。兩天後發現問題。我在我的debian系統上使用了Exim4,與apache2的組合給出了分段錯誤。我用Postfix替換了Exim4,它工作正常!

但是,在你的情況下,你不能運行一個像whoami這樣的exec,你應該追求這個道路。

因爲郵件函數最終到達os,exec命令應該可以工作!

+0

那麼你建議我怎麼做呢?什麼在PHP控制這種權限? – user1663164

0

你可以使用phpMailer發送電子郵件,使用你的mail()函數拋出SMTP。 代碼是here(http://phpmailer.worxware.com/) 只是一個想法

可能可以使用此extation爲Opencart的使用PHPMailer的更換郵件功能。我沒有對它進行過測試,並認爲它可能會給某些人一些想法。

+0

不,OpenCart使用mail()函數,所以我需要它的工作,不幸的是。否則我不會爲此費心。 – user1663164

+0

我更新了我的答案,它看起來像有人已經提出打開購物車使用phpmailer extation這可能不會幫助你,但它可以幫助沒有那麼多訪問那裏服務器的人。 – Justin

2

命令行和網絡服務器不共享相同的php.ini!檢查在命令行和服務器模塊上使用哪個php.ini。

+0

我可以在哪裏查看? – user1663164

+0

沒關係,找到它。但是這些文件幾乎完全相同,這不是問題。任何其他想法? – user1663164

+0

儘量安全地將apache php.ini重命名爲php.ini.bak並複製cli php.ini並檢查。它將縮小你的問題範圍,以便研究 –

0

在我的情況下,這是php-fpm用於Magento泊塢窗圖像我正在玩。它保持php預裝(配置)。

重新啓動後,它提取新的設置:how to restart或只是sudo killall php-fpm