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で質問しましょう!
似たような質問が見つかりました
- デスクトップパソコン スマホからメール添付でパソコンへ送った画像が開かない 4 2023/06/06 17:19
- その他(メールソフト・メールサービス) このメールは何ですか 8 2023/06/15 17:31
- PDF 電子請求書を送ったら原紙をほしいと言われてしまいました 6 2023/06/09 12:04
- その他(メールソフト・メールサービス) 【GAS】GMail自動送信 2 2022/09/04 06:19
- Gmail 会社のメルアドから個人のGmailアドレスに送ったら、「このメールにはご注意ください」と警告が出た 2 2022/05/26 15:12
- 求人情報・採用情報 タウンワークで数日前に求人にWeb応募し、今日メールで返信が来ていたのですが、面接日時が12月26日 1 2022/12/30 22:27
- Wi-Fi・無線LAN フリーWiFiスポットについて。現在、無料でWiFiが繋がる場所で、一番サクサク速度が速いおすすめス 6 2023/05/04 22:43
- 政治 学校の試験を含め、試験官はチャットGPTにやらせたらどうですか? 6 2023/02/27 15:52
- その他(メールソフト・メールサービス) メールソフトを教えてください 1 2023/03/28 23:32
- Gmail Gmailの設定。送られて来た添付画像を返信する際、添付されないようする設定の仕方を知りたい。 2 2022/09/20 23:43
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
phpのメールフォームの完了画面...
-
全角スペースを半角スペースに変換
-
正規表現で数値から始まりYを1...
-
mb_ereg_replace での文字変換
-
文字の入力で横バー上段、中断...
-
エスケープ文字の復帰(¥r)と...
-
VBAのコマンドボタンの文字列の...
-
改行コードについて
-
Excel関数「COUNTIF」で”文字”...
-
改行が半角スペースに変わる
-
ソースコードの1行が長いとき...
-
SQLインジェンクション対応...
-
PHPで<a>タグ内からURLと文字を...
-
EOF、改行の矢印
-
PHPでHTMLメールを送信、文字化...
-
エクセル セルの中の改行を消...
-
なぜインターネットでは半角カ...
-
マクロで半角を全角に
-
Excel VBAからBeckyを起動して...
-
キャリッジリターンとラインフ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
文字化け変換方法
-
phpのメールフォームの完了画面...
-
SQL Serverで文字コードUTF-8
-
PHPmailerでの添付ファイルの文...
-
SJISで取得した半角カナをUTF-8...
-
mb_convert_encoding で 一部の...
-
PHP cURLでPOSTした値が文字化...
-
SJIS→UTF-8変換後の文字化けに...
-
mb_ereg_replaceに関して
-
【PHP】mb_convert_encoding...
-
phpMyAdmin内での文字化け
-
mb_regex_encodingでエンコード...
-
PostgreSQLからCSV形式でエクス...
-
RSSを取得すると文字化けする。
-
postの文字化け防止について
-
UTF8メールがLotus Notesで文字...
-
小さいひらがな(っ、ょ、ぃ、ゃ...
-
phpでの文字エンコード
-
php自動返信メール本文の一部の...
-
mail()で送信したメールのタイ...
おすすめ情報