sub migrateMail { my $self = shift; my $username = shift; my $password = ""; $password = $self->getPass($username); if ($password eq undef) { print "There was a problem getting the user's($username) passowrd!\n"; return 1; } my $folder = "INBOX"; my $fc = substr($username,0,1); my $sc = substr($username,1,1); my $spool = "/var/migration/mail/$fc/$sc/$username/"; my $failedspool = "/var/migration/mail-failed/$fc/$sc/$username/"; my $newspool = $spool . "new/"; my $curspool = $spool . "cur/"; my $msgid = undef; my @new; my @current; my @seen; my $errorCount = 0; unless ( opendir(DIR, $curspool) ) { print "migrageMail($username): can't opendir $some_dir: $!"; return 1; } @current = grep { !/^\./ && -f "$curspool/$_" } readdir(DIR); closedir DIR; unless ( opendir(DIR, $newspool) ) { print "migrageMail($username): can't opendir $some_dir: $!"; return 1; } @new = grep { !/^\./ && -f "$newspool/$_" } readdir(DIR); closedir DIR; my $old = scalar(@current); my $new = scalar(@new); print "migrateMail($username): " . $old . " old; " . $new . " new.\n"; my $imap = Mail::IMAPClient->new( Server => $self->{'imaphost'}, User => $username, Password=> $password, ) or return 1; $imap->select($folder); foreach $msg (@new) { $filename = $newspool . $msg; # append the message my $msgid = $imap->append_file( $folder, $filename ); # if the append failed put in in the failed queue so we # can fix it later if ( $msgid ) { # do nothing - default is unseen # print "Message inserted ok == $msgid\n"; } else { print "Error appending message($filename) to $username" . "'s $folder\n"; $self->backupMessage($username,$filename); $errorCount++; } } foreach $msg (@current) { $filename = $curspool . $msg; my $msgid = $imap->append_file( $folder, $filename ); # if the append failed put in in the failed queue so we # can fix it later if ( $msgid ) { # print "Message inserted ok == $msgid\n"; push (@seen, $msgid); } else { print "Error appending message($filename) to $username" . "'s $folder\n"; $self->backupMessage($username,$filename); $errorCount++; } } # now mark messages seen/unseen #print "now marking old messages seen...\n"; $imap->set_flag("\Seen", @seen); # logout and close the conn $imap->logout or print "migrateFolder($username): Could not logout: $@\n"; if ( $errorCount > 0 ) { return $errorCount; } else { return 0; } }