• ベストアンサー
  • 困ってます

functionとforeachでメール送信

こんにちは。前にも質問をさせて頂いたのですが・・・ HTMLのメールフォームからPOSTでデータを受信してクライアントとユーザーの両方にメールを送るようなプロゴラムを記述しています。 データの受け取りからメールの送信のスクリプトを function message(){ foreach($_POST as $key => $val){ print( $key .":" .$val. "<br>"); }; }; $message= " テスト送信 <br>"; $message.= message(); if(mail("クライアントのメールアドレス" , "テストメール", $message, $head)&& mail(message(34) , "テスト確認メール", $message, $head)){ print("・・・"); }else{ print("ご注文メール送信に失敗しました。<br />\n"); print("再度ご注文フォームより注文して下さい。\n"); print("<a href=\"#\">戻る</a>"); }; としています。message(34)はユーザーのアドレスを取得しています。 しかし実行すると画面にPOSTで取ってるデータが2回表示され肝心のメールは クライアントには " テスト送信 と本文に表示されてユーザーにはメールが届きません。 質問が2つですみませんが、 1、functionで関数を作りforeachでデータを取得しメールで送信するというやり方は無謀なのでしょうか? もしできるのでしたらやり方を教えて頂けないでしょうか? 2、メールの本文にある"を消すにはどうしたらいいのでしょうか? かれこれ1週間近く悩んでいるのですが、一向にできそうにありません・・・。皆さんの知恵と知識をお借りできたらなと思います、どうかよろしくお願いします。 他に何かいる情報があれば教えて下さい。分かる範囲で補足していきます。

共感・応援の気持ちを伝えよう!

  • 回答数4
  • 閲覧数95
  • ありがとう数3

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

  • ベストアンサー
  • 回答No.4
  • shu_a
  • ベストアンサー率87% (14/16)

さっきは気づかなかったのですが、原因がわかりました。 $head .= "Content-type: text/html; charset=\"Jis\r\n\""; は、 $head .= "Content-type: text/html; charset=\"Jis\"\r\n"; ですね。たぶん。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ありがとうございます。できました。 \"の位置が悪かったんですね。 何度もすみません。非常に助かりました^^。

関連するQ&A

  • foreachの中で、リンクをPOST送信したい

    ・PHPのforeachで一覧表示しているリンクテキストをクリックして、POST送信したいです ・この時、foreachの$val['url']内容に応じて、action送信先を変更したいのですが、どうすれば良いでしょうか? ■完成イメージ <?php foreach ($key as $val): ?> <form name="test"> <a href="#" onClick="hoge($val['url'])"> </form> ・1行目内容 … 送信先 $val['url'] ・2行目内容 … 送信先 $val['url'] ・3行目内容 … 送信先 $val['url'] ■分からないこと ・foreachで回した後にクリックすることになると思うので、現状だとaction送信先は、全てループ一番最後の$val内容固定になってしまいます(多分…) ・リンクテキストのPOST送信先を、foreach内容に応じて変えるにはどうすれば良いでしょうか? ※foreach内容に応じて、リンクテキストがPOST送信できるのであれば、やり方は何でも良いです

  • foreachとかの勝手な省略?

    PHP初心者です。 foreachを使うときに、参考サイトのソースを見て???だったのですが、 例えば以下の場合に foreach($_POST['hoge'] as $key => $val){ echo "$key : $val \n"; } とありますが、hogeは自分で決めたものなので分かるのですが、 見に覚えの無い$key => $valといった変数で動作しています。 $keyや$valは自分で定義した覚えはありません。 調べると$keyは分かりませんが、$valはvalueの省略みたいな記述がありました。 また、他には更に短縮され、$kとか$vしか記述されていないソースもあり、 試すとこれでも正常に動いています。 これはどういうことなのでしょうか? 何か決まりがあるのでしょうか。 ちなみに、チェックボックスの配列取得の定義に使いました。 私からはただ勝手に短縮しているようにしか見えず納得いきません。 お詳しい方、どなたかアドバイス頂けないでしょうか。 宜しくお願いします。

    • ベストアンサー
    • PHP
  • foreachでのメール一斉送信処理がうまくいきません

    以下のようなファイルからデータを読み込みメールを送信させたいのですが、一つ目のデータに対してはメール送信が行われますが、2行目以降に対してメール送信が行われません。 下記のuser.txt例ですと1行目のAさん宛てには送信されますが,2行目のBさんにはメール送信がされません。 どうしてなのでしょうか? ユーザーに応じたメッセージを送信する必要があり、BCC送信は利用できません。 #user.txtの内容----------- #Aさん,a@mail.com,0 #Bさん,b@mail.com,0 #------------------------ #読み込んだファイルから一行づつ各項目データを読み込む #@checkにはuser.txtが入っている。 foreach $item (@check){ @check_array = split(/\,/, $item); #1件づつメールを送信する require "./mails_user.pl"; } #外部 mails_user.plの内容----------- open (MAIL, "|$mailprog -t") or &Make_Error('mail_trouble'); print MAIL "To: $check_array[1]\n"; print MAIL "From: 送信元アドレス\n"; print MAIL "Subject: タイトル\n\n"; print MAIL "$check_array[0]へのメッセージ"; close(MAIL); 1; #-----------------------------------

    • ベストアンサー
    • Perl

その他の回答 (3)

  • 回答No.3
  • shu_a
  • ベストアンサー率87% (14/16)

下記の mb_convert_encodin は mb_convert_encoding の間違えです。

共感・感謝の気持ちを伝えよう!

  • 回答No.2
  • shu_a
  • ベストアンサー率87% (14/16)

return については参照URLを。 頭にダブルコーテーションがついてしまう問題については、送信前の文字列を出力してみてはどうでしょうか。 また、文字コードの問題が考えられます。 $message,$head は JIS コードで送信しているでしょうか? mb が有効ならば、 $head = mb_convert_encodin($head, "JIS"); $message = mb_convert_encoding($message, "JIS"); によって変換すべきです。 i18n_convert という関数もあります。

参考URL:
http://php.planetmirror.com/manual/ja/functions.returning-values.php

共感・感謝の気持ちを伝えよう!

質問者からのお礼

何度もありがとうございます。 送信前の文字列なのですが、$messageは"がなくちゃんと表示されています。$headは MIME-Version: 1.0 Content-type: text/html; charset="Jis " と表示されます。 mb_convert_encodingをしても変わりませんでした。 $headの指定の仕方が悪いのでしょうか?もしそうだとしたら何か他に指定する方法はありますか?

  • 回答No.1
  • shu_a
  • ベストアンサー率87% (14/16)

function message(){ foreach($_POST as $key => $val){ print( $key .":" .$val. "<br>"); }; }; は文字列を返していないのではないでしょうか? 印字ではなく、文字列を返すようにすればよいと思います。 あと foreach の終わり、function の終わりには ;(セミコロン)は不要です。 function message(){ foreach($_POST as $key => $val){ $buf .= $key .":" .$val. "<br>"; } return $buf; } [質問について] 1. 無謀でもないような気がします。正しく文字列を取得できるようにすれば良いと思います。 2. 上記の方法で試すと解決すると思います。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ありがとうございます。 1に付いては解決しました。 いまいちreturnの使い道が分からないのですが、returnとはどのように使うのですか??? 2ですが、どうもメールのヘッダ指定の仕方に問題があるみたいなんです・・・ メールのヘッダ指定に $head = "MIME-Version: 1.0\r\n"; $head .= "Content-type: text/html; charset=\"Jis\r\n\""; として mail($soushin , "テスト確認メール", $message, $head); としてメールを送信すると、頭に"が付きます。 そして2行目の$head .= "Content-type: text/html; charset=\"Jis\r\n\""; をコメントアウトすると"は表示されなくなりますが、本文中に<br>が表示されてしまいます。 どうしたら上手いこと行きますでしょうか???

関連するQ&A

  • foreachの疑問

    <pre> <?php $a=array('x'=>1,'y'=>2,'z'=>3); foreach($a as $key=>$value) { print"$key:$value\n"; } foreach($a as $key=>&$value) { $value="<<$value>>"; } foreach($a as $key=>$value) { print"$key:$value\n"; } ?> </pre> の応答が x:1 y:2 z:3 x:<<1>> y:<<2>> z:<<2>> となり x:1 y:2 z:3 x:<<1>> y:<<2>> z:<<3>> となりません。 どうすればよいでしょうか? 環境はFedoraCore4-PHP5(アップデータしたばかり)です。

    • ベストアンサー
    • 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>

  • foreach内での$_の書き換え

    数年前にハッシュのデータをforeachで取り出す時、$_をいじると、$_はハッシュのデータと直接つながっているので、ハッシュのデータ(keyは変わらずvalueのほう)が書き換わってしまうと聞き、実際にやってみて書き換わってしまった覚えがあります。 %hash = ("red" => "aka", "green" => "midori", "blue" => "ao", "black" => "kuro"); foreach (%hash){ print "$_<br>\n"; $_ = "modify"; } print "<hr>\n"; foreach (values %hash ){ print "$_<br>\n"; } ↓↓↓↓↓↓html↓↓↓↓↓↓↓ blue ao green midori red aka black kuro ------------------------------------ modify modify modify modify ↑となったはず 先日それを試してみたら書き換わりませんでした。 以前は確かに書き換わった覚えがあります。 perlの仕様が変わったのでしょうか。それとも私が何か間違っているのでしょうか。 詳しい方にお教えいただければと質問しました。 よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • functionの中にfunction?

    functionの中にfunctionの関数を読み込みたいのですが そのようなことはphpで可能でしょうか? ソースは以下のようになっております。 // 実行 hoge1(); hoge2(); function hoge1() { if (!$_POST["submit"]) { foreach($_POST as $k => $v) { if(get_magic_quotes_gpc()) { $v=stripslashes($v); } $v=htmlspecialchars($v); $array[$k]=$v; } extract($array); } } function hoge2() { echo <<<EOM ~~表示させる文章など~~ EOM; foreach ($array as $key => $val){ echo "<input type=\"hidden\" name=\"$key\" value=\"$val\" />\n"; } } 具体的にはhoge1のextract($array);をhoge2の$arrayに入れて foreachで出力させたいのですがどのようにすればできますでしょうか?

    • 締切済み
    • PHP
  • 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
  • foreach文について、今朝、回答いただいて、その時は分かったつもり

    foreach文について、今朝、回答いただいて、その時は分かったつもりだったのですが、 やっぱりよく分かっていなかったようなので、もう一度質問させてください。 今朝質問した内容は、下記です。 ▼配列の要素の値をループ中に変更して確認したいのですが、   http://okwave.jp/qa/q5943567.html 例えば、下記例のとき、上記と挙動が異なるのは、なぜでしょう? このforeachでは、値を書き換えできないので、 そもそも、上記と比較をしてはいけないのでしょうか? $arr = array("値1", "キー1" => "値2", "値3"); foreach($arr as $val){ $val = "{$val}の値利用"; echo $val."<br />"; } foreach($arr as $val){ echo $val."<br />"; } 1)$arrの内容を$valにコピー 2)$valに値を代入 3)$valを表示 4)1)へ戻る で、特に分からないのが、以下です。 上のforeachで、 代入後の値が表示されるのは、 なぜでしょうか。 今朝質問した「$arr as $key => $val」 のときと比較して、 どなたか解説していただけないでしょうか?

    • ベストアンサー
    • PHP
  • POSTされたデータの一括操作

    POSTされたデータを一括で HTMLタグの取り除きと改行の取り除きを行いたいのですが foreach($_POST as $val => $key){ $_POST[$key] = htmlspecialchars ($val); $_POST[$key] = preg_replace("/\n|\r/", "", $val); } とやってみたのですが希望通りになりませんでした。 どこがまちがっているのでしょうか?

    • 締切済み
    • PHP
  • 困っています。

    このコードは自動返信コードで管理者への送信ができませんと言われました。 ここから送信コードをコピーして管理者が受信できるようにするには どうすればいいのでしょうか?宜しくお願いいたします。 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>お問い合わせ</title> </head> <body> <?php $onamae=$_POST['onamae']; $address=$_POST['address']; $tel=$_POST['tel']; $email=$_POST['email']; $message=$_POST['message']; print '[お名前]<br><br>'; print $onamae.'様<br><br>'; print '<br>'; print '<br>'; print '[住所]<br><br>'; print $address; print '<br>'; print '<br>'; print '[電話番号]<br><br>'; print $tel; print '<br>'; print '<br>'; print '<br>'; print $email.'に確認メールを送りました。<br><br>以下のお問い合わせありがとうございました。<br />'; print '<br>'; print '<br>'; print '[お問い合わせ内容]<br><br>'; print $message; print '<br>'; print '<br>'; $mail_message=$onamae."様\nお問い合わせありがとうございました。以下を受け付けました。\n".$message; $mail_sub='お問い合わせ受け付けました'; $mail_head='From: 管理者のアドレス'; $mail_message=html_entity_decode($mail_message,ENT_QUOTES,"UTF-8");//文字コード設定 mb_language('Japanese');//文字コード設定 mb_internal_encoding("UTF-8");//文字コード設定 mb_send_mail($email,$mail_sub,$mail_message,$mail_head); ?> </body> </html> $mail_toが必要なのですか? 何度もチャレンジしてみましたがダメでした。 よろしくお願いします。

    • 締切済み
    • PHP
  • PHPメール送信画面(メールフォーム)

    こんにちは!PHPの勉強している学生です。 皆さん、お忙しいところ恐縮ですが、2つのファイル(下記のform.htmlとsend.php)でメール送信画面(メールフォーム)を作っています。大元はググって、無料ソースをコピーして、無料レンタルサーバーの@pageにFFFTP送信して確認致しました。 (1) 結果、送信ボタンを押した後、「メールが送信されました。」と表示はされるのですが、実際にはメールが送られてきません。ちなみに、test@mopera.netの部分に、NTTドコモで契約している自分のメールアドレスを入れました。お恥ずかしながら、A,無料サーバー側の問題なのか?、B,ドコモの設定の問題なのか?、C,メールフォームの問題なのか?分かりません。 ここに関しては、原因やソースコードをご教授頂ければ幸いです。 (2) またPHPのメールフォームでは、そもそもどの様な仕組みでメールが送られるのかが分かりません。 つまり、サーバーでメールを送っているにしても、受信のメールアドレスは何になるのでしょうか? メールフォームで入力した、メールアドレスから送られるのでしょうか? 素人なので検討がつきませんが、より良いソースコード等がありましたらお知らせ下さいませ。 どうぞ宜しくお願い致します。 ■form.html■ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <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> ■send.php■ <?php $message = "名前:" . $_POST["name"] . "\n本文:" . $_POST["message"]; if (!mb_send_mail("test@mopera.net", $_POST["subject"], $message, "From: " . $_POST["mail"])) { exit("error"); } ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>sample</title> </head> <body> <p>メールが送信されました。</p> <p><a href="top.html">戻る</a></p> </body> </html>

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

    現在独学で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