jqueryでAJAX非同期通信をしてphpからメールを送信する

このQ&Aのポイント
  • jqueryを使用してAJAX非同期通信を行い、phpからメールを送信します。
  • 送信が完了した後には、lightbox風のメッセージを表示します。
  • sendmail.phpにpostでフォームの内容を渡す方法と、sendmail.phpの$msgを表示する方法を教えてください。
回答を見る
  • ベストアンサー

jqueryでAJAX非同期通信をしてphpからメールを送信する。送信

jqueryでAJAX非同期通信をしてphpからメールを送信する。送信完了後にlightbox風に「送信しました」と表示させたい。 sendmail.phpにpostでフォームの内容が渡りません。どうやってsendmail.phpに値を渡して sendmail.phpの$msgを戻して、表示させるのでしょうか? 素人です。1週間ほど調べましたが、これが限界でした。 宜しくお願いします。 index.php <script type="text/javascript" src="jquery-1.3.2.js"></script> <script type="text/javascript"> //<![CDATA[ $(function(){ $("#exeBtn").click(function() { $.ajax({ url : "sendmail.php", type : "post", data : ({ message: $('#message').val(),{off:$('#exeBtn').val()}), datatype:'json', success: function( dispMsg(){ if('<?=$msg?>' != ''){ alert('<?=$msg?>'); } }}, }); }); }); //]]> </script> </head> <body> <form> <input id="message" type="hidden" name="message" value="EntryTitle"/> <input id="exeBtn" type="button" name="off" value="リンク切れ" /> </form> </body> </html> sendmail.php <?php header(’Content-Type: text/xml; charset=UTF-8′); $off=$_POST["off"]; $body = stripslashes($_POST['message']); if ($off != ""){ $to = "hogehoge@hogehoge.co.jp"; $subject = "報告"; $subject=mb_convert_encoding($subject,"JIS","utf-8"); $body=mb_convert_encoding($body,"JIS","utf-8"); $ret = mb_send_mail($to,$subject,$body); if($ret){ $msg = '送信しました'; }else{ $msg = '送信失敗しました'; } } } ?>

  • AJAX
  • 回答数2
  • ありがとう数16

質問者が選んだベストアンサー

  • ベストアンサー
  • mtaka2
  • ベストアンサー率73% (867/1179)
回答No.2

> メール送信できるのですが、#messageのvalue値がsendmail.phpに渡りません。 index.php の方の記述ミスを見過ごしてました。 動作チェックはしてませんが、おそらく > data : ({ message: $('#message').val()},{off:$('#exeBtn').val()}), これを > data : { message: $('#message').val(), off:$('#exeBtn').val()}, にすればいけると思います。

chocoon
質問者

お礼

出来ました。 本当にありがとうございました。

その他の回答 (1)

  • mtaka2
  • ベストアンサー率73% (867/1179)
回答No.1

受け取り側処理部で <?=$msg?> としてしまうと、 ブラウザに渡った時点で、最初のPHPスクリプト実行時点での変数$msgが埋め込まれてしまいます。 そうではなく、JavaScript のコードとして、「ajax の実行結果」を処理する必要があります。 あと、中括弧とかの対応があやしかったので、ちょっと書き換えましたが、 以下のような感じでしょうか。 --index.phpここから--- (略) //<![CDATA[ $(function(){ $("#exeBtn").click(function() { $.ajax({ url : "ajax.php", type : "post", data : ({ message: $('#message').val()},{off:$('#exeBtn').val()}), datatype:'text', success: function(data) { if(data != ''){ alert(data); }}, }); }); }); //]]> (略) --index.phpここまで--- --sendmail.phpここから--- <?php header('Content-Type: text/plain; charset=UTF-8'); $off=$_POST["off"]; $body = stripslashes($_POST['message']); if ($off != ""){ $to = "hogehoge@hogehoge.co.jp"; $subject = "報告"; $subject = mb_convert_encoding($subject,"JIS","utf-8"); $subject = mb_encode_mimeheader($subject, "ISO-2022-JP" ); $body = mb_convert_encoding($body,"JIS","utf-8"); $ret = mb_send_mail($to,$subject,$body); if($ret){ $msg = '送信しました'; }else{ $msg = '送信失敗しました'; } } echo $msg; ?> --sendmail.phpここまで---

chocoon
質問者

お礼

すいません。間違えて補足してしまいました。回答ありがとうございます。 ------index.php------------------------------------------------------------- <script type="text/javascript"> //<![CDATA[ $(function(){ $('#exebtn').click(function() { $.ajax({ type: "POST", url : "sendmail.php", data : ({message:$('#message').val()},{exebtn:$('#exebtn').val()}), datatype:'text', success: function(data) { if(data != ''){ alert(data); }}, }); }); }); //]]> </script> </head> <body> <form> <input id="message" type="hidden" name="message" value="entrytitle"/> <input id="exebtn" type="button" name="exebtn" value="報告"/> </form> ----------------------------------------------------------------------------- ------sendmail.php---------------------------------------------------------------- <?php header('Content-Type: text/plain; charset=UTF-8'); $off=$_POST["exebtn"]; $body = stripslashes($_POST['message']); if ($off != ""){ $to = "hogehoge@hoge.jp"; $subject = "報告"; $subject = mb_convert_encoding($subject,"JIS","utf-8"); $subject = mb_encode_mimeheader($subject, "ISO-2022-JP" ); $body = mb_convert_encoding($body,"JIS","utf-8"); $ret = mb_send_mail($to,$subject,$body); if($ret){ $msg = '送信しました'; }else{ $msg = '送信失敗しました'; } } echo $msg; ?> ----------------------------------------------------------------- メール送信できるのですが、#messageのvalue値がsendmail.phpに渡りません。 firebugでsendmail.phpのPOSTを見たらexebtnに「報告」とありましたがmessageは、ありませんでした。 もちろん送信されたメールにもmessageは送られていません。 ここが間違っているんでしょうか? > data : ({ message: $('#message').val()},{off:$('#exeBtn').val()}), それともsendmail.phpのここが間違っているのでしょうか? > $body = stripslashes($_POST['message']); 原因がまったく解かりません。 ご教授お願いします。

chocoon
質問者

補足

メール送信成功時は「送信しました」とアラートが出て、メールも送信されました。ですが、メールの本文が送信されませんでした。 メール送信失敗時には、アラートが出ませんでした。

関連するQ&A

  • Jquery AJAXで、1ページに複数のフォームを設置するにはどうす

    Jquery AJAXで、1ページに複数のフォームを設置するにはどうすればいいでしょうか? 現在、以下のコードでメール送信をしてます。 1ページに複数のフォームがあり、押されたフォームボタンによって、そのフォームに対応した各value値をajaxの処理のところで受け取りたいです。 今のコードだと1つ目のフォームボタンを押すと正常にメールが送信されますが2つ目のフォームボタンを 押しても何も起こりません。 formにユニークなidをつけてsendmail.phpに変数を渡す前に、フォームボタンが押される度に ここの値をクリアしなければならないのかなと思っています。 >data : { message: $('#message').val(), exebtn:$('#exebtn').val()}, ----- index.php ------------------------- <略> <script type="text/javascript"> //<![CDATA[ $(function(){ $('#exebtn').click(function() { $.ajax({ type: "post", url : "sendmail.php", data : { message: $('#message').val(), exebtn:$('#exebtn').val()}, datatype:'text', success: function(data) { if(data != ''){ alert(data); }}, }); }); }); //]]> </script> </head> <body> <MTEntries> <form id="link" method="POST"> <input id="message" type="hidden" name="message" value="<$MTEntryTitle$>"/> <input id="exebtn" type="button" name="exebtn" value="リンク切れ"/> </form> </MTEntries> </body> </html> ----------------------------------------- ---- sendmail.php -------------------- <?php header('Content-Type: text/plain; charset=UTF-8'); $off=$_POST["exebtn"]; $message=$_POST["message"]; if ($off != ""){ $to = "hogehoge@hoge.jp"; $from = "hoge1@hoge.com"; $header = "From: $from\n"; $subject = "報告"; $subject = mb_convert_encoding($subject,"JIS","utf-8"); $message = mb_convert_encoding($message,"JIS","utf-8"); $ret = mb_send_mail($to,$subject,$message,$header); if($ret){ $msg = '送信しました'; }else{ $msg = '送信失敗しました'; } } echo $msg; ?> --------------------------------------------- ご教授、宜しくお願い致します。

  • PHPでメールを送信するには

    PHP超初心者です。 参考本をもとにPHPでメールを送信するということにチャレンジしているのですが、次のような文章が出ます。 Warning: mb_send_mail() [function.mb-send-mail]: "sendmail_from" not set in php.ini or custom "From:" header missing in C:\Program Files\Apache Group\Apache2\htdocs\php10\mail.php on line 11 エラー:送信に失敗しました 参考本に書いてあるとおり、 php.iniのSMTP=localhost を自分が使っているoooooo@ocn.ne.jpに書き換え、sendmailには自分の別アドレスを記述したのですが。 11行目のエラーも何を指しているのかわかりません。 ご回答よろしくお願いします。 【mail.php】 <html> <head><title>mail.php</title></head> <body> <?php $address=$_POST['address']; $subject=$_POST['subject']; $message=$_POST['message']; $header="Content-Type:text/plain;charset=iso-2022-jp"; mb_language("Japanese"); if(mb_send_mail($address, $subject, mb_convert_encoding($message,"JIS","EUC-JP"),$header)){ print("送信完了しました。"); }else{ print("エラー:送信に失敗しました"); } ?> </body> </html> 【mail_form.html】 <html> <head><title>メールの送信</title></head> <body> <h2>メールの送信</h2> <form action="mail.php" method="post"> 宛先:<input type="text" name="address"><br /> 件名:<input type="text" name="subject"><br /> 本文:<br /><textarea name="message" rows="5" cols="30"></textarea><br /> <input type="submit" value="送信"> </form> </body> </html>

    • ベストアンサー
    • PHP
  • jqueryのAJAXで通信が完了した時のアラートをLightbox風

    jqueryのAJAXで通信が完了した時のアラートをLightbox風に表示したい。 コード <script type="text/javascript"> //<![CDATA[ $(function(){ $('#exebtn').click(function() { $.ajax({ type: "post", url : "sendmail.php", data : { message: $('#message').val(), exebtn:$('#exebtn').val()}, datatype:'text', //ここの部分をどう変えれば出来るのでしょうか? success: function(data) { if(data != ''){ alert(data); }}, }); }); }); //]]> </script> ご教授、宜しくお願い致します。

    • ベストアンサー
    • AJAX
  • メール送信

    現在独学でPHPの勉強をしており、行き詰まってしまいここで質問をさせて頂きました。 行き詰まった内容ですがphpでメール送信のスクリプトを書いたのですが エラーが出てしまい送れません。 こちらが私が書いたスクリプトになります。 <html> <head><title>mail.php</title></head> <body> <?php $address = $_POST["address"]; $subject = $_POST["subject"]; $message = $_POST["message"]; $header = "Content-Type: text/plain;charset=iso-2022-jp"; mb_language("Japanese"); if(mb_send_mail($address, $subject, mb_convert_encoding($message, "JIS", "EUC-JP"), $header)){ print("送信完了しました。"); }else{ print("エラー:送信に失敗しました"); } ?> </body> </html> エラーの内容ですが、 Fatal error: Call to undefined function mb_language() in C:~となっております。mb_languageが使えないとの表示が出てくるのですが、 色々な本などを調べてもこれを使ってる所もありなにが問題なのか分かりません。 php.iniでの設定(mbstring.internal_encoding = EUC-JP、extension=php_mbstring.dll)の ; などは外してみたりしてるのですが どうにも分かりません。 どなたかお分かりになるかたがいましたら是非教えて頂けないでしょうか。宜しくお願い致します。

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

    phpでメール送信を行ってもメールが来ません。 普通のメールアドレスです。使っているサーバーはちゃんとphpが つかえるようです。ソースは下記です。訂正するところなどありまし たらよろしくお願いします。 ソース:(ホーム)<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <title>sample</title> </head> <body> <form action="1.php" method="post"> ホームページの名前:<br> <input type="text" name="subject" size="30" value=""><br> ホームページのアドレス:<br> <input type="text" name="name" size="30" value=""><br> メールアドレス:<br> <input type="text" name="mail" size="30" value=""><br> ホームページの紹介文:<br> <textarea name="message" cols="30" rows="5"></textarea><br> <br> <input type="submit" value="送信する"> </form> </body> </html> 送信側:<?php mb_language("Japanese"); mb_internal_encoding("SHIFT-JIS"); $message = "ホームページのアドレス:" . $_POST["name"] . "\nホームページの紹介文:" . $_POST["message"]; if (!mb_send_mail("めーるアドレス@メールアドレス.jp", $_POST["subject"], $message, "From: " . $_POST["mail"])) { exit("メールの送信に失敗しました。"); } ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <title>sample</title> </head> <body> <p>メールが送信されました。</p> </body> </html>

  • phpのシンプルなメールフォーム

    あるサイトにて、単一phpのメールフォームのソースをコピーし、使用としましたが、 設定したメールアドレスに、送信ボタンを押しましたが、 受信されません。  ・送信後、「メールを送信しました」と表示されます。  ・送信のあて先は、何も反応なし。  ・ソースの「●●@●●」はダミーです。 以下ソースです。原因がわかりますでしょうか。ご教授のほどよろしくお願いします。 ―――――――――――――――――――――――――――――――――――― <?php // 送信フラグ $send_flg = false; // エラーメッセージ $err_msg = array(); // 送信ボタンを押した後の処理 if ($_POST["post_flg"]) { // エラー if ($_POST["name"] == "") { $err_msg[] = "「お名前」は必須です"; } if ($_POST["email"] == "") { $err_msg[] = "「メールアドレス」は必須です"; } // エラーが無ければ送信 if (count($err_msg) == 0) { // 宛先 $mail_to = "●●@●●"; // 送信元アドレス $mail_from = "form@example.com"; // 件名 $mail_subject = "メールフォームから送信がありました"; // 本文 $mail_body = ""; $mail_body.= "■お名前\n".$_POST["name"]."\n\n"; $mail_body.= "■メールアドレス\n".$_POST["email"]."\n\n"; $mail_body.= "■コメント\n".$_POST["comment"]; // 送信処理 mb_language("Japanese"); mb_internal_encoding("UTF-8"); mb_send_mail($mail_to, $mail_subject, $mail_body, "From: <".$mail_from.">"); $send_flg = true; $_POST = array(); } } ?> <!DOCTYPE HTML> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>メールフォーム</title> </head> <body> <?php // 初期フォーム表示 if (!$send_flg) { ?> <h1>メールフォーム</h1> <?php // エラーメッセージがある場合 if (count($err_msg) > 0) { ?> <p style="color:red;"> <?php foreach ($err_msg as $val) { ?> ※<?php echo $val ?><br> <?php } ?> </p> <?php } ?> <form action="mail.php" method="post"> <p> お名前<br> <input type="text" cols="30" name="name" value="<?php echo $_POST["name"] ?>"><br> </p> <p> メールアドレス<br> <input type="text" cols="30" name="email" value="<?php echo $_POST["email"] ?>"><br> </p> <p> コメント<br> <textarea name="comment" cols="50" rows="10"><?php echo $_POST["comment"] ?></textarea><br> </p> <input type="submit" name="post_flg" value="送信する"><br> </form> <?php // メール送信後の表示 } else { ?> <br><br><br><br>メールを送信しました。<br> <?php } ?> </body> </html> ――――――――――――――――――――――――――――――――――――

    • ベストアンサー
    • 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
  • PHPのメール送信ができません

    初心者な者でこのような質問でごめんなさい。 私は10日でおぼえるPHPという本で勉強しているのですが 下記の内容に困ってます 【mail_input.php】 10日でおぼえるPHP5入門教室(アンケート)</h1> <form method="post" action="sendmail.php"> <input type="hidden" name="_email" value="****@***.jp" /> <input type="hidden" name="subject" value="10日でおぼえるPHP5入門教室" /> <input type="hidden" name="_result" value="<?php print($_SERVER['PHP_SELF']);?>" /> <table border="0"> <tr> <th align="right">名前:</th> <td><input type="text" name="name" size="20" maxlength="30" /></td> </tr><tr> <th align="right">E-Mail:</th> <td><input type="text" name="_from" size="50" maxlength="255" /></td> </tr><tr> <th align="right" valign="top">自由記入欄:</th> <td><textarea name="memo" cols="50" rows="5"></textarea></td> 【sendmail.php】 <?php $header_info="From: ".$_POST['_from']."\nContent-Type: text/plain;charset=ISO-2022-JP\nX-Mailer: PHP/".phpversion(); $body="■■".$_POST['_subject']."■■\n\n"; foreach($_POST as $key=>$value){ if(!strstr($key,"_")){ $body.=" [".$key."] ".$value."\r\n"; } } mb_send_mail($_POST['_email'],$_POST['_subject'],$body,$header_info); header("Location: ".$_POST['_result']); ?> ===================================================== 上記の内容でメールが送れるとの事だったのですが php.iniの設定も SMTPやsendmail_fromどちらとも設定はでき 送れるはずなのですがメールが届きません なぜなのでしょうか? もしよろしければ教えて頂けないでしょうか? お願いします。

    • 締切済み
    • PHP
  • phpでメール送信できません 原因がわかりませんので教えてください

    送信ボタンを押すと以下のエラーがでます Warning: mb_send_mail() [function.mb-send-mail]: Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in C:\xampp\htdocs\sendmail.php on line 12 Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\sendmail.php:12) in C:\xampp\htdocs\sendmail.php on line 13 1.php.ini の設定は下記のとおりです。正しいでしょうか? [mail function] ; For Win32 only. SMTP = smtp.kss.biglobe.ne.jp smtp_port = 25 ; For Win32 only. sendmail_from = ・・・・@kss.biglobe.ne.jp xampで一括インストールしましたが5php.ini は 変更必要ですか?上記のように変更してしまいましたが。その他設定が必要なところはありますか。 2つのphpファイル リスト1  ・mail_input.php    <html><head></head><body> <form method="POST" action="sendmail.php"> <input type="hidden" name="_email" value="自分のアドレス"/> <input type="hidden" name="_subject" value=""/> <input type="hidden" name="_result" value="<?php print($_SERVER['PHP_SELF']);?>"/> <table border="0"><tr> <th align="right">名前:</th> <td><input type="text" name="name" size="20"/></td></tr><tr> <th align="right">E-Mail:</th> <td><input type="text" name="_from" size="50"/></td> </tr><tr><th align="right">自由記入欄:</th> <td><textarea name="memo" cols="50" rows="5"/></textarea></td> </tr></table> <input type="submit" value="送信"/> <input type="reset" value="クリア"/></body></html> 「自分のアドレス」部分は受信したいアドレスをいれれば宜しいでしょうか?テストの場合でしたら自分の自宅のアドレスなど。それ以外に変更すべきところがありますか。 リスト2・sendmail.php    <?php $header_info="From: ".$_POST['_from']." \nContent-Type:text/plain;charset =ISO-2022-JP\nX-Mailer:PHP/".phpversion(); $body="■■".$_POST['_subject']."■■\n\n"; foreach($_POST as $key=>$value){ if(!strstr($key,"_")){ $body.="[".$key."]".$value."\r\n"; } } mb_send_mail($_POST['_email'],$_POST['_subject'] ,$body,$header_info); header("Location: ".$_POST['_result']); ?> ?リスト2の「 mb_send_mail 」の後に自分のアドレスとか実際は入れる必要がありますか?例えば ($_POST['abcd@hotomail.co.jp']みたいに。 自分のメールアドレス宛に送信されるようにテストしてますが一番上に記したエラーがでてしまい、送れません。素人なので細かくわかりやすく説明していただくとたいへん助かります。 上記のファイルは本を移しただけなので変更するべきところがありますか phpを使ってお問い合わせのページができることをめざしており、とりあえず自宅でテストをしてる状況です。よろしくお願いします。 自宅はbiglobe でネットやメールをしてます。

    • ベストアンサー
    • PHP
  • PHP入力フォームから確認画面にいって送信する。という事がやりたいので

    PHP入力フォームから確認画面にいって送信する。という事がやりたいのですが、入力フォームと送信画面は作成できたのですが、その間の確認画面をどう作成したらよいかわからないので、質問致します。 1.入力フォーム(mail.htmlで作成) <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>sample</title> </head> <body> <form action="send.php" method="post"> 件名:<br> <input type="text" name="subject" size="30" value=""><br> 送信者名:<br> <input type="text" name="name" size="30" value=""><br> メールアドレス:<br> <input type="text" name="mail" size="30" value=""><br> 本文:<br> <textarea name="message" cols="30" rows="5"></textarea><br> <br> <input type="submit" value="送信する"> </form> </body> </html> 2.確認画面・・・ここが作成したいページです。 3.送信画面(send.phpで作成) <?php mb_language("Japanese"); mb_internal_encoding("UTF-8"); $message = "名前:" . $_POST["name"] . "\n本文:" . $_POST["message"]; if (!mb_send_mail("hoge@example.com", $_POST["subject"], $message, "From: " . $_POST["mail"])) { exit("メールの送信に失敗しました。"); } ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>sample</title> </head> <body> <p>メールが送信されました。</p> </body> </html> という感じです。 やりたい事としては、第三者に入力フォームに入力してもらい、送信ボタンを押すと、入力内容はこれでよろしいですか?という画面が出て OKならば、そのまま送信。修正したい場合は戻るボタンでmail.htmlに戻り、修正する。その際の戻るボタンを押した場合は 入力した内容が消えていないこと。という事がやりたいのです。 「2.確認画面」のサンプルスクリプトを教えて頂けないでしょうか。 1と3も間違っているならご指摘下さい。よろしくお願い致します。

    • 締切済み
    • PHP

専門家に質問してみよう