dポイントプレゼントキャンペーン実施中!

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ヘッダー、次に本文が続いています。これが一つのメールで複数のメールがこの後に続いています。

エラーの意味と修正個所の指定をお願いします。

質問者からの補足コメント

  • うーん・・・

    mboxの形式が二つ有って、unix mboxの指定で上手く動作しました。有難う御座います。次にこの件での質問ですが。このプログラムは一体どう言う動作をしているのでしょうか。最初のmboxから比べると出力は行数は減っていますが。

    どう言う動作をしているのかと言うのがピンと来ません。済みません。解説をお願いします。

    No.1の回答に寄せられた補足コメントです。 補足日時:2015/09/03 17:05
  • うーん・・・

    入力のmboxと出力のイメージの比較は、メールの出現順序が違う様です。私は、順番に出力をする物と思っていましたが。そうでは無い様です。

    cpanのページをマシン翻訳で見ましたが私の頭では良く分かりません。実際の具体例が有ると理解しやすいのですが。

    私が使いたいのは、最初に、mboxの入っている順番通りに出力をする事。次に、

    smtpヘッダーからFrom,Date,Subjectのみを抽出してメール本文と合体させるperlスクリプトを作りたいのですが。

    その為には、先ほどのperlのどこの行をどの様に修正をすれば良いのか、ご指摘をお願いします。

    No.2の回答に寄せられた補足コメントです。 補足日時:2015/09/04 06:05
  • うれしい

    有難う御座います。確かに、投稿された内容で達成はしますが。後処理の事で引っかかっていましたので。だから、このツールが何とか役に立つのかなあと考えていました。然し、この出現順序とかの問題が有ったりして。

    出現順序の問題については件数が多くて原因はつかめてはいませんが。他の方法が見つかりそうなのでこの問題は保留とさせます。

    結局、このMail::Mbox::MessageParserに付いては動作が良く分かりませんでしたが。1週間経ちましたので。ここで占めたいと思います。このツールを使わなくても他の方法で何とかなりそうなのでここで閉めます。

    長い間支援を有難う御座いました。

    No.4の回答に寄せられた補足コメントです。 補足日時:2015/09/10 09:26

A 回答 (4件)

ちなみに.



ひたすら手を抜いて実装するなら
while (<>) {
if (ヘッダ) {
print if 必要な行
} else {
print # 本文だから
}
}
みたいな概形 (必要なら前処理/後処理を追加してくれ) でもなんとかなる.
この回答への補足あり
    • good
    • 0
この回答へのお礼

それをするのなら、perlは少し遅いから。flexの方が早いので。行数は100万行を越えていますので。バイナリーとスクリプトの差は有ります。それでごちゃごちゃと条件を付けたらその分は遅くなります。

唯、前回の時にこのperlのMail::Mbox::MessageParserの紹介が有りましたから。それなりの物なのかと思いましたが。余り、すっきりとしなかった物ですから。私の理解が足りなくて使い切れないのか。最初から、そんな物なのかと言う事なのかが判断出来ませんでしたので。質問しました。案外とこの手の情報は出ていない物ですから。

有難う御座いました。

お礼日時:2015/09/08 15:51

Mail::Mbox::MessageParser は使ったことないので想像で書くわけだが, 厳密にいえば「read_next_message」で得られるメールの順序が「もとの mbox にあるメールの順序」と一致する必然性はない. ふつうに作れば mbox の順序に従ってメールが出てくるだろうけど.



ちなみに「メールの出現順序が違う様です」ってところは
・どのような手段で確認して
・どのように順序が違っているのか
わかりますか?
    • good
    • 0

「本来」の mbox フォーマットでは From_ 行がメッセージの最初にある (というのは前の質問に対する回答中のリンクをごりごりたどっていけばわかる) んだけどね....



さておき, 「どう言う動作をしているのかと言うのがピンと来ません」というのはどういうことでしょうか?
・だいたいわかるけどなんかひっかかるので「ピンと来ません」とした
・プログラムのロジックがわからない
・そもそもメソッドがなにをするのかわからない
・その他
のどれ? あ, もちろん「その他」を選んだ場合は具体的にどこがどう「ピンと来ない」のか書いてね.
この回答への補足あり
    • good
    • 0
この回答へのお礼

早速の回答、有難う御座います。

今回修正したmboxはFromが最初に有りました。最初私がmboxと言っていたのはReturn-Pathが先頭に有りました。メーラーに依っても違うと思いますが。私が使っていたメーラーはmboxの形式が標準では無かったみたいです。

どう言う動作をしているのと言うのがピンと来ませんと言うのは、
メソッドが何をしているのか解らない。

と言う事です。最初私は、smtpヘッダーを除去して本文の抽出だと思っていたのですが。そうでもなかった様です。私がやりたかったのはsmtpヘッダーから、From,Date,Subjectのみのヘッダーを読み取り、後のヘッダーは除外する。そして残りの本文を読み取る。最後に両者を合体して一つのメールとして出力をすると言うのを考えていたのですが。

どうもそうでは無い様です。これでは、余りmboxの中身に付いては最初から入っている入力のイメージと対して変っていないので。何をフィルターして出力しているのかと言うのが分かりません。勿論、ヘッダーの中身を分析をすれば良いのでしょうが。私自身がsmtpヘッダーに付いては熟知していませんので。

済みません。何から何まで。お世話になります。宜しく、お願いします。

お礼日時:2015/09/04 05:28

「Not a mailbox」と言ってるんだから, 「実はフォーマットが間違っている」という可能性をまず想定する.



実のところ
https://oshiete.goo.ne.jp/qa/9040965.html
の時点で「mbox というフォーマットを誤解してるんじゃなかろうか」と思えたりするんで.
この回答への補足あり
    • good
    • 0
この回答へのお礼

早速の回答、有難う御座います。
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超過)

お礼日時:2015/09/03 14:27

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!