![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
No.5ベストアンサー
- 回答日時:
文字コードを統一してみてください。
また、
サブジェクトをbase64エンコードしてからJISにして、それをなかったことにしてmimeエンコードをかけている意味のないことをしているので、修正してください。
> $subject = base64_encode($subject);
> $subject=mb_convert_encoding($subject,"ISO-2022-JP","Shift_JIS");
> $subject = mb_encode_mimeheader($title);
エンコードせずに送るとどうなりますか?
また、添付ファイル付きと添付ファイルなしだと違いますか?
mb_send_mailを使用するとどうなりますか?
たびかさなるご回答ありがとうございます。
>サブジェクトをbase64エンコードしてからJISにして、それをなかったことにしてmimeエンコードをかけている意味のないことをしているので、修正してください。
の点は
$subject = $title;
$subject=mb_convert_encoding($subject,"ISO-2022-JP","SHIFT-JIS"); $subject = base64_encode($subject);
のように修正しました。
このプログラムはhtml上で入力された値を一旦PHPにPOSTを使って
受け渡し、PHPで確認ページを生成し、正しければメール送信というものなのですが、
htmlもphpも
<META HTTP-EQUIV="Content-Type"
CONTENT="text/html;CHARSET=SHIFT-JIS">
でSHIFT-JISになるよう統一しているはずなのですが
html部ではSHIFT-JISで入力されていることになっているのに
確認ページはなぜかEUC-JPで表示されます。
これがタイトルが無題へとなっている原因なのでしょうか?
No.4
- 回答日時:
通常のメール送信はJISで送信しないと、メーラーによっては文字化けします。
で、回答ですが、
サブジェクトをbase64エンコードしてからJISにして、それをなかったことにしてmimeエンコードをかけているのがよく分かりませんが・・・
$subject = base64_encode($subject);
$subject=
mb_convert_encoding($subject,"ISO-2022-JP","Shift_JIS");
$subject = mb_encode_mimeheader($title);
jisにしてからbase64エンコードをしてみてください。
もしかしたら全体的に文字コードを統一しないと駄目かも知れません。
サブジェクトを英字のみにしたら届くでしょうか?
その場合は文字コードが原因かと思います。
mb_language("Japanese");
mb_internal_encoding("Shift_JIS");
$to = ""; //gmailアドレスにしております
$boundary = md5(uniqid(rand()));
$php_v = PHP_VERSION;
$PHP_SELF = $_SERVER["PHP_SELF"];
$title = $_POST['title'];
$action = $_POST['action'];
$email = $_POST['email'];
$comment = $_POST['comment'];
$upfile = $_FILES['upfile']['tmp_name'];
$upfile_name = $_FILES['upfile']['name'];
$upfile_type = $_FILES['upfile']['type'];
if($action == "post"){
if($email){
$title = htmlspecialchars($title);
$email = htmlspecialchars($email);
$comment = htmlspecialchars($comment);
$comment = nl2br($comment);
$comment = str_replace("\r", "", $comment);
$comment = str_replace("\n", "", $comment);
if($action == "send"){
$msg = "";
$from =$email;
$subject = $title;
$subject = base64_encode($subject);
$subject=mb_convert_encoding($subject,"ISO-2022-JP","Shift_JIS");
$subject = mb_encode_mimeheader($title);
$header = "From: $from\n";
$header .= "Reply-To: $from\n";
$header .= "X-Mailer: PHP/".phpversion()."\n";
$header .= "MIME-version: 1.0\n";
if(file_exists($upfile)){
$header .= "Content-Type: multipart/mixed;\n";
$header .= "\tboundary=\"$boundary\"\n";
$msg .= "This is a multi-part message in MIME format.\n\n";
$msg .= "--$boundary\n";
$msg .= "Content-Type: text/plain; charset=Shift_JIS\n";
$msg .= "Content-Transfer-Encoding: 7bit\n\n";
}else{
$header .= "Content-Type: text/plain; charset=Shift_JIS\n";
$header .= "Content-Transfer-Encoding: 7bit\n";
}
文字数の都合によりファイル添付部とメール送信部は削っております。
以上のようにコードを変更いたしましたが
本文とファイル添付はうまくいっているのですが
gmail側に届くメールは英字も日本語もすべて無題となってしまいます。
No.3
- 回答日時:
ソースを拝見しましたが、
$header に $subject も $title も入ってないのですが。
ご回答ありがとうございます。
メール送信は分からないことが多いので追加質問させていただきます。
文字数の関係で省略しておりますメール送信の部分に
mail関数を仕様しており
mail関数の場合
mail("$to","$subject","$msg","$header");
で良いはずなので
タイトル部に$subjectにしているのですが、
それだけではだめなのでしょうか?
$header部に$subjectの内容ももたせなければならないのでしょうか?
No.2
- 回答日時:
変数に値が入っていないとか。
ソースを見ないと問題発見は難しいです。
$PHP_SELF = $_SERVER["PHP_SELF"];
$title = $_POST['title'];
$action = $_POST['action'];
$email = $_POST['email'];
$comment = $_POST['comment'];
$upfile = $_FILES['upfile']['tmp_name'];$upfile_name = $_FILES['upfile']['name'];
$upfile_type = $_FILES['upfile']['type'];
if($action == "send"){
$msg = "";
$from =$email;
$subject = $title;
$subject = base64_encode($subject);
$subject=
mb_convert_encoding($subject,"ISO-2022-JP","Shift_JIS");
$header = "From: $from\n";
$header .= "Reply-To: $from\n";
$header .= "X-Mailer: PHP/".phpversion()."\n";
$header .= "MIME-version: 1.0\n";
$subject = mb_encode_mimeheader($title);
if(file_exists($upfile)){
$header .= "Content-Type: multipart/mixed;\n";
$header .= "\tboundary=\"$boundary\"\n";
$msg .= "This is a multi-part message in MIME format.\n\n";
$msg .= "--$boundary\n";
$msg .= "Content-Type: text/plain; charset=EUC-JP\n";
$msg .= "Content-Transfer-Encoding: 7bit\n\n";
}else{
$header .= "Content-Type: text/plain; charset=EUC-JP\n";
$header .= "Content-Transfer-Encoding: 7bit\n";
}
if($comment){
$comment = str_replace("<br />", "\n", $comment);
$msg .= "$comment\n";
}
if(file_exists($upfile)){
$fp = fopen($upfile, "r") or die("error"); //ファイルの読み込み
$contents = fread($fp, filesize($upfile));
fclose($fp);
$f_encoded = chunk_split(base64_encode($contents));
$msg .= "\n\n--$boundary\n";
$msg .= "Content-Type: " . $upfile_type . ";\n";
$msg .= "\tname=\"$upfile_name\"\n";
$msg .= "Content-Transfer-Encoding: base64\n";
$msg .= "Content-Disposition: attachment;\n";
$msg .= "\tfilename=\"$upfile_name\"\n\n";
$msg .= "$f_encoded\n";
$msg .= "--$boundary--";
}
以下メール送信といったソースコードです。
No.1
- 回答日時:
文字コードの問題ではないですか?
何かのメーラーで件名が無題になってしまう現象があり、
mb_convert_encodingで適切な文字コードに変換したら
解決した記憶があります。
【参考】mb_convert_encoding
http://php.s3.to/man/function.mb-convert-encodin …
参考URL:http://php.s3.to/man/function.mb-convert-encodin …
タイトル部もEUC-JPにエンコードしてみましたが
やはり無題のままになってしまいます。
mb_language("Japanese");
mb_internal_encoding("EUC-JP");
$title = $_POST['title'];
$title = htmlspecialchars($title);
$subject = $title;
$subject = base64_encode($subject);
$subject = mb_convert_encoding($subject,"ISO-2022-JP","EUC-JP");
エンコード仕方が間違っているのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・「I love you」 をかっこよく翻訳してみてください
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・昔のあなたへのアドバイス
- ・かっこよく答えてください!!
- ・あなたが好きな本屋さんを教えてください
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・【大喜利】【投稿~8/27】 こんなガソリンスタンド二度と来るか!なぜそう思った?
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・【お題】動物のキャッチフレーズ
- ・【お題】甲子園での思い出の残し方
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・自分用のお土産
- ・人生で一番お金がなかったとき
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・ちょっと先の未来クイズ第1問
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
file_get_contents()で文字化け...
-
文字化け変換方法
-
自動返信メールへの画像添付
-
Gmailへのメール送信で文字化け
-
正規表現で数値から始まりYを1...
-
VBAのコマンドボタンの文字列の...
-
ファイルから読み取った改行文...
-
htmlのソースからテーブルの値...
-
awkで改行を除いて文字列を抜き...
-
PHPで変数から1行目だけを取得...
-
パソコンで全角、半角文字の切...
-
ソースコードの1行が長いとき...
-
[VBA]テキストボックスからエク...
-
テキストファイルから改行コー...
-
awkの BEGIN{RS=""} で空行を削...
-
ダイアログにおける改行
-
文字の入力で横バー上段、中断...
-
「半角数字」と「+」を許可する...
-
1バイト文字の上位4ビット・...
-
全角英数文字が嫌われる理由を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
文字化け変換方法
-
SQL Serverで文字コードUTF-8
-
PHPmailerでの添付ファイルの文...
-
SJISで取得した半角カナをUTF-8...
-
UTF8メールがLotus Notesで文字...
-
RSSを取得すると文字化けする。
-
「あ」→「82A0」のようにshift-...
-
【PHP】mb_convert_encoding...
-
メールのCCに複数のアドレスを...
-
postの文字化け防止について
-
PHP+Postgres 「髙」が文字化け
-
SJIS→UTF-8変換後の文字化けに...
-
記号だけの文字化け対応について
-
phpのメールフォームの完了画面...
-
phpMyAdmin内での文字化け
-
送信したメールのタイトルが無...
-
SJISからUTFに変換して...
-
sjisの文字化けとその対処方法...
-
セッションが文字化け、エンコ...
-
機種依存文字が?になる
おすすめ情報