Apache-2.2

PHP 的 mail() 函式在 CLI 中工作,但在 Apache 中不工作

  • April 5, 2017

我正在使用msmtp作為中繼並嘗試使用 mail() 函式發送電子郵件。它在 CLI 中完美執行,但在 Apache 中什麼也不做。我的 cli 和 apache 的 PHP 配置是相同的,任何日誌中都沒有錯誤,我真的沒有想法。

知道這可能是由什麼引起的嗎?

我找到了解決這個問題的方法。我正在使用msmtp,它是一個 SMTP 代理,工作方式類似於 sendmail,因此,當嘗試發送郵件時,從 php 呼叫 msmtp 命令,其語法與 sendmail 相似。

現在,msmtp 命令將由執行 apache2 的同一使用者執行。就我而言,www-data。

www-data 使用者需要讀取 msmtp 的配置文件(在我的例子中是 /etc/.msmtp_php)。

CLI 工作而 Apache PHP 不工作的原因是,我在 root 下執行 CLI,它對文件具有正確的權限,但 apache2 在 www-data 下執行,它沒有這些權限。

所以解決方案是: chown /etc/.msmtp_php 文件到 www-data:www-data和 chmod 同一個文件到0600,否則,msmtp 會抱怨權限鬆動。

引用自:https://serverfault.com/questions/842221