記事No | : 14092 |
投稿日 | : 2015/07/12(Sun) 01:39:41 |
タイトル | : cartform送信メールの文字化け |
ID情報 | : 77202137 |
投稿者 | : 竹内 晃 |
URL | : http://www.nihonkentei.or.jp/monoshiricho.html |
cartformを使わせていただいております。
ところが、送信メールと返信メールのうち、スマホで受信すると送信メールのみ文字化けします。返信メールは大丈夫です。
プログラムを見てみたところ、cartform.cgiの送信メールと返信メールのヘッダーに違いがありました。
404 # --- 送信内容フォーマット開始
405 # ヘッダー
406 my $body = "To: $cf{mailto}\n";
407 $body .= "From: $from\n";
408 $body .= "Subject: $sub_me\n";
409 $body .= "MIME-Version: 1.0\n";
410 $body .= "Date: $mdate\n";
411 $body .= "Content-Transfer-Encoding: 7bit\n";
412 $body .= "X-Mailer: $cf{version}\n\n";
413 $body .= "$tbody\n";
414
415 # senmdailコマンド
416 my $scmd = $cf{sendmail};
417 if ($cf{send_fcmd}) {
418 $scmd .= " -f $from2";
419 }
420
421 # 本文送信
422 open(MAIL,"| $scmd -t -i") or error("メール送信失敗");
423 print MAIL "$body\n";
424 close(MAIL);
425
426 # 返信
427 my $res_body;
428 if ($cf{auto_res}) {
429 my $resub = Jcode->new($cf{sub_reply},'utf8')->mime_encode;
430
431 $res_body .= "To: $email\n";
432 $res_body .= "From: $cf{mailto}\n";
433 $res_body .= "Subject: $resub\n";
434 $res_body .= "MIME-Version: 1.0\n";
435 $res_body .= "Content-type: text/plain; charset=iso-2022-jp\n";
436 $res_body .= "Content-Transfer-Encoding: 7bit\n";
437 $res_body .= "Date: $mdate\n";
438 $res_body .= "X-Mailer: $cf{version}\n\n";
439 $res_body .= "$resbody\n";
送信メールのヘッダーには、返信メールのヘッダーにある
435 $res_body .= "Content-type: text/plain; charset=iso-2022-jp\n";
の記述がありません。
これが文字化けの原因のような気がしますが、送信メールのヘッダーに追加しても、だいじょうぶでしょうか?
何卒よろしくお願いします。
記事No | : 14095 |
投稿日 | : 2015/07/13(Mon) 16:46:38 |
タイトル | : Re: cartform送信メールの文字化け |
ID情報 | : hirayama |
投稿者 | : hirayama |
URL | : http://shade-search.com/sts/fsw/wiki.cgi |
> 送信メールのヘッダーには、返信メールのヘッダーにある
> 435 $res_body .= "Content-type: text/plain; charset=iso-2022-jp\n";
> の記述がありません。
> これが文字化けの原因のような気がしますが、送信メールのヘッダーに追加しても、だいじょうぶでしょうか?
確かに抜けてますね。
追加してもだいじょうぶだと思います。
記事No | : 14096 |
投稿日 | : 2015/07/13(Mon) 20:59:50 |
タイトル | : Re^2: cartform送信メールの文字化け |
ID情報 | : 77202137 |
投稿者 | : 竹内 晃 |
URL | : http://www.nihonkentei.or.jp/monoshiricho.html |
> > 送信メールのヘッダーには、返信メールのヘッダーにある
> > 435 $res_body .= "Content-type: text/plain; charset=iso-2022-jp\n";
> > の記述がありません。
> > これが文字化けの原因のような気がしますが、送信メールのヘッダーに追加しても、だいじょうぶでしょうか?
>
> 確かに抜けてますね。
> 追加してもだいじょうぶだと思います。
hirayama様
返信をいただき、ありがとうございます。
実は上記を見ていて、近くの行でもう一つ気になるところがあったのですが、ご意見いただければ、ありがたいです。
下記の内、376行は不要ではないかと思ったのですが、いかがでしょう?
本文テンプレで、$mbodyは372行で$tbodyに取り込まれていますし、返信でも381行で$resbodyに取り込んでから、jisに変換されています。
371 # 本文テンプレ内の変数を置き換え
372 $tbody =~ s/!input!/$mbody/;
373 my $log = $tbody;
374
375 # コード変換
376 $mbody = Jcode->new($mbody,'utf8')->jis;
377 $tbody = Jcode->new($tbody,'utf8')->jis;
378
379 # 返信テンプレ内の変数を置き換え
380 if ($cf{auto_res}) {
381 $resbody =~ s/!input!/$mbody/;
382 $resbody = Jcode->new($resbody,'utf8')->jis;
383 }
記事No | : 14106 |
投稿日 | : 2015/07/15(Wed) 09:56:12 |
タイトル | : Re^3: cartform送信メールの文字化け |
ID情報 | : hirayama |
投稿者 | : hirayama |
URL | : http://shade-search.com/sts/fsw/wiki.cgi |
確かに$resbodyの文字コードはutf-8なので、
この中の!input!と置換する$mbodyもutf-8のままのほうがいい。
となると、$mbodyをutf-8からjisに変換する376行目はない方がいいかもしれませんね。
これがあると、381行目では
utf-8の$resbodyをjisコードの$mbodyに入れ替えていることになります。
現状では返信メールの「■注文情報」以下が
文字化けするといったようなことが発生しているのでしょうか。
記事No | : 14110 |
投稿日 | : 2015/07/16(Thu) 00:47:57 |
タイトル | : Re^4: cartform送信メールの文字化け |
ID情報 | : 77202137 |
投稿者 | : 竹内 晃 |
URL | : http://www.nihonkentei.or.jp/monoshiricho.html |
> 確かに$resbodyの文字コードはutf-8なので、
> この中の!input!と置換する$mbodyもutf-8のままのほうがいい。
> となると、$mbodyをutf-8からjisに変換する376行目はない方がいいかもしれませんね。
>
> これがあると、381行目では
> utf-8の$resbodyをjisコードの$mbodyに入れ替えていることになります。
>
> 現状では返信メールの「■注文情報」以下が
> 文字化けするといったようなことが発生しているのでしょうか。
hirayama様
376行は、現状では文字化けへの影響はなさそうです。
返信メールで発生した文字化けは、メールの本文すべてが「$B」から始まる英数文字と記号になっていました。
下記の1行を返信メールのヘッダーに追加したところ、現在は発生しなくなりました。
$body .= "Content-type: text/plain; charset=iso-2022-jp\n";