※ ChatGPTを利用し、要約された質問です(原文:PHP mb_send_mail関数 の文字化け)
PHPのmb_send_mail関数でメールフォームを作成した時に文字化けする理由はなぜでしょうか?
このQ&Aのポイント
ホームページ作製の祭にmb_send_mail関数を使ってmailフォームを作ったのですが、送信はされているのですが、mailフォームのアドレスを記入するところにひらがなやデタラメなアドレスを入れると、Outlook で受信すると送信者覧の所だけ、文字化けします。
メール本文に表示されているデタラメなアドレスはそのまま表示されるのですが、なぜでしょうか?
PHPの設定が原因かOutlookが原因か、サーバーの問題なのか理由がわかりません。
ホームページ作製の祭に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 />メール送信失敗です。";
}
}
?>
お礼
回答有難うございます。 自分の思いつくように、 下記のように単純に変更してみたら一応送信できました。 しかし、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を使ってるのが、何かきしょく悪くてしっくりこないのですが(苦笑) おかしいことではないのでしょうか??