perlのMail::Mbox::MessageParserをインストールしました。それで、サンプルで下記を動かそうとしたら下記のエラーが出ました。最初にコードを次にエラーを示します。
1 use Mail::Mbox::MessageParser;
2
3 my $file_name = './mail.txt';
4 my $file_handle = new FileHandle($file_name);
5
6 # Set up cache. (Not necessary if enable_cache is false.)
7 Mail::Mbox::MessageParser::SETUP_CACHE(
8 { 'file_name' => '/tmp/cache' } );
9
10 my $folder_reader =
11 new Mail::Mbox::MessageParser( {
12 'file_name' => $file_name,
13 'file_handle' => $file_handle,
14 'enable_cache' => 1,
15 'enable_grep' => 1,
16 } );
17
18 die $folder_reader unless ref $folder_reader;
19
20 # Any newlines or such before the start of the first email
21 my $prologue = $folder_reader->prologue;
22 print $prologue;
23
24 # This is the main loop. It's executed once for each email
25 while(!$folder_reader->end_of_file())
26 {
27 my $email = $folder_reader->read_next_email();
28 $email = $folder_reader->read_next_email();
29 print $$email;
30 }
Not a mailbox at C:\Users\usui\EDMax\mbox\01.pl line 18.
これは、10行目の$folder_readerの中の12行目の$file_nameの指定が間違っているのでしょうか。$file_nameは、3行目で指定しています。使っているperlはactive perl ver5.20です。mail.txtは最初にsmtpヘッダー、次に本文が続いています。これが一つのメールで複数のメールがこの後に続いています。
エラーの意味と修正個所の指定をお願いします。
No.4ベストアンサー
- 回答日時:
ちなみに.
ひたすら手を抜いて実装するなら
while (<>) {
if (ヘッダ) {
print if 必要な行
} else {
print # 本文だから
}
}
みたいな概形 (必要なら前処理/後処理を追加してくれ) でもなんとかなる.
それをするのなら、perlは少し遅いから。flexの方が早いので。行数は100万行を越えていますので。バイナリーとスクリプトの差は有ります。それでごちゃごちゃと条件を付けたらその分は遅くなります。
唯、前回の時にこのperlのMail::Mbox::MessageParserの紹介が有りましたから。それなりの物なのかと思いましたが。余り、すっきりとしなかった物ですから。私の理解が足りなくて使い切れないのか。最初から、そんな物なのかと言う事なのかが判断出来ませんでしたので。質問しました。案外とこの手の情報は出ていない物ですから。
有難う御座いました。
No.3
- 回答日時:
Mail::Mbox::MessageParser は使ったことないので想像で書くわけだが, 厳密にいえば「read_next_message」で得られるメールの順序が「もとの mbox にあるメールの順序」と一致する必然性はない. ふつうに作れば mbox の順序に従ってメールが出てくるだろうけど.
ちなみに「メールの出現順序が違う様です」ってところは
・どのような手段で確認して
・どのように順序が違っているのか
わかりますか?
No.2
- 回答日時:
「本来」の mbox フォーマットでは From_ 行がメッセージの最初にある (というのは前の質問に対する回答中のリンクをごりごりたどっていけばわかる) んだけどね....
さておき, 「どう言う動作をしているのかと言うのがピンと来ません」というのはどういうことでしょうか?
・だいたいわかるけどなんかひっかかるので「ピンと来ません」とした
・プログラムのロジックがわからない
・そもそもメソッドがなにをするのかわからない
・その他
のどれ? あ, もちろん「その他」を選んだ場合は具体的にどこがどう「ピンと来ない」のか書いてね.
早速の回答、有難う御座います。
今回修正したmboxはFromが最初に有りました。最初私がmboxと言っていたのはReturn-Pathが先頭に有りました。メーラーに依っても違うと思いますが。私が使っていたメーラーはmboxの形式が標準では無かったみたいです。
どう言う動作をしているのと言うのがピンと来ませんと言うのは、
メソッドが何をしているのか解らない。
と言う事です。最初私は、smtpヘッダーを除去して本文の抽出だと思っていたのですが。そうでもなかった様です。私がやりたかったのはsmtpヘッダーから、From,Date,Subjectのみのヘッダーを読み取り、後のヘッダーは除外する。そして残りの本文を読み取る。最後に両者を合体して一つのメールとして出力をすると言うのを考えていたのですが。
どうもそうでは無い様です。これでは、余りmboxの中身に付いては最初から入っている入力のイメージと対して変っていないので。何をフィルターして出力しているのかと言うのが分かりません。勿論、ヘッダーの中身を分析をすれば良いのでしょうが。私自身がsmtpヘッダーに付いては熟知していませんので。
済みません。何から何まで。お世話になります。宜しく、お願いします。
No.1
- 回答日時:
「Not a mailbox」と言ってるんだから, 「実はフォーマットが間違っている」という可能性をまず想定する.
実のところ
https://oshiete.goo.ne.jp/qa/9040965.html
の時点で「mbox というフォーマットを誤解してるんじゃなかろうか」と思えたりするんで.
早速の回答、有難う御座います。
mail.txtは下記の内容になっています。これと言うのは、フォーマットが違っているのでしょうか。
Return-Path: support@qtnet.ne.jp
Received: from 10.1.55.94 (LHLO z-oha-vzmta041-sv.z-seg.bbiq.jp)
(10.1.55.94) by z-oha-vzmbs151-sv.z-seg.bbiq.jp with LMTP; Fri, 3 Oct 2014
以下省略
Subject: 【重要】BBIQ「STEPプラン」通信量のお知らせ(300MB超過)
■□■━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━■□■
【重要】BBIQ「STEPプラン」通信量のお知らせ(300MB超過)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) このVBAでExcelアプリケーションを作成は必要ですか? 3 2023/07/19 21:13
- PHP PHP MySql 画像を取得 1 2022/06/04 14:05
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- Visual Basic(VBA) VBA This Workbookモジュールを別ファイルにコピーする方法 1 2022/09/14 01:51
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- 英語 英文法教えて下さい 2 2022/12/27 11:49
- 画像編集・動画編集・音楽編集 DVD Styler トラブル解決方法 6 2022/10/29 16:00
- Gmail 【お助け!】サーバーからのメール送信でGmailに送信されない問題について 1 2023/06/20 22:03
- その他(プログラミング・Web制作) python OpenPyXLを使って出力結果をエクセルに書き込み 2 2022/06/04 19:46
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ファイル全てを .xlsm に変更し...
-
フォルダーの深さの限界
-
行を指定して削除する方法PERL
-
Perlでファイルを読み込みタグ...
-
CGI.pmで取得したファイルハン...
-
Firefox で file:// で始まる U...
-
巨大なテキストの最終行を取得...
-
powerpointでwebページとして保...
-
PerlでのUseless use...
-
ファイルを読み込んで改行だけ...
-
read() on unopened filehandle...
-
VBAでCSVファイルを途中行まで...
-
ExcelをCSV書き出す場合のシー...
-
C言語でファイル名を取得
-
ダイアモンド演算子<>に対するb...
-
VBAでCSVファイルの特定行を書...
-
ListBoxのデータを高速でファイ...
-
does not map to shiftjis は解...
-
ファイル名の変更
-
pushをすると行ができる
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
window.open でのファイル指定方法
-
csvファイルの横方向への改行に...
-
fgets で値が取得できない
-
MATLABのm-fileについて
-
JSP URLに表示される拡張子 .jsp
-
drtファイルはどうしたら開...
-
PerlでのUseless use...
-
python renameについて
-
巨大なテキストの最終行を取得...
-
ファイル全てを .xlsm に変更し...
-
Firefox で file:// で始まる U...
-
VBAコードを張り付け後のエクセ...
-
perl ファイルが開かない
-
ファイルの存在の有無を確かめ...
-
AutoNts
-
VBA テキストファイルを読み取...
-
fopen64について
-
行を指定して削除する方法PERL
-
文字列をカウントする方法
-
read() on unopened filehandle...
おすすめ情報
mboxの形式が二つ有って、unix mboxの指定で上手く動作しました。有難う御座います。次にこの件での質問ですが。このプログラムは一体どう言う動作をしているのでしょうか。最初のmboxから比べると出力は行数は減っていますが。
どう言う動作をしているのかと言うのがピンと来ません。済みません。解説をお願いします。
入力のmboxと出力のイメージの比較は、メールの出現順序が違う様です。私は、順番に出力をする物と思っていましたが。そうでは無い様です。
cpanのページをマシン翻訳で見ましたが私の頭では良く分かりません。実際の具体例が有ると理解しやすいのですが。
私が使いたいのは、最初に、mboxの入っている順番通りに出力をする事。次に、
smtpヘッダーからFrom,Date,Subjectのみを抽出してメール本文と合体させるperlスクリプトを作りたいのですが。
その為には、先ほどのperlのどこの行をどの様に修正をすれば良いのか、ご指摘をお願いします。
有難う御座います。確かに、投稿された内容で達成はしますが。後処理の事で引っかかっていましたので。だから、このツールが何とか役に立つのかなあと考えていました。然し、この出現順序とかの問題が有ったりして。
出現順序の問題については件数が多くて原因はつかめてはいませんが。他の方法が見つかりそうなのでこの問題は保留とさせます。
結局、このMail::Mbox::MessageParserに付いては動作が良く分かりませんでしたが。1週間経ちましたので。ここで占めたいと思います。このツールを使わなくても他の方法で何とかなりそうなのでここで閉めます。
長い間支援を有難う御座いました。