KENT-WEB サポートコーナー 過去ログ [ 0145 ]


記事No: 14092
投稿日: 2015/07/12(Sun) 01:39:41
タイトルcartform送信メールの文字化け
ID情報: 77202137
投稿者: 竹内 晃
URLhttp://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
URLhttp://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
投稿者: 竹内 晃
URLhttp://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
URLhttp://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
投稿者: 竹内 晃
URLhttp://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";


[検索ページ] [掲示板]