Perl und IMAP

Das Modul Mail::IMAPClient ermoeglicht der Programmiersprache Perl den komfortablen Zugriff auf einen IMAP-Server.

Beispiel 1:

use strict;
use warnings;
use Mail::IMAPClient;
 
$imap = Mail::IMAPClient->new( Server  => 'mail.server.com:143',
                              User    => 'me',
                              Password  => 'mypass')
        # module uses eval, so we use $@ instead of $!
        or die "IMAP Failure: $@";
 
foreach my $box qw( HAM SPAM ) {
   # which file are the messages going into
   my $file = "mail/$box";
 
   # select the mailbox to get messages from
   $imap->select($box)
        or die "IMAP Select Error: $!";
 
   # store each message as an array element
   my @msgs = $imap->search('ALL')
        or die "Couldn't get all messagesn";
 
   # loop over the messages and store in file
   foreach my $msg (@msgs) {
     # pipe msgs through 'formail' so they are stored properly
     open my $pipe, "| formail >> $file"
       or die("Formail Open Pipe Error: $!");
 
     # send msg through file pipe
     $imap->message_to_file($pipe, $msg);
 
     # close the messgae pipe
     close $pipe
       or die("Formail Close Pipe Error: $!");
   }
 
   # close the folder
   $imap->close($box);
}
 
$imap->logout();[/code]
 
Beispiel 2:
 
[code lang="perl"]use strict;
use warnings;
use Mail::IMAPClient;
 
$imap = Mail::IMAPClient->new( Server  => 'mail.server.com:143',
                              User    => 'me',
                              Password  => 'mypass')
        # module uses eval, so we use $@ instead of $!
        or die "IMAP Failure: $@";
 
foreach my $box qw( HAM SPAM ) {
   # how many msgs are we going to process
   print "There are ". $imap->message_count($box).
          " messages in the $box folder.n";
 
   # which file are the messages going into
   my $file = "mail/$box";
 
   # select the mailbox to get messages from
   $imap->select($box)
        or die "IMAP Select Error: $!";
 
   # store each message as an array element
   my @msgs = $imap->search('ALL')
        or die "Couldn't get all messagesn";
 
   # loop over the messages and store in file
   foreach my $msg (@msgs) {
     # pipe msgs through 'formail' so they are stored properly
     open my $pipe, "| formail >> $file"
       or die("Formail Open Pipe Error: $!");
 
     # skip the msg if its over 100k
     if ($imap->size($msg) > 100000) {
       $imap->delete_message($msg);
       next;
     }
 
     # send msg through file pipe
     $imap->message_to_file($pipe, $msg);
 
     # close the messgae pipe
     close $pipe
       or die("Formail Close Pipe Error: $!");
 
     # delete each message after downloading
     $imap->delete_message($msg);
 
     # If we are just testing and want to leave
     #  leave the messages untouched, then we
     #  can use the following line of code
     # $imap->deny_seeing($msg);
   }
 
   # expunge and close the folder
   $imap->expunge($box);
   $imap->close($box);
}
 
$imap->logout();

Schreibe einen Kommentar

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.