- ベストアンサー
functionとforeachでメール送信
- HTMLのメールフォームからPOSTでデータを受信してクライアントとユーザーの両方にメールを送るプログラムを作成していますが、メールが届かない問題や本文の不要な文字が表示される問題に悩んでいます。
- 1. functionで関数を作りforeachでデータを取得してメール送信する方法についての質問です。2. メールの本文にある不要な文字を消す方法についての質問です。
- 既存のプログラムではメールが届かない問題や本文に不要な文字が表示される問題が発生しており、解決方法についてのアドバイスを求めています。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
さっきは気づかなかったのですが、原因がわかりました。 $head .= "Content-type: text/html; charset=\"Jis\r\n\""; は、 $head .= "Content-type: text/html; charset=\"Jis\"\r\n"; ですね。たぶん。
その他の回答 (3)
- shu_a
- ベストアンサー率87% (14/16)
下記の mb_convert_encodin は mb_convert_encoding の間違えです。
- 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 という関数もあります。
お礼
何度もありがとうございます。 送信前の文字列なのですが、$messageは"がなくちゃんと表示されています。$headは MIME-Version: 1.0 Content-type: text/html; charset="Jis " と表示されます。 mb_convert_encodingをしても変わりませんでした。 $headの指定の仕方が悪いのでしょうか?もしそうだとしたら何か他に指定する方法はありますか?
- 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>が表示されてしまいます。 どうしたら上手いこと行きますでしょうか???
お礼
ありがとうございます。できました。 \"の位置が悪かったんですね。 何度もすみません。非常に助かりました^^。