1

シンプルにするためにMail::POP3Clientを使用しており、最新のnメッセージ (私のコードでは 5) のヘッダーを取得したいと考えています。これはウェブスクリプトで、ページの読み込み時に最新の 5 通のメールがダウンロードされて解析されます (件名と送信者)。同じように)。どうやらmy $email_count = $pop->Count;カウントだけで、インデックス型の値ではありませんか?

for (my $i = $email_count; $i >= $email_count-5; $i--) {
    foreach ($pop->Head($i)) {
        if (/^(From):\s+/i)    { $FROM = $_; }
        if (/^(Subject):\s+/i) { $SUBJECT = $_; }

        if (/^(Date):\s+/i) {
            $TIME = $_;
            $TIME =~ s/Date: (.*)/$1/;

            my $tstamp = str2time($TIME);
#           $TIME = $tstamp;
            $TIME = scalar localtime($tstamp);

            my @fromsubj;
            $fromsubj[0] = $FROM;
            $fromsubj[1] = $SUBJECT;
            $subject{$TIME} = [@fromsubj];
        }
    }


    print "Index: $i \n";
    }
print Dumper(%subject);
print "\n";
print Dumper(%from);

print "Mails $email_count to ".($email_count-5);

出力:

Index: 4030 
Index: 4029 
Index: 4028 
Index: 4027 
Index: 4026 
Index: 4025

$VAR1 = 'Thu Jul 26 09:01:07 2012';
$VAR2 = [
          'From: Person one ',
          'Subject: Fwd: test '
        ];
$VAR3 = 'Tue Jul 24 15:09:43 2012';
$VAR4 = [
          'From: person two ',
          'Subject: subj '
        ];
(And so on)
 ....
Count 4030 4020

最新のメールのみを取得するにはどうすればよいですか? これは、POP/このモジュールでまったく可能ですか? そうでない場合、代わりに何を使用できますか?

4

1 に答える 1

1

これは大いに役立つはずです - http://www.ietf.org/rfc/rfc1939.txt。日付による並べ替えについては何も見ていませんし、並べ替えについても何も見ていません。

大量のメールを処理しなければならない IMAP ソリューションを開発しました。結果を制限する方法がないため、配列に大量の ID を入力してから、配列をチャンクで反復処理する必要がありました。このソリューションを開発していたとき、POP は信頼性が低く、低速でした。IMAP は確かに完璧ではありませんが、IMAP を使用した開発は pop よりもはるかにスムーズでした。

あなたはそれほど多くのデータを扱っていないと言っているので、メールボックスからすべてのデータを取り出してから、日付で並べ替え、Perl で制限します。

于 2012-09-10T16:22:52.080 に答える