Dezi-App
view release on metacpan or search on metacpan
lib/Dezi/Aggregator/Mail.pm view on Meta::CPAN
$self->_process_folder($folder);
$folder->close( write => 'NEVER' );
return $self->{count};
}
sub _addresses {
return join( ', ', map { ref($_) ? $_->format : $_ } @_ );
}
sub _process_folder {
my $self = shift;
my $folder = shift or croak "folder required";
my @subs = sort $folder->listSubFolders;
my $indexer = $self->indexer;
for my $sub (@subs) {
my $subf = $folder->openSubFolder($sub);
warn "searching $sub\n" if $self->verbose;
if ( $self->_apply_file_rules($sub)
&& !$self->_apply_file_match($sub) )
{
warn "skipping FileRules match $sub\n" if $self->verbose;
$subf->close( write => 'NEVER' );
next;
}
foreach my $message ( $subf->messages ) {
my $doc = $self->get_doc($message);
if ( $self->_apply_file_rules( $doc->url )
&& !$self->_apply_file_match( $doc->url ) )
{
warn sprintf( "skipping FileRules match %s\n", $doc->url )
if $self->verbose;
next;
}
$indexer->process($doc);
$self->_increment_count;
}
$self->_process_folder($subf);
$subf->close( write => 'NEVER' );
}
}
sub _filter_attachment {
my $self = shift;
my $msg_url = shift or croak "message url required";
my $attm = shift or croak "attachment object required";
my $type = $attm->body->mimeType->type;
my $filename = $attm->body->dispositionFilename;
my $content = $attm->decoded . ''; # force stringify
return $XMLer->escape_utf8($content) unless $filename;
my @filters;
if ( $self->swish_filter_obj->can_filter($type) ) {
my $f = $self->swish_filter_obj->convert(
document => \$content,
content_type => $type,
name => $filename,
);
if ( !$f
|| !$f->was_filtered
|| $f->is_binary ) # is is_binary necessary?
{
warn "skipping $filename in message $msg_url - filtering error\n";
return join( "",
"<type>$type</type>", '<title>',
$XMLer->escape($filename), '</title>' );
}
$content = to_utf8( ${ $f->fetch_doc } );
# consider low ascii problematic
$content = '[unconverted]'
if $content =~ m/[^\x00-\x7F]/
or !is_valid_utf8($content);
@filters = map { ref $_->{name} } @{ $f->filters_used };
}
else {
$content = '[unconverted]';
}
return join( '',
"<filter>", join( ",", @filters ),
"</filter>", "<type>$type</type>",
'<title>', $XMLer->escape($filename),
'</title>', $XMLer->escape_utf8( $XMLer->strip_markup($content) ) );
}
=head2 get_doc( I<folder>, I<Mail::Message> )
Extract data and content from I<Mail::Message> in I<folder> and return
doc_class() object.
=cut
sub get_doc {
my $self = shift;
my $message = shift or croak "mail meta required";
my $folder = shift || $message->folder;
# >head->createFromLine;
my %meta = (
url => join( '.', $folder, $message->messageId ),
id => $message->messageId,
( run in 2.665 seconds using v1.01-cache-2.11-cpan-600a1bdf6e4 )