ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

ド素人でも問題ないPHPサークルコミュのPHP の mail()、文字化け

  • mixiチェック
  • このエントリーをはてなブックマークに追加
$to = 'abc@gmail.com';

$name = htmlentities($_POST['name']);
$email = htmlentities($_POST['email']);
$message =htmlentities($_POST['message']);

。。。。。

mail($to, "Contact Form", $message, $header);

以上のPHPを書いたんだけど、日本語でメッセージを送ったら、文字化けです。英語で送ったら、大丈夫です。困っています。
utf8_encodeなど使ったこともありますが、まだ文字化けです。誰かわかったら、教えていただけませんか。ありがとう。

コメント(9)

こんな感じでどうでしょうか?
試してないので、想像なので、
だめだったらごめんなさい。

あと、半角カタカナが含まれるならmb_convert_kana()を調べて、
それも$name,$email,$messageに適用させましょう。
(半角カタカナを全角カタカナに変換してから、メールを送信させる)
文字化けの対象になりますので。

以下は書き直したスクリプトです。
よかったらご参考までに使ってください。


##############メール送信スクリプト#####################
//日本語指定
mb_language("ja");
//文字コード指定
mb_internal_encoding("UTF-8");

//ヘッダーにはmb_encode_mimeheader関数を使う
//Fromはいらないかも。$headerの中身がわからないので書いてみました。
//ここはうまいこと書き換えてください
$header="From:".mb_encode_mimeheader("{$header}");

//ここはそのまま
$name = htmlentities($_POST['name']);
$email = htmlentities($_POST['email']);
$message =htmlentities($_POST['message']);

//メール送信時の文字コードはShift-Jisにしましょう
$name = mb_convert_encoding($name,"SJIS","UTF-8");
$email = mb_convert_encoding($email,"SJIS","UTF-8");
$message = mb_convert_encoding($message,"SJIS","UTF-8");

//マルチバイト(日本語とか)のメールはmb_send_mailを使うと楽ですよ。
mb_send_mail($to, "Contact Form", $message, $header);


ありがとう。。。。。
やったばかりですが、まだだめです。。
困ってるんです。
食いしん坊さん、使ってるサーバー香港のサーバーですか?

マルチバイトの設定どうなってますか?

phpinfo()使って見てみてください。

日本語使うのには、マルチバイトの設定をphp.iniに書いておかないと

使えないですよ。

日本語って認識してくれないから。

それが原因の気がしてきた。
はじめまして、PHP実務経験ほぼ0の初心者です。PHPとMySQL、Smartyを使ったCMSの作り方を職業訓練でやって1年経った昨今、今の転職先の部署でWebも含めた庶務担当になり、現在訓練で習ったPHPを使って会社の既存のHPにある問い合わせフォームのリニューアルをしています。

ですが、問い合わせ者からのメールを、管理者アドレスと問い合わせ者のアドレスに「確認メール」として送りたいのですが、

Smartyライブラリを読み込んでSmartyのインスタンスを作成後、テンプレートとコンパイル用のディレクトリを指定、さらに問い合わせ者からの問い合わせ内容を「$regist=$_POST["regist"];」で受け取り→セッションより値を取得

とここまではよいのです。ところが、下記のスクリプトを追加すると、追加前まで「(画面だけは)送信しました」と出せるのに、下記スクリプトを追加すると画面が真っ白になってしまいます。
いろいろ調べたのですが、どうしても原因がわからずじまいで少々参っています。

下記の部分のどこかを削れば、たぶん正常に動くのではと思うのですが、そこが自分では判断をつけかねています。
分かる方がいらっしゃればご指南いただければと思いますので、どうかよろしくお願いいたします。
(できれば早めに…これを早く仕上げて次に定年間近の上司の仕事を引き継ぐ時間を作らなくてはなりませんので…)。

下記、いくつかに分解して記載します。
まず、管理者宛です。

//DB登録前に、問合せ者と管理者にセッションを使用してメールを送る。
//【管理者宛】
//言語設定・内部エンコーディングを指定する。

require_once("Mail,php");
mb_language("japanese");
mb_internal_encoding("UTF-8");

//日本語メール送信(フォーム→管理者宛て)
$to = "私のアドレス1つめ宛て";
$from = mb_encode_mimeheader(mb_convert_encoding("悟空","UTF-8","JIS","EUC-JP"))."<私のアドレス@gmail.com>";

//メールのタイトル
$subject="【テスト】お問い合わせがありました";
$subject= mb_encode_mimeheader($subject);

$body= "ホームページよりお問い合わせがありました。\n";
$body .= "内容は下記の通りです\n\n";

//お問い合わせ項目
if($title == "01"){
$body.="選択してください";
}elseif($title == "02"){
$body.= "中国茶についての質問";
}elseif($title == "03"){
$body.= "商品に関する質問";
}elseif($title == "04"){
$body.= "イベントについてのご質問";
}elseif($title == "05"){
$body.= "アルバイト募集について";
}elseif($title == "06"){
$body.= "悟空一号店について";
}elseif($title == "07"){
$body.= "お店について";
}elseif($title == "08"){
$body.= "その他";
}

$body .="お名前 :",$name."\n";
$body .="フリガナ :",$furigana."\n";
$body .="〒 :",$zip."\n";
$body .="ご住所1 :",$address."\n";
$body .="ご住所2 :",$town."\n";
$body .="Eメールアドレス :",$e_mail."\n";
$body .="電話番号 :",$tel_1st."\n";
$body .="携帯番号 :",$tel_2nd."\n";
$body .="お問い合わせ内容 :",$comment."\n";
// 【利用者宛】(実は、下記の記述に何か間違いか不足があるのではないかと思っています)

$to="$mail";
$from = mb_encode_mimeheader(mb_convert_encoding("悟空","UTF-8","JIS","EUC-JP"))."<私のアドレス@gmail.com>";

$subject = "【テスト】お問い合わせありがとうございます。";
$subject = mb_encode_mimeheader($subject);
$body="お問い合わせありがとうございます。\n";
$body.="以下の内容で受け付けました。\n\n";
$body.="後ほど担当者よりご連絡いたしますので\n";
$body.="しばらくお待ちください。\n\n";

(上記5番の「お問い合わせ項目」が入ります)

$body.="========================================\n";

$body.="本部(会社名) \n";
$body.="TEL 045-000-1111\n";
$body.="受付時間 9:30-18:30(年中無休)\n";
$body.="http://(店舗の名前).com\n";
$body.="========================================\n\n";
あ!それとお断りを入れるのを失念してしまっていました、かなり古いトピ起こし、大変失礼しました。
最後の部分になります。実は、色々なサイトが色々な書き方をしているため、自分の中でもここをどうやって書けばよかったのか、かなりあやふやになっています。

//Gmail のSMTPサーバを使ってPEARのMailでメール送信
// SMTPサーバーの情報を連想配列にセット
$params=array(
"host" => "tls://smtp.gmail.com",   //SMTPサーバー名
"port" => 465,                 //ポート番号(SSLポート番号。
"auth" =>true,'  //SMTPを認証する
"username"=>"私のアドレス@gmail.com", //SMTPのユーザー名(G-mailのメールアドレスを入れる)
"password"=>"(上記g-mailのログインPW)" //SMTPのPW
);

// PEAR::Mailのオブジェクトを作成
// ※バックエンドとしてSMTPを指定
$smtp = Mail::factory("smtp", $params);
// メールヘッダ情報を連想配列としてセット
$headers = array(
"Content-Type"=>"text/plain; charset=UTF-8",
"To"=> $to,   // →ここで指定したアドレスには送信されない
"From" => $from,
"Subject"=> $subject,
"body"=> $body
);   // 日本語の件名を指定する場合、mb_encode_mimeheaderでエンコード

// sendメソッドでメールを送信(上記でいけば、本当は$headersにするべきとは思いますが…)
$smtp-> mb_send_mail($to, &from, &subject, &body);

長くなってしまい済みません、どうかよろしくお願いいたします。

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

ド素人でも問題ないPHPサークル 更新情報

ド素人でも問題ないPHPサークルのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング