ここで一週間も止まっています、どなたか助けてください。
あるサーバーにたまっているメールを受信して
Net::POP3;
MIME::Parser;
などを利用して本文を取り出したりしています。
件名などはきちんと解析できて日本語にできるのですが、どうしても本文だけはどうなっているのかわかりません。エンコード、デコードなどの説明が書いてあるサイトをたくさんみて200回くらいいろんな方法やパターンを試してみて本文を復元しようと試みましたが 「$B$^$7$m?'%7%s%U%)%K!<$N%Q%s$K$c(B」の文字は何も変わることなく、さすがに気が狂いそうになりましたのでここで質問しようとおもいます。
emlで保存したファイルから本文を取り出すことはできますが、読める状態になりません。
どなたか教えていただけないでしょうか?
いったい、どうしたらメールの本文をきちんと読める状態にできるのしょう?
=========================
Subject: =?ISO-2022-JP?B?GyRCJF4kNyRtPyclNyVzJVUlKSVLITwbKEI=?=
To: test@test.com
Status: RO
X-UIDL: 1358842469.4950.s323,S=1722
Content-Type: text/plain; charset=ISO-2022-JP
Content-Transfer-Encoding: 7bit
$B$^$7$m?'%7%s%U%)%K!<$N%Q%s$K$c(B
No.2ベストアンサー
- 回答日時:
No1 のお礼にあるプログラムを見る限り JIS でファイルに保存し、異なる環境 (UTF8, Shift_JIS など) で表示しているに過ぎないのではないかと思います。
確認方法として、ブラウザを利用することができます。xxx.txt などの名前で保存して、ブラウザで正常に表示されて文字エンコーディングが JIS (ISO-2022-JP) になっている、または文字エンコーディングを JIS (ISO-2022-JP) にしたら正常に表示された、のような現象であれば文字列として壊れてはいません。文字列を変換するには、Encode モジュールを利用するのが簡単かと思います。なお、'utf8' のところは環境に合わせて変更してください ('shiftjis', 'cp932', 'euc-jp' など)。
use Encode;
...
@$message = map { encode('utf8', decode('jis', $_)) } @$message;
【 Perl メール 受信 文字化け 】
引き続き、解答ありがとうございますm(__)m
ブラウザにて確認した所、JIS形式になっていましたΣ(゜Д゜)
そして、文字化けもなく 綺麗に「ましろ色シンフォニーのパンにゃ
」と表示されていました・゜・(ノД`;)・゜・
つまり、サーバーに置いてある時点で JIS形式 それを何も加工せずにそのままeml形式に持って行っているという事でしょうか?
さっそく、教えていただいたコードを組み込んで見たいと思います!(またご報告いたします)
========================
No.1
- 回答日時:
> $B$^$7$m?'%7%s%U%)%K!<$N%Q%s$K$c(B
本当にこれだけですか?
これだけだと、ISO-2022-JPのESC抜け、という典型的な文字化けパターンになっています。
先頭の$Bの前と、最後の(Bの前にESC( "\e" )を補って、ISO-2022-JP(いわゆる「JIS」)として解釈すれば
ましろ色シンフォニーのパンにゃ
と読めます。
○ メールの通信中にESCが落ちることがあります。
元のメールにESCが無い状態になっているのなら、自前で補う必要があります
○ メールには入っているのに、表示されていない、ということもあります。
ESCのようなコントロールキャラクタは、それ自体が表示されないことがよくあります。
例えば、質問に添付されているメール、どうやって貼り付けましたか?
cat XXXX.eml とか type XXXX.eml
とかして、画面に表示されたものをコピー&ペーストしてませんか?
○ どこかで、コントロールコードを削除するような処理は入っていませんか?
はい、本当にこれだけです。こちらのサイトを参考にして、BODY部分を取り出したりしていました。
http://digit.que.ne.jp/work/index.cgi?Perl%E3%83 …
以下は、そのプログラム(サブルーチン)ですが、
sub main {
my ($server, $account, $password, $protocol, $output) = @_;
my ($outfile, $message);
mkdir($output, 0777) unless (-d $output);
# Net::POP3オブジェクトを生成し、ログイン
my $pop3 = Net::POP3->new($server) or die "Can't not open account.";
my $login = (lc($protocol) eq 'apop') ? 'apop' : 'login';
my $count = $pop3->$login($account, $password);
# メールID/サイズのハッシュリファレンスを取得
my $messages = $pop3->list();
# メールを"<プロセスID>_<連番>_.eml"に保存
foreach $id (sort (keys %{$messages})) {
# $id番のメールを受信
$message = $pop3->get($id);
if ( $message ) { print "メールがありません $message"; }
# ファイル出力
$outfile = sprintf('%s/%d_%s.eml', $output, $$, $id);
if (open(OUT, ">$outfile")) {
print OUT @{$message};
close OUT;
}
}
# 接続を終了
$pop3->quit;
}
これを実行するとしていしたフォルダにemlファイルが生成されます。
そのemlファイルの本文の文字が文字化けしていて、そこでひっかかっていました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP phpの imap_search で漢字コード 1 2022/09/06 17:32
- PHP Content-Typeが機能していない? 2 2022/07/17 11:10
- 大学受験 国立受験 11月からの大逆転劇を起こすには 7 2022/11/14 19:24
- 大学受験 大学受験 辛い 英語 読めない こんにちは。 現在大学受験をしてる者です。 色々あり浪人なんですけど 11 2022/09/06 12:03
- 大学受験 現代文、古文、漢文の復習方法。 模試の後、古文、漢文は文法や単語などを調べ、 もう一度本文を読んでい 1 2022/08/23 11:05
- 大学受験 娘の大学受験勉強 6 2022/06/30 19:58
- その他(プログラミング・Web制作) このWEB用語、WEB文章、意味が分かりますか? 理解できない人が多いようなんですが・・・ 7 2022/10/22 09:13
- Perl perlのプログラミング 部分入れ替えの方法 1 2022/10/11 22:26
- その他(メールソフト・メールサービス) メールソフトを教えてください 1 2023/03/28 23:32
- その他(教育・科学・学問) 英語できません、助けてください… 3 2022/11/14 23:59
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
pythonエラー
-
1つのサイトで文字コードが混在...
-
Perl:ファイル名だけ文字化けする
-
何故、日本は未だに数字を3桁...
-
CSVファイルの中で、「 , 」カ...
-
文字コードの%E3%80%とは何です...
-
全角英数字の必要性が理解できない
-
マクロを使ってフォルダー内に...
-
いまスマホからカードの申込み...
-
各項目がダブルクォーテーショ...
-
EXCELからCSVにすると余計なカ...
-
【LaTeX】pBibTeXでのエラーの...
-
住宅にカナを入力する際に丁目...
-
エクセルで数値を全角文字(カ...
-
csvデータのダブルクォーテーシ...
-
Excel VBAでPDFファイルをMicro...
-
正規表現で、特定の文字列を含...
-
メッセージボックスの数字をカ...
-
カンマ区切り
-
char型全角数字から、int型半角...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
pythonエラー
-
「繝・せ繝・」となる文字化け
-
MIMEでエンコードされたMailのS...
-
Perl:ファイル名だけ文字化けする
-
1つのサイトで文字コードが混在...
-
IMAP4でsubjectが検索ヒットしない
-
jcode.plとはどんなものですか
-
Perlでのメール本文の解析について
-
perlの日本語文字コードはどう...
-
jisコードで16進数の『3c』か...
-
標準入力からのutf-8→euc-jpで...
-
URLエンコードされたデータを戻...
-
メール(iso-2022-jp-2)のデコ...
-
BASP21によるbase64のデコード...
-
jcode.pmでconvertできない
-
CGIでメールを送る際に文字...
-
mailtoで文字化けする場合
-
javaでエンコードがうまくいかない
-
Encodeモジュールで日本語化したい
-
UTF-8から送信されたデータを日...
おすすめ情報