• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:メール件名の表示について)

メール受信表示の件名表示について

このQ&Aのポイント
  • メールの受信表示をwebするプログラムを作成しましたが、日本語の件名が正しく表示されません。
  • 「中国の消費者物価、4月は8.5%上昇・食料品など高止まり」が「中国の消費者物価、4月は8.5」のように途中で切れてしまいます。
  • 正しく表示させるにはどのようにしたらよいでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • atom_seed
  • ベストアンサー率48% (25/52)
回答No.1

長い件名は、メールヘッダー内に1行では書き出されません。 その為、複数行からのデコードに対応していない上記処理では途切れてしまうのです。 foreach でヘッダーの各行ごとに処理をする方法を一旦やめます。 1つのスカラー変数(たとえば$header)にヘッダーのすべての行をつなげて取り込ませます。 その後下記のように書くことで、%header に各ヘッダー項目が格納できます。 my %header = ( '', split( /(^[\w\-]+\: )/m, $header ) ); chomp %header; 今回は、件名がほしいので $header{'Subject: '}をデコードさせて  $sub に移し替えればOKです。

その他の回答 (1)

  • atom_seed
  • ベストアンサー率48% (25/52)
回答No.2

少しきれいに、かつ、具体的に書き直してみました。 これでどうでしょう? my %header = ( '', split( /^([\w\-]*)\: /m, $header ) ); chomp %header; $sub = jcode( $header{'Subject'} )->mime_decode()->sjis;

fleet1234
質問者

お礼

ありがとうございます。 大変助かります。 「1つのスカラー変数(たとえば$header)にヘッダーのすべての行をつなげて取り込ませます。」の部分について、具体的にどのように記述したよいでしょうか? ご教授いただけると助かります。

fleet1234
質問者

補足

本来は、「お礼」で記載すべきかと思いますが、解決しましたので、ここでお礼をさせていただきます。 ありがとうございました。大変助かりました。

関連するQ&A