アクティベーションメールなどを含む簡単な登録フォームのスクリプトを作成します。しかし、何らかの理由で、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をブロックしませんでしたが)。
Jeff Atwoodによるこの記事 を参照してください。
要するに、コードがメール転送エージェントに電子メールを渡したからといって、それが配信されるという意味ではありません。はい、mail()
trueを返すことは、「acceptedfor delivery」を意味します-これは、「電子メールのように見える、私はtry「これを配信する」ではなく、「配信されます」。でも mail()
のマニュアルに記載 :
メールが配信のために受け入れられたという理由だけで、[〜#〜] not [〜#〜]はメールが実際に目的地に到達します。
Soooo:MTAを確認し(電子メールはローカルコンピューターから送信されますか?)、ローカルアドレスに送信しようとします(アドレスがローカルの場合、配信されますか?)、メールから電子メールを送信します。クライアントは、PHPスクリプトと同じ設定を使用して、アンチスパムをオフにできる小さなメールホスティング業者に送信してみてください(ネットワーク外に配信されますか?)。記事、およびそこに記載されているポイントを確認してください。
サーバーがmail()
を処理するように構成されていない可能性があります。
<?php
print phpinfo();
?>
sendmail_path
ヘッダーに正しい行末文字を追加する必要がある場合があります。そうかも知れない \n
または\r\n
Ubuntuでも同じ問題が発生し、次のチュートリアルに従って解決しました。
http://www.nixtutor.com/linux/send-mail-with-gmail-and-ssmtp/
それがあなたにも役立つことを願っています。
Phpinfoやphp.iniでメール設定を確認し、phpが使用しようとしているプログラムでメールを送信できることを確認します。コマンドが実行された場合、関数は成功しますが、メールが実際に送信されたかどうかはわかりません。
メールサーバーのメールログを確認します。 Unix系のシステムでは、通常は/ var/log/maillogです。 Windowsでは、知っているが、どこかにログがあるはずです。メールがTRUEを返している場合、接続先のメールサーバーが最終的な配信のためにメールを受け入れています。その後、mail()
はもはや関与せず、実際の配信を行うのはSMTPサーバー次第です。
実世界の用語では、mail()
は、ブロックを下ってメールボックスに文字をドロップすることです。それ以降はすべて、PHPのスコープと制御の範囲外です。
これがLinuxサーバーの場合は、おそらくローカルメールキューに送信するように設定されています。この問題が発生したとき、ISPのメールサーバーを指すLinuxサーバーが使用するDNSサーバーにMX
エントリを追加することで機能しました。