web-dev-qa-db-ja.com

PHP mail()は機能しません

アクティベーションメールなどを含む簡単な登録フォームのスクリプトを作成します。しかし、何らかの理由で、mail()がメールを送信しないか、3つの異なるメールアカウント(hotmail、gmail、yahoo)がそれらを受信しないため、スパムフォルダーに入れさえしません。

コード:

<?php
    $mailto = '[email protected]';
    $subject = 'the subject';
    $message = 'the message';
    $from = '[email protected]';
    $header = 'From:'.$from;

    if(mail($mailto,$subject,$message,$header)) {
        echo 'Email on the way';
    }
?>

「途中でメール」を出力するたびに、mail()はtrueを返しますよね?私は本当にそれを理解していません、私は小さなスニッチをオフにしようとしました(私はSMTPをブロックしませんでしたが)。

20
Rivers

Jeff Atwoodによるこの記事 を参照してください。

要するに、コードがメール転送エージェントに電子メールを渡したからといって、それが配信されるという意味ではありません。はい、mail() trueを返すことは、「acceptedfor delivery」を意味します-これは、「電子メールのように見える、私はtry「これを配信する」ではなく、「配信されます」。でも mail()のマニュアルに記載

メールが配信のために受け入れられたという理由だけで、[〜#〜] not [〜#〜]はメールが実際に目的地に到達します。

Soooo:MTAを確認し(電子メールはローカルコンピューターから送信されますか?)、ローカルアドレスに送信しようとします(アドレスがローカルの場合、配信されますか?)、メールから電子メールを送信します。クライアントは、PHPスクリプトと同じ設定を使用して、アンチスパムをオフにできる小さなメールホスティング業者に送信してみてください(ネットワーク外に配信されますか?)。記事、およびそこに記載されているポイントを確認してください。

13
Piskvor

サーバーがmail()を処理するように構成されていない可能性があります。

<?php
    print phpinfo();  
?>

sendmail_path

4
DENIEL

ヘッダーに正しい行末文字を追加する必要がある場合があります。そうかも知れない \nまたは\r\n

1
Brombomb

Ubuntuでも同じ問題が発生し、次のチュートリアルに従って解決しました。

http://www.nixtutor.com/linux/send-mail-with-gmail-and-ssmtp/

それがあなたにも役立つことを願っています。

0
mgrdiez

Phpinfoやphp.iniでメール設定を確認し、phpが使用しようとしているプログラムでメールを送信できることを確認します。コマンドが実行された場合、関数は成功しますが、メールが実際に送信されたかどうかはわかりません。

0
ldg

メールサーバーのメールログを確認します。 Unix系のシステムでは、通常は/ var/log/maillogです。 Windowsでは、知っているが、どこかにログがあるはずです。メールがTRUEを返している場合、接続先のメールサーバーが最終的な配信のためにメールを受け入れています。その後、mail()はもはや関与せず、実際の配信を行うのはSMTPサーバー次第です。

実世界の用語では、mail()は、ブロックを下ってメールボックスに文字をドロップすることです。それ以降はすべて、PHPのスコープと制御の範囲外です。

0
Marc B

これがLinuxサーバーの場合は、おそらくローカルメールキューに送信するように設定されています。この問題が発生したとき、ISPのメールサーバーを指すLinuxサーバーが使用するDNSサーバーにMXエントリを追加することで機能しました。

0
Brad Mace