• 締切済み

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

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

  • PHP
  • 回答数3
  • ありがとう数5

みんなの回答

  • 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

  • isset関数の動作と入力チェックについて

    issetの動作について疑問に思った事があるので、質問させて下さい。 以下のようなテスト用のphpを作成しました。 issettest.php <?php $a = $_GET["a"]; if(isset($_GET["a"])){ echo "\$GETに[".$_GET["a"]."]が入っています。<br>"; } if(isset($a)){ echo "\$aに[".$a."]が入っています。<br>"; } if(!isset($_GET["a"])){ echo "\$GETは空です。<br>"; } if(!isset($a)){ echo "\$aは空です。<br>"; } ?> ./issettest.php と実行すると、 $GETの値は空です。 $aの値は空です。 ./issettest.php?a=test と実行すると $GETに[test]が入っています。 $aに[test]が入っています。 ./issettest.php?a= と実行すると $GETに[]が入っています。 $aに[]が入っています。 となります。 これがissetの正常な動作なのでしょうか? 例えば、入力フォームを使いGETやPOSTでの値を送信する場合、入力フォームに値が入力されたかどうかを判定するにはissetは使えないのでしょうか? わかりづらい質問で申し訳ありませんが、先輩方の回答お待ちしています。 質問に不備などありましたらご指摘下さい。

    • ベストアンサー
    • PHP
  • phpのメール送信

    ホームページにメールフォームを作りたいのですが、 送信できなくて困っています。 ソースは次の通りです。 <?php echo "<html>"; echo "<head>"; echo "<title>メールフォーム(送信処理)</title>"; echo "</head>"; echo "<body>"; mb_language("japanese"); mb_internal_encoding("UTF-8"); $to = "アドレスA"; $subject = "件名"; $from = "アドレスB"; $header = "From: ". $from; //本文格納 $mailbody = "■お名前:" . $_post["name"] ."\n"; $mailbody .= "■内容:" . $_post["sentaku"] ."\n"; if(mb_send_mail($to, $subject, $mailbody, $header)){ echo "送信しました。"; }else{ echo "送信できませんでした。"; } echo "</body>"; echo "</html>"; ?> またif文の日本語が文字化けしてしまいます。 メール送信できて、文字化けもないようにしたいです。 よろしくお願いします。

    • 締切済み
    • PHP
  • メール送信できたのに、FALSEが返ってきます

    if (mail(..... を使ったお問い合せフォームを使用しています。 php5で正常に動いていたものを、そのままサーバーを移して(こちらはphp4)動作確認してみました。 するとメールは正しく送信されたのですが、if (mail(....がFALSEを返し、「送信に失敗しました」と表示されます。 メールが送信されたのにphp5ではTRUE、php4ではFALSE、このようなことが起こる可能性としては、どのようなことが考えられるでしょうか。 正直phpには明るくありませんが、アドバイスを元に原因をつきとめて修正したいと考えております。 よろしくお願いします。

    • 締切済み
    • PHP
  • メールフォームが動いてくれない。

    初心者ながら以下のようなメールフォームを書いたのですがうまく動いてくれません。どうしてなのでしょうか? ----hoge.php---- <?php $mail = $_POST['mail']; $address = $_POST['add']; if(empty($mail)){ $1 = "入力してください。"; }elseif(empty($address)){ $2 = "入力してください。"; }else{ //メール送信 echo("送信しました。"); exit; } ?> <form action="hoge.php" method="post"> E-mail <inputtype="text" name="add"><?=$1?> Message <input type="text" name="mail"><?=$2?> <input type="submit" value="send!!"> </form> ----- 一応、メールアドレスや本文が未入力の場合、エラーメッセージを出すようにしています。 どうぞよろしくお願いいたします。

    • ベストアンサー
    • PHP
  • PHP メール送信ができない

    いつもお世話になっております。 最終的にやりたいことは、営業マンの受注一覧をPDF作成し そのPDFを営業マンにメールで送信する(添付ファイル)ということですが。 (PDF作成まではできております) これには、 とても道のりが遠そうです。 まずはじめに 普通に PHPから メールが送信できるか 試してみました。 <?php if (mb_send_mail("自分のアドレス", "TEST MAIL", "This is a test message.", "From: 自分のアドレス")) { echo "メールが送信されました。"; } else { echo "メールの送信に失敗しました。"; } ?> 文字化けの対策等もしなければいけないと思いますが とりあえず これで メールが届くかと思い やってみました。 結果は 「メールが送信されました。」と表示されておりますが 実際には 送られておりません。 いろいろと検索してみましたが これから どうすればいいのかが わかりません。 どうぞよろしくお願いいたします。

    • ベストアンサー
    • PHP
  • メール送信のPHPの件で

    現在、 <?php //HTML内容出力 echo "<html>"; echo "<head>"; echo "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">"; echo "<title>メールフォーム(送信処理)</title>"; echo "</head>"; echo "<body>"; //文字コード設定 mb_language("ja"); mb_internal_encoding("utf-8"); //*環境設定************************************* //件名 $subject = "お問い合わせがありました"; //管理人メールアドレス(宛先) $to = "○○@gmail.com"; //********************************************** //**POSTデータ受け取り************************** //差出人メールアドレス格納 $header = "From: ". $_POST['email']; //本文格納 $body = "■お名前:" . $_POST['name'] ."\n"; $body .= "■内容:" . $_POST['message'] ."\n"; //************************************************ if(mb_send_mail($to,$subject,$body,$header)){ echo "メール送信しました。"; }else{ echo "メール送信失敗しました。"; } //HTML内容出力 echo "</body>"; echo "</html>"; ?> こういう感じでメール送信フォームのPHPを正常稼働させているのですが、 これに送信者への確認メールを送信するには、どのように追記すればよろしいでしょうか? よろしくご教授の方、お願いいたします。

    • 締切済み
    • PHP
  • Firefoxのメールフォームから送信されない

    PHP5でメールフォームを作成しました。 IE6とFirefox2で動作確認を行っていますが、IE6では正常に送信できるのに、FF2では送信されません。 確認のため、以下のようにしてFF2で試してみたところ、画面には「OK」と表示されますがメールは送信されません。 if (mb_send_mail(・・・・)) { print "OK"; } else { print "NG"; } IE6では送信できるので、コードやメールアドレスの入力ミスではないと思います。 IE6とFF2との違いがあるのでしょうか?

    • 締切済み
    • PHP
  • PHPでメールが送信できない

    弊社でお客様のお問い合わせフォームをPHPで作成しているのですが、 お客様の環境でメールを送信することができません。 サーバー環境は以下の通りです。 Red Hat Linux 2.6.9 Apache/2.0.52 PHP 4.3.9 原因の調査で以下のようなチェックを行いました。 【お客様に御願いしたチェック】 1. サーバーでsendmailコマンドを利用してメールが送れるか? 送ることができる。 正しくキューイングされ、送信されることまで確認OK 2. php.iniのsendmail_pathの確認 sendmail_path は /usr/sbin/sendmail -i -tになっている。 /usr/sbin/sendmailはちゃんとある 3. mail()が使えないPHP /usr/sbin/sendmail,/usr/lib/sendmailがなければmail()が使えないPHPがビルドされるケース。 標準のPHPを利用しているので、問題ない。 【弊社が担当したチェック】 1. メールを送信するPHPスクリプトの不具合 PHPスクリプト自体は正常に動作する。 php.iniのdispaly_errorsをONに変更してもエラーメッセージはでない。 2. 簡単なmail()関数を使用したチェック 以下のようなphpスクリプトで確認。 OKがブラウザに表示される。 <?php if (mail("私のメールアドレス", "テスト", "テスト本文", "From:私のメールアドレス")) { echo "OK"; } else { echo "NG"; } ?> 何か原因があるのでしょうか? どなたか教えてください。

    • ベストアンサー
    • PHP
  • PHPメールフォームでの文字化け

    プログラミング&PHP超初心者です。 PHPでメールフォームを作成して、送信には成功しましたが、受信したメールが文字化けしています。 いろいろ調べたのですが、解決できませんでした。 どなたか詳しいかた、教えていただけると嬉しいです。 送信する部分: if ($name != \"\" and $from != \"\" and $title != \"\" and $naiyou != \"\" ) { if (mb_send_mail($to, $title, $naiyou, \"From:$from\")) { echo \"メールを送信しました\"; } else { echo \"メール送信失敗です\"; } 文字コードはEUC-JPです。 サーバーはロリポップです。 よろしくお願いいたします。

    • 締切済み
    • PHP
  • メールフォーム セキュリティについての質問

    メールフォーム セキュリティについての質問 はじめまして。 現在PHPを勉強中で、とりあえずメールフォームを サンプル本を参考にして作ろうとしているのですが、 不明なところが出てきたので質問させていただきました。 セキュリティのために入力された文字を htmlspecialchars を使って エスケープをするのですが、それをメールで受信するときには 正常に戻した状態(デコード?)で表示したいと思い 送信するためのスクリプトの前で html_entity_decode を使って再変換しようと 考えているのですが、これはセキュリティ上良くないのでしょうか? 以下は入力画面から確認画面で送信ボタンを 押した後に読み込む送信用のPHPファイルです。 環境はPHP 5.2となります。 <?php if ($_SERVER["REQUEST_METHOD"] == "POST") { foreach($_POST as $k => $v){ if (get_magic_quotes_gpc()) { $v = stripslashes($v); } $v = htmlspecialchars($v); $$k = $v; } } else { exit(); } // 文字化け対応 mb_language("Japanese"); mb_internal_encoding("UTF-8"); $to = "xx@xx.ne.jp"; $contact = "お名前:$name\nメールアドレス:$from\nタイトル:$title\n内容:$naiyou\n"; $contact = html_entity_decode($contact); if (mb_send_mail($to,$title,$contact,"From:$from")) { echo "メールを送信しました"; } else { echo "メール送信失敗です"; } ?> 以上 初心者のため質問に不備があるかもしれず 申し訳ありませんが、宜しくお願いします。

    • ベストアンサー
    • PHP

専門家に質問してみよう