
ここで一週間も止まっています、どなたか助けてください。
あるサーバーにたまっているメールを受信して
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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Strawberry Perl for Windows ...
-
INDIRECT 横に再度抽出したい
-
Perlのエラーについてご教授く...
-
bashスクリプト
-
perlで2次元配列をサブルーチ...
-
Perlの全角スペース 文字化け?
-
perl の open について教えてく...
-
Perl言語について。
-
ファイルをディレクトリ分配の...
-
アルファベットに付いて質問し...
-
#!/usr/bin/perlで書きだしたCG...
-
perlのflock関数でロックをかけ...
-
AI sisterとは、偽物の人ですか?
-
ファイルアイコンの左下に緑の□...
-
perlプログラミング 空白行削除
-
perlでリテラル値はメモリにど...
-
Perlで時間の計算
-
perlについて
-
perlのrequireの動き方について...
-
perlの構文でカンマの意味が分...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
pythonエラー
-
文字コードについて
-
BASP21によるbase64のデコード...
-
jisコードで16進数の『3c』か...
-
メール(iso-2022-jp-2)のデコ...
-
quoted-printableのアルゴリズム
-
IMAP4でsubjectが検索ヒットしない
-
CASLIIの数値データ入出力
-
標準入力からのutf-8→euc-jpで...
-
Perl:ファイル名だけ文字化けする
-
文字コード? 推奨UTF-8?
-
エンコード方法についての質問
-
Jcodeモジュールの代わりにjcod...
-
1つのサイトで文字コードが混在...
-
メールを文字化けしないように...
-
「繝・せ繝・」となる文字化け
-
Lite.pmを使ったメールで文字化け
-
MIMEでエンコードされたMailのS...
-
perlの日本語文字コードはどう...
-
Encodeモジュールで日本語化したい
おすすめ情報