- 締切済み
phpのメール送信
ホームページにメールフォームを作りたいのですが、 送信できなくて困っています。 ソースは次の通りです。 <?php echo "<html>"; echo "<head>"; echo "<title>メールフォーム(送信処理)</title>"; echo "</head>"; echo "<body>"; mb_language("japanese"); mb_internal_encoding("UTF-8"); $to = "アドレスA"; $subject = "件名"; $from = "アドレスB"; $header = "From: ". $from; //本文格納 $mailbody = "■お名前:" . $_post["name"] ."\n"; $mailbody .= "■内容:" . $_post["sentaku"] ."\n"; if(mb_send_mail($to, $subject, $mailbody, $header)){ echo "送信しました。"; }else{ echo "送信できませんでした。"; } echo "</body>"; echo "</html>"; ?> またif文の日本語が文字化けしてしまいます。 メール送信できて、文字化けもないようにしたいです。 よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- yambejp
- ベストアンサー率51% (3827/7415)
>送信できなくて困っています。 個人的にはmb_send_mailはクソなのでお勧めしません。 送信できないのはおそらくメールサーバーとの接続ができてないのでは? PEAR::Mailなどでメールサーバーをしてして送るのが妥当 なお、サブジェクトなどはマイムヘッダーの調整も必要です $enc="自身の環境のコード"; mb_internal_encoding("JIS"); $subject=mb_convert_encoding($subject,"JIS",$enc); $subject=mb_encode_mimeheader($subject,"JIS"); mb_internal_encoding($enc); みたいなエンコードをしてください。 本文はmb_convert_encoding()だけで十分です。 $mailbody=mb_convert_encoding($mailbody,"JIS",$enc); メールについては最近はメーラーが優秀になってきたのであまり気にする必要はありませんが トラブルを減らすためには昔ながらの7bitJISでエンコードする方がよいかもしれません。 http://pear.php.net/manual/ja/package.mail.mail.php より精度をあげるためにはメールヘッダに メール本文のエンコードを宣言するとよいでしょう Content-Type: text/plain; charset="****" Content-Transfer-Encoding: **** >またif文の日本語が文字化けしてしまいます。 これは単にHTMLにmetaでcharsetを書いてやることです。 <meta http-equiv="Content-Type" content="text/html; charset=****">
- t_ohta
- ベストアンサー率38% (5233/13687)
このPHPファイル自体の文字コードは何で書いていますか? また、デフォルトの文字コードは何に設定されていますか? 文字コードの不整合が原因で文字化けしているように思われます。 画面の文字化けはHTMLで文字コードの宣言が無いためブラウザが異なる文字コードで表示しようとしている可能性があるので、headタグの中で文字コードの指定をしてみてください。 メールの文字化けは、各変数に入れている日本語や$_POSTの値をmb_convert_encodingを使ってUTF-8に変換してみてください。 $mailbody = mb_convert_encoding("■お名前:" . $_post["name"] ."\n", "UTF-8"); といった感じ。