1

以下のプログラムを使用して、電子メール メッセージを並べ替え、最終的に印刷しています。一部のメッセージには、印刷に適していない添付ファイルや HTML コードが含まれている場合があります。添付ファイルと HTML を取り除き、メッセージから HTML でフォーマットされたテキストを取り除く簡単な方法はありますか?

#!/usr/bin/perl
use warnings;
use strict;
use Mail::Box::Manager;

open (MYFILE, '>>data.txt');
binmode(MYFILE, ':encoding(UTF-8)');


my $file = shift || $ENV{MAIL};
my $mgr = Mail::Box::Manager->new(
    access          => 'r',
);

my $folder = $mgr->open( folder => $file )
or die "$file: Unable to open: $!\n";

for my $msg ( sort { $a->timestamp <=> $b->timestamp } $folder->messages)
{
    my $to          = join( ', ', map { $_->format } $msg->to );
    my $from        = join( ', ', map { $_->format } $msg->from );
    my $date        = localtime( $msg->timestamp );
    my $subject     = $msg->subject;
    my $body        = $msg->decoded->string;

    # Strip all quoted text
    $body =~ s/^>.*$//msg;

    print MYFILE <<"";
From: $from
To: $to
Date: $date
Subject: $subject
\n
$body

}
4

4 に答える 4

3

Mail::Message::isMultipart特定のメッセージに添付ファイルがあるかどうかがわかります。 Mail::Message::partsメールパーツのリストが表示されます。

したがって:

if ( $msg->isMultipart ) {
    foreach my $part ( $msg->parts ) {
        if ( $part->contentType eq 'text/html' ) {
           # deal with html here.
        }
        elsif ( $part->contentType eq 'text/plain' ) {
           # deal with text here.
        }
        else {
           # well?
        }
    }
}
于 2008-12-16T12:43:18.883 に答える
1

ストリッピング HTML の側面については、FAQ #9 (または の最初の項目perldoc -q html) で説明されています。簡単に言うと、関連するモジュールは HTML::Parser と HTML::FormatText です。

添付ファイルについては、添付ファイル付きのメールは MIME として送信されます。この例から、形式が十分に単純であるため、かなり簡単に解決策を思いついたり、CPAN で MIME モジュールを調べたりできることがわかります。

于 2008-12-16T12:39:13.510 に答える