2011-12-22 10 views
2

PHPとLAMPスタックはかなり新しくなっています。PHPの "mail()"関数はphp5 cliからメールを送信しますが、スクリプトがブラウザで実行されているときは表示されません。

"/etc/php5/apache2/php.ini"に"sendmail_path = "/usr/sbin/sendmail"を設定してメールを送信するようにサーバーを設定しており、sendmailがサーバーにインストールされています。

php5からcli経由でこのスクリプトを実行すると、メールはうまく送信されますが、ブラウザを実行すると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の "mail()"関数に依存する他のPHPベースのWebアプリケーションでもメールは送信されません。助けのための

ありがとう!

+0

php.iniファイルにアクセスできる場合は、 smtp。 – CBusBus

+1

mail()は今日のメール標準に準拠していません。代わりにPHPmailerのようなメーラークラスを使用してください。 – Corubba

答えて

3

ApacheとCLIは、設定で異なる設定を使用しているようです。

/etc/php5/cli/php.iniの設定をApacheのphp.iniと比較してください。おそらく、ApacheのPHPのsendmail設定では動作しないものがあり、CLIの設定は正しいでしょう。

+0

彼らは異なっていることが分かります。私のApacheのphp.iniファイルでsendmail_pathを設定しましたが、cli/php、iniではまだコメントアウトされています。私はこれを明示的に設定しなければならないという印象を受けました。 私はパスが正しいと確信しています...しかし、私はまだなぜそれが失敗し、なぜコメントされたときに動作するのか混乱しています。どちらの方法でも、php.iniのsendmail_path行を再度コメントアウトし、Apacheを再起動すると問題が解決したようです。 ありがとう – zdevex

1

あなたは、現在の設定は、あなたがそれだと思うものであることを確認する最初の必要性:

var_dump(ini_get('sendmail_path')); 

それがウェブで違うとCLI、PHPはおそらく違うのphp.iniファイルがある場合。これを実行します。

phpinfo(INFO_GENERAL); 

を...この部分を見つける(自分の価値観が私とは異なります):あなたが編集する必要があるphp.iniファイルを識別するのに役立ちます

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) 

(何であれ、それは、これは、Linuxサーバーに誤って設定来ることを奇妙だ。)

1

あなたはCLIからPHPを実行すると、それはあなたがLinuxへのログインアカウントで実行されます。 Apacheから実行すると、Apacheが実行されるユーザーとして実行されます。通常は 'nobody'

'nobody'からのメールが失敗するいくつかの理由があります。

また、私はあなたが「失敗」していることを確信していません。あなたが期待しているメールを受信して​​いないということは、送信されなかったというわけではありません。あなたはmaillogに /通常では/ var/log、メールログを調べ、単にブラウザからスクリプトを実行した後、そのログの最新の数行をチェックし、 タイプ

# tail -20 /var/log/maillog 

、あなたを見つけることができるかどうかを確認すべきです電子メールは送信または拒否されます。また、数分待って再度ログを確認してください - 元のメールが一部のメールサーバーから返送される場合があります。なぜそれが返送されたのかの説明が含まれます

関連する問題