
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を探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
postの文字化け防止について
-
文字化け変換方法
-
フォームメールの文字化け
-
phpのmb_send_mailで携帯のみ文...
-
mb_ereg_replace での文字変換
-
SQL Serverで文字コードUTF-8
-
VBAのコマンドボタンの文字列の...
-
PPT ファイルの文字カウント=...
-
C++で空Enterの入力を判...
-
エクセルのCOUNTIFが正しくカウ...
-
VBAでCSVをExcelに取り込む時に...
-
ソースコードの1行が長いとき...
-
文字の入力で横バー上段、中断...
-
メッセージボックスで1025文字...
-
全角括弧と全角読点の間隔を狭...
-
改行について
-
カンマの含まれる文字列の数値...
-
COBOLの改行
-
エスケープ文字の復帰(¥r)と...
-
○個ずつ改行
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
文字化け変換方法
-
SQL Serverで文字コードUTF-8
-
postの文字化け防止について
-
SJISで取得した半角カナをUTF-8...
-
PHPでの文字列置換について
-
小さいひらがな(っ、ょ、ぃ、ゃ...
-
PostgreSQLからCSV形式でエクス...
-
UTF8メールがLotus Notesで文字...
-
SJIS→UTF-8変換後の文字化けに...
-
セッションが文字化け、エンコ...
-
PHPでのメール差出人名について
-
mb_send_mailの2重投稿を防止し...
-
mb_convert_encoding で 一部の...
-
メールのCCに複数のアドレスを...
-
mb_ereg_replace での文字変換
-
文字コードを変換したURLを作成...
-
文字コードの検出が正しいかを...
-
phpフォームで携帯へメール送信...
-
PHPアクセスログ バッチ処理
-
フォームメールの文字化け
おすすめ情報