Email::Delete::Maildir - Delete Messages from a Maildir Folder


Email-Delete documentation Contained in the Email-Delete distribution.

Index


Code Index:

NAME

Top

Email::Delete::Maildir - Delete Messages from a Maildir Folder

SYNOPSIS

Top

  use Email::Delete qw[delete_message];

  my $message_id = shift @ARGV;

  delete_messages from     => 'some/Maildir/',
                  matching => sub {
                      my $message = shift;
                      $message->header('Message-ID') =~ $message_id;
                  };

DESCRIPTION

Top

This software will delete messages from a given Maildir folder.

SEE ALSO

Top

Email::Delete, perl.

AUTHOR

Top

Casey West, <casey@geeknest.com>.

COPYRIGHT

Top


Email-Delete documentation Contained in the Email-Delete distribution.

package Email::Delete::Maildir;
# $Id: Maildir.pm,v 1.1 2004/12/17 18:03:16 cwest Exp $
use strict;

use vars qw[$VERSION];
$VERSION = '2.001';

use Email::Simple;

sub delete_message {
    my %args = @_;
    
    my @files;
# Whatever in F<tmp/> is undelivered yet, right?
    foreach my $sect ( qw( new cur ) ) {
# What if C<$args{from}> is something but directory?  Never mind, just skip it.
        opendir my($dh), "$args{from}/$sect" or next;
        while(my $mail = readdir $dh) {
# Faild to open subfolder?  Here?  Immaterial, go away.
            -f "$args{from}/$sect/$mail"                          or next;
            open my $fh, '<', "$args{from}/$sect/$mail"           or next;
            my $msg = Email::Simple->new(do { local $/; <$fh>; }) or next;
            $args{matching}->($msg) and push @files, "$args{from}/$sect/$mail";
        };
    };
    return unlink @files;
}

1;

__END__