2009-08-13 10 views
1

PHPメール問題

私はPHP mail()機能を使用しています。今、私はUbuntuマシンでPHP5を実行しています。 php.iniでは、メールサーバーを実行しているマシンのIPとしてSMTPを宣言し、smtp_portを25として宣言しました。さらに、ポート25でメールサーバーにtelnet接続してメールを送信しようとしました。 。

メールが送受信されていないという問題があります。mail()が返されるの最後に、mail()というPHPスクリプトが約1分間停止します。 PHPで、Ubuntuのと、メールサーバまたはコードで -

最悪の部分は、私はどこに問題があるにも見つける方法についてのアイデアをだということです!

誰か助けてもらえますか?

答えて

2

私は最近、php.iniで見ていないが、それは言っていません:Win32のだけについては

[mail function] 
; For Win32 only. 
;SMTP = 

を強調。

PEAR::Mailを参照してください。 pear.php.netが実際に応答しているとき、それはです。

+0

sendmail_pathが指定されていない場合、linuxはSMTPフィールドも正常に使用することをチュートリアルで読んでいます。それは間違っていますか? –

+0

私の知る限り、それは正しくありません。 mailコマンドのnotesセクションでは、 "Windowsのmail()実装はUnixの実装とは多くの点で異なります。まず、メッセージを作成するためのローカルバイナリは使用しませんが、直接ソケットでしか動作しません"。 UNIX版では常にsendmailが使用されることを意味します。 – Powerlord

+0

私はPEAR :: Mailを使用します。今家に帰る(ここの夜10時)。午前中にそれについて書きます:) –

1

mail.errファイルとmail.logファイルを確認できますか?

+0

私はLinuxにとって全く新しいです。私はmail.errとmail.logファイルが見つからないようです:( –

+1

/var/log /ディレクトリには、ほとんどのlinuxディストリビューションのすべてのログが保存されています – Steven

+0

mail.errには次のエントリがあります: "私の非修飾ホスト名 –

0

メールサーバーには認証が必要な可能性があります(「POP before SMTP」またはASMTP - Authenticated SMTP)。おそらく最近あなたのWindowsマシンからあなたの電子メールをチェックしたでしょうから、あなたのIPアドレスは認証され、短時間の間、電子メールを送信することができます:あなたのUbuntuマシンからはおそらくないでしょう。 PHPはとにかくメールを送信する方法を考え出す必要があります:あなたのSMTPサーバーのIPアドレスを使用できない場合のUbuntuマシンで

は、参照してください。それ以外の場合は、電子メールサーバの認証方法をPHPに実装する必要があります。

+0

認証が必要ではありません。メールサーバにtelnet(Ubuntu)を使ってメールを送りました。認証なしで動いています。 –

+0

OK、PHPのエントリを削除してみてください。 PHPがsendmailを使用して電子メールを送信できるかどうかを調べるためにサーバーのIPアドレスを参照するiniファイル –

0

シェルからメールプログラムでメールを送信してみます。最初にそれが動作するかどうかを確認します。

+0

シェルからのメールの送信 - telnet(Ubuntu) –

+0

PHPの設定でなければなりません。関数はphp.iniで設定されていますか? – grigy

+0

[メール機能] ; Win32のみ SMTP = 192.168.1.10 smtp_port = 25 ; Win32のみ。 sendmail_from = [email protected] ; Unixのみ。引数も指定できます(デフォルト: "sendmail -t -i")。 sendmail_path =/usr/sbin/sendmail –

0

ISPが問題の可能性があります。大量のスパムを防ぐため、ポート25はISPによって頻繁にブロックされます。非標準ポートに変更して、それが役立つかどうか確認してください。

編集:(そのソリューションは、ポートを変更しないで、ISPのメールサーバーに中継することであるが)とhereは、問題を詳述ものです。

+0

マシンはすべて内部LANにあります(ゲートウェイは一切ありません)。 –

+0

この場合、ログも次の停止になります。 – Steven

0

たとえば、この愚かなbraindead php実装がUnixのSMTPポートでは機能しないため、Zend Framework SMTPメールクラスが必要です。

PHPのコアメーリングリストを購読し、それについて文句を言うしてください - おそらく彼らはより多くの人々がで来ている場合は、それを変更すると、彼らは見ていない、誰も何sendmailのこと。

0

phpのmail()関数をメールライブラリを使用してバイパスすることもできます。たとえばSwiftMailer(http://swiftmailer.org/)これは電子メール(plain/html)を安全に送信するための本当に良いクラスです。

このクラスを使用すると、SMTPサーバーに直接接続できるため、サーバー構成をバイパスできます。