こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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週間近く悩んでいるのですが、一向にできそうにありません・・・。皆さんの知恵と知識をお借りできたらなと思います、どうかよろしくお願いします。
他に何かいる情報があれば教えて下さい。分かる範囲で補足していきます。

投稿日時 - 2004-10-06 15:31:53

QNo.1030906

困ってます

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

さっきは気づかなかったのですが、原因がわかりました。

$head .= "Content-type: text/html; charset=\"Jis\r\n\"";

は、

$head .= "Content-type: text/html; charset=\"Jis\"\r\n";

ですね。たぶん。

投稿日時 - 2004-10-07 15:58:28

お礼

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

投稿日時 - 2004-10-07 16:42:05

ANo.4

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.3

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

投稿日時 - 2004-10-07 12:43:52

ANo.2

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

投稿日時 - 2004-10-07 12:41:18

お礼

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

投稿日時 - 2004-10-07 14:23:16

ANo.1

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. 上記の方法で試すと解決すると思います。

投稿日時 - 2004-10-06 18:16:56

お礼

ありがとうございます。
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>が表示されてしまいます。
どうしたら上手いこと行きますでしょうか???

投稿日時 - 2004-10-07 12:07:51

あなたにオススメの質問