解決済み

PHP mb_send_mail関数 の文字化け

  • すぐに回答を!
  • 質問No.5373056
  • 閲覧数588
  • ありがとう数1
  • 気になる数0
  • 回答数1
  • コメント数0

お礼率 100% (21/21)

ホームページ作製の祭にmb_send_mail関数を使ってmailフォームを作ったのですが、送信はされているのですが、mailフォームのアドレスを記入するところにひらがなやデタラメなアドレスを入れると、Outlook で受信すると送信者覧の所だけ、文字化けします。
(きちんと半角英数で○○@○○と入力すると文字化けせずに表示されます。)
メール本文に表示されているデタラメなアドレスはそのまま表示されるのですが...
なぜでしょうか??
PHPの設定が原因かoutlookが原因か、サーバーの問題なのか...

サーバーは「さくらインターネットサーバー」です。
PHPはバージョン 5.2.10
php.iniの設定↓

bstring.language = Japanese
mbstring.internal_encoding = euc-jp
mbstring.http_input = auto
mbstring.http_output = SJIS
mbstring.encoding_translation = On
mbstring.detect_order = auto
mbstring.substitute_character = none;
mbstring.func_overload = 0
mbstring.strict_detection = Off
mbstring.http_output_conv_mimetype=
mbstring.script_encoding=
SMTP = ○○.sakura.ne.jp
sendmail_from = ○○@○○.jp
smtp_port = 25
mail.add_x_header = Off


送信ページはeuc-jpで作ってます。

送信ページのphp↓
<?php
// メール送信先
$to = "○○@○○.jp";

if ($_SERVER["REQUEST_METHOD"] == "POST") {
foreach($_POST as $k => $v){
// 「magic_quotes_gpc = On」のときはエスケープ解除
if (get_magic_quotes_gpc()) {
$v = stripslashes($v);
}
$v = htmlspecialchars($v);
$$k = $v;
}
}
else {
exit();
}

$naiyou = "お名前:$name\n
メールアドレス:$from\n
タイトル:$title\n
内容:$naiyou\n";

if ($name != "" and $from != "" and $title != ""
and $naiyou != "" ) {
if (mb_send_mail($to, $title, $naiyou, "From:$from")) {
echo "<br />メールを送信しました。";
}
else {
echo "<br />メール送信失敗です。";
}
}
?>
通報する
  • 回答数1
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.1

ベストアンサー率 55% (944/1707)

ヘッダーはMIMEが必要ですが、処理していますか?
通常Fromは以下のようになります。
$headers .= "From: ".mb_encode_mimeheader (mb_convert_encoding($from_name,"ISO-2022-JP","AUTO")) . "<".$from_email."> \n";

マニュアルのサンプルコードを確認してください。
http://php.net/manual/ja/function.mb-send-mail.php
お礼コメント
2009matsu

お礼率 100% (21/21)

回答有難うございます。

自分の思いつくように、
下記のように単純に変更してみたら一応送信できました。
しかし、PHP初心者なものでこれで正しいのか分かりません。
このような記述はおかしいのでしょうか??

<?php
// メール送信先
$to = "○○@○○.jp";

if ($_SERVER["REQUEST_METHOD"] == "POST") {
foreach($_POST as $k => $v){
// 「magic_quotes_gpc = On」のときはエスケープ解除
if (get_magic_quotes_gpc()) {
$v = stripslashes($v);
}
$v = htmlspecialchars($v);
$$k = $v;
}
}
else {
exit();
}

$frommime = mb_encode_mimeheader($from);
$naiyou = "お名前:$name\n
メールアドレス:$from\n
タイトル:$title\n
内容:$naiyou\n";

if ($name != "" and $from != "" and $title != ""
and $naiyou != "" ) {
if (mb_send_mail($to, $title, $naiyou, "From:$frommime<$from>")) {
echo "<br />メールを送信しました。";
}
else {
echo "<br />メール送信失敗です。";
}
}
?>

---------------------------------------
自分で変更しときながら分からないところがあるのですが、
if (mb_send_mail($to, $title, $naiyou, "From:$frommime<$from>"))
の記述ですが、 <>で$fromを囲むとその部分が非表示になるということなのでしょうか?...
<$from>を記述しないとサーバーのドメイン?のようなものが送信者アドレスの後に付随してくるのですが...
それと、
自分がこんな書き方しか思いつかなかったからなのですが、
$frommime = mb_encode_mimeheader($from);
で $fromを エンコードして$frommimeに代入しているのに、その後にまた$fromを使ってるのが、何かきしょく悪くてしっくりこないのですが(苦笑)
おかしいことではないのでしょうか??
投稿日時 - 2009-10-20 01:14:44
OKWAVE 20th Be MORE ありがとうをカタチに
このQ&Aで解決しましたか?
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する

特集


より良い社会へ。感謝経済プロジェクト始動

ピックアップ

ページ先頭へ