• 締切済み

mail()関数の値がtrueしか返ってこないです

PHP初心者です PHPに関する質問なのですが メールフォームにメールアドレスを入力して送信すると メールが返信されるスクリプトを作成中 <?php if (mail($_POST["mail"],'test','test@xxx.ne.jp') echo "メールを送信できました"; else echo "メールを送信できませんでした"; ?> という風なソースを書いて実行しました メールアドレスを正しく入力して送信するとちゃんと メールが届きます、それは当然なのですが たとえば適当な文字の羅列 (例:f所亜ジョあじょgじゃおじょあじょじょあ) こんな文字をフォームに入力して送信しても if構文が正常に動作せず、"メールが送信できました" と表示されます、これはifの条件の値がTRUEしか 返ってきてないということなのでしょうか? また、このif構文を正常に動作させるにはどうしたら いいでしょうか?教えてもらえるとありがたいです・・・・

みんなの回答

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.3

関数mail()は、MTAへの送信に成功/失敗したかを返します。 MTAがメール送信に成功したかどうかは、mail()からはわかりません。 これは、手紙に間違った住所を書いたとしても、それでポストに投函するのに失敗する奴はいない(代わりに郵便配達人が苦労する)というのに例えられるかと。 なので、if文の書き方的には正常です。 メールが正しく送れたかどうかは、別の手段(エラーメールが届いてないかチェックするとか。)をとる必要があります。

参考URL:
http://php.benscom.com/manual/ja/function.mail.php
tadokoro12
質問者

お礼

そうなのですね、メールがあて先に届いたら true、そうでないならfalseという風になってるもんだと ばかり思っていました、またあとで調べてみようと 思います、ありがとうございます

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.2

エラーになるのは「sendmailに渡せなかった」などのケースだけではないでしょうか?送信先が不正なアドレスの場合でも、いったんsendmailに渡して、あとで「does not like recipient.」のエラーメールが(-fなどでキチンと戻り先を指定していれば)戻ってくると思います。 #普通はメールアドレスの正当性をチェックしてからmail()に渡しますしね(汗

tadokoro12
質問者

お礼

ありがとうございます。 mail()関数だけで不正アドレスチェックをしてくれるもの だとばかり思っていました、これで納得しました あとでまた調べてみようと思います。

  • wp_
  • ベストアンサー率54% (132/242)
回答No.1

まにゅある http://jp2.php.net/manual/ja/function.mail.php >メールの配送が受け入れられたかどうかが基準であることに注意しましょう。 メールが実際にあて先に届いたかどうかでは「ありません」。 です。 SMTPを落として実行するとfalseが帰ってくるようになります。 相手が受信をしたかどうかの検査はPHP内部で行うことができません。 送信したメールが宛先不明で帰ってきた場合(メールアドレス不正)はMTAの機能で検知させることができます。 // .qmailなど

tadokoro12
質問者

お礼

ありがとうございます どうりで何回やってもうまくスクリプトが作動しないわけですね 単純にif構文だけで、メールの処理ができるものだと 思っていました、あとでメール不正チェックのスクリプトの 作り方を調べてみようと思います。

関連するQ&A