• 締切済み

メール送信プログラム

お世話になっております。 下記本文内容にメール送信プログラム(mail.php)を付加したいと考えます。 私が考えるにその手法は二つあり、 1つめにそのまま、本文の前か後にmail.phpを付加する。 もしくは 本文の <form method="post" action="<?=$_SERVER["PHP_SELF"]?>"> に <form method="post" action="<?=$_SERVER["PHP_SELF"]?>" action="mail.php"> とする。 前者はどのように構文を書いたらよいのか不明で、 後者は構文を書いてみましたが、正常にメール送信されませんでした。 ご教授のほどお願いします。 ■本文■ <form method="post" action="<?=$_SERVER["PHP_SELF"]?>"> <input type="hidden" name="act" value="updconf"> <input type="hidden" name="roomid" value="<?=$roomid ?>"> <input type="hidden" name="hiduke" value="<?=$hiduke?>"> <input type="hidden" name="jikan" value="<?=$jikan?>"> <input type="submit" name="sub" value="予約更新"> </td> <td>お名前</td> <td> <input type="text" name="yoyakusha" value="<?=$yoyakusha ?>"> </td> </tr> <tr> <td>メールアドレス</td> <td><input type="text" name="email" value="<?=$email ?>"></td> </tr> </form> ■mail.php■ <? // メール送信元を指定 $title = "xyz"; $from = "mail"; $headers .= "From: $from\r\n"; $headers .= "Bcc: aaa@bbb\r\n"; $title2 = "=?iso-2022-jp?B?".base64_encode($title)."?="; $naiyou2 = "仮ユーザID:$yoyakusha\n 仮パス:$pass\n メールアドレスfrom:$from\n メールアドレスto:$email\n @ペイにて登録したユーザID:$title\n"; mail($email, $title2, $naiyou2, $headers) ?>

みんなの回答

回答No.3

>私が書いたコード $email = $_POST['email']; >it2008さんが書いたコード $email == @$_POST["email"]; @は不要。 =は2つではなく一つ。 ちゃんと教えたとおりに書いてくださいよーー (- -; はっつけていただいたソースですが、 いろいろ疑問は尽きないものの、 ここを直せば多分いけます。 他の部分はともかくとして。。。 デバッグの仕方ですが、 たとえば、変数$fooに値が入っているかは、 <?php var_dump($foo); ?> のように調べれば早いです。

it2008
質問者

補足

ご回答ありがとうございます。 言葉不足ですみません。 構文内にcopymasterさんがおっしゃられた通りの構文を記載したのですが、 "="を2つ書かないとjikanという変数が認識できなかったため、 あえて"="を2つ記載させて頂きました。 デバッグして変数の確認を行ったところ、 mail関数を入れる位置が違っていたみたいで、 正式な位置に変更することによって、 メール送信が可能となりました。 変数も"="1つで読み込めた形となっております。 どうもありがとうございます。 ところで、できましたらもう1つお願いがあるのですが、 下記メール構文におきましては 送信されたメールが下記事象に陥ってしまいます。 どのような対応を行えば、下記事象を防ぐことが可能なのでしょうか? どうぞ、よろしくお願いします。 ■サーバエンコード EUC ■事象 ・タイトルに日本語を入力し送信すると"?"が受信される ・メール本文内の日本語文字化けは発生しない ・メール本文内に改行が入らない <?php $yoyakusha = @$_POST['yoyakusha']; $hiduke = @$_POST['hiduke']; $jikan = @$_POST['jikan']; $tel = @$_POST['tel']; $email = @$_POST["email"]; $from = "mail"; $title = "メール"; $headers .= "From: $from\r\n"; $headers .= "Bcc: aaa@bbb\r\n"; $headers .= ('Content-Type:text/html; charset=EUC-JP'); // 本文の値を決定します。 $title2 = "=?iso-2022-jp?B?".base64_encode($title)."?="; $naiyou2 = "仮ユーザID:$name\n ユーザ:$yoyakusha\n メールアドレスfrom:$from\n メールアドレスto:$email\n ユーザID:$title\n"; mail($email, $title2, $naiyou2, $headers); }

回答No.2

>本文、$emailの部分が空になってしまいます。 POSTされてきた値を受け取っていないので、空になります。たとえば、HTMLのformで、emailというnameのフォームデータを受け取って、変数$emailに格納するには、 $email = $_POST['email']; など、受け取る処理をするコードが必要となります。 ただ、実際はさらに、セキュリティの観点から、値のバリデーションが必要です。 >後者のactionにおいては・・・ actionは、一つだけです。 actionとは、どこのページにむけてSubmit(ボタンを押して、データを送信)するか指定するところです。 もしmail.phpが対象ページなら、./mail/php のみ、 自分自身なら空白("")のみとすべきです。 ($_SERVER["PHP_SELF"]を使用することはお勧めしません。) これらのことはHTMLやPHPの基礎的な部分なので、一度PHPの入門書籍をご覧になることをお勧めいたします。

it2008
質問者

補足

すみません。やっぱり不明ですので、 関連しそうな部分、すべて記載します。 教えて頂いたとおり、下記構文を追加しました。 $email == @$_POST["email"]; しかし、結果は空欄でした。 ほかに、 $jikan == @$_POST["jikan"]; を追加しましたところ、こちらは正常に表示されました。 $emailを有効にするには、 ほかにどのような構文を追加すればよろしいのでしょうか? よろしくお願いします。 function gamen_upd() { global $conn; $array = cnv_formstr($_GET); extract($array, EXTR_SKIP); $sql = "SELECT * FROM yoyaku " . " WHERE roomid = " . $roomid . " AND hiduke = '" . $hiduke . "'" . " AND jikan = '" . $jikan . "'"; $res = mysql_query($sql, $conn) or die("データ抽出エラー"); $row = mysql_fetch_array($res, MYSQL_ASSOC); $roomname = cnv_dispstr(getroomname($roomid)); if (mysql_num_rows($res) <= 0) { $yoyakusha = ""; $email = ""; } else { $yoyakusha = cnv_dispstr($row["yoyakusha"]); $email = $row["email"]; } $ts = strtotime($hiduke); $ymd = strftime("%Y年%m月%d日(%a)", $ts); ?> <h2>更新画面</h2> <form method="post" action="<?=$_SERVER["PHP_SELF"]?>"> <table border="1"> <tr> <td colspan="3"> <p align="center"> 日付:<?=$ymd ?> 時間:<?=$jikan ?>  部屋:<?= $roomname ?></td> </tr> <tr> <td rowspan="4"> <input type="hidden" name="act" value="iti"> <input type="hidden" name="roomid" value="<?=$roomid ?>"> <input type="hidden" name="hiduke" value="<?=$hiduke?>"> <input type="hidden" name="jikan" value="<?=$jikan?>"> <input type="submit" name="sub" value="一覧表示画面へ"> </form> <?php if ($yoyakusha != "") { ?> <form method="post" action="<?=$_SERVER["PHP_SELF"]?>"> <input type="hidden" name="act" value="delconf"> <input type="hidden" name="roomid" value="<?=$roomid ?>"> <input type="hidden" name="hiduke" value="<?=$hiduke?>"> <input type="hidden" name="jikan" value="<?=$jikan?>"> <input type="submit" name="sub" value="予約削除"> </form> <?php } ?> <form method="post" action="<?=$_SERVER["PHP_SELF"]?>"> <input type="hidden" name="act" value="updconf"> <input type="hidden" name="roomid" value="<?=$roomid ?>"> <input type="hidden" name="hiduke" value="<?=$hiduke?>"> <input type="hidden" name="jikan" value="<?=$jikan?>"> <input type="submit" name="sub" value="予約更新"> </td> <td>お名前</td> <td> <input type="text" name="yoyakusha" value="<?=$yoyakusha ?>"> </td> </tr> <tr> <td>メールアドレス</td> <td><input type="text" name="email" value="<?=$email ?>"></td> </tr> </table> </form> <?php $jikan == @$_POST["jikan"]; $email == @$_POST["email"]; mail("aaa@bbb", $email, $jikan); }

回答No.1

セキュリティ面などいろいろと問題があるソースですが、ご質問部分だけについて言えば、 (1)前者 <form method="post" action=""> にして、 本文には、mail.phpのコードを置けばよいのですが、 初回表示の際には、読み飛ばすようにする必要があります。(たとえば、if文で、POSTされた場合のみ実行することにするとか) (2)後者 <form method="post" action="<?=$_SERVER["PHP_SELF"]?>" action="mail.php"> の部分ですが、 actionが二つあることが問題です。 mail.phpが、本文のphpと同じ階層にあるならば、 ・・・ action="./mail.php"> にすべきです。

it2008
質問者

補足

ご回答ありがとうございます。 前者の場合、if文を抜かしたテストプログラムを作成してみました。 <form method="post" action="<?=$_SERVER["PHP_SELF"]?>"> <input type="hidden" name="act" value="updconf"> <input type="hidden" name="roomid" value="<?=$roomid ?>"> <input type="hidden" name="hiduke" value="<?=$hiduke?>"> <input type="hidden" name="jikan" value="<?=$jikan?>"> <input type="submit" name="sub" value="予約更新"> </td> <td>お名前</td> <td> <input type="text" name="yoyakusha" value="<?=$user ?>"> </td> </tr> <tr> <td>メールアドレス</td> <td><input type="text" name="email" value="<?=$email ?>"></td> </tr> </form> <?php mail("aaa@bbbb", "My Subject", $email); ?> この状態でメールを送信すると、本文、$emailの部分が空になってしまいます。 mail関数の5行上にある<?=$email ?>をmailの本文に表示させたい場合、どのような対応をとればよろしいのでしょうか? また、後者のactionにおいては <form method="post" action="<?=$_SERVER["PHP_SELF"]?>" action="./mail.php"> のようにactionを2つつけるということが可能ということでしょうか? よろしくお願いします。

関連するQ&A