Troubles with access='rw' and Mail::Box::IMAP4
gabriel rosenkoetter <[email protected]> Thu, 3 Jun 2004 18:07:51 -0400
| Newsgroups | gmane.comp.lang.perl.modules.mail-box |
|---|---|
| Message-ID | <[email protected]> |
I know it's not done and all, but something tells me that this should be an easy fix: jedi:~/imaphorf% ./imaphorf.pl [37] Password for [email protected]: Connected Authenticated skipping ["Public Folders/"] because of exclude ["Public Folders/"] Copying [21st]: PROGRESS: Created folder Maildir /home/auto/gr/Mail/21st. opened locally; opened remotely; Method folder() is not defined for a Mail::Box::IMAP4::Head. Mail::Reporter::AUTOLOAD('Mail::Box::IMAP4::Head object') called at /u01/app/perl/rip/lib/perl5/site_perl/5.6.1/Mail/Box/IMAP4/Head.pm line 38 Mail::Box::IMAP4::Head::get('Mail::Box::IMAP4::Head object', 'Message-ID') called at /u01/app/perl/rip/lib/perl5/site_perl/5.6.1/Mail/Message.pm line 251 Mail::Message::get('Mail::Box::IMAP4::Message=HASH(0x86f4c28)', 'Message-ID') called at /u01/app/perl/rip/lib/perl5/site_perl/5.6.1/Mail/Message.pm line 684 Mail::Message::takeMessageId('Mail::Box::IMAP4::Message=HASH(0x86f4c28)') called at /u01/app/perl/rip/lib/perl5/site_perl/5.6.1/Mail/Message.pm line 137 Mail::Message::messageId('Mail::Box::IMAP4::Message=HASH(0x86f4c28)') called at ./imaphorf.pl line 102 This *looks* to me like you've got a Mail::Box::IMAP4::Head where you really wanted to have a Mail::Box::IMAP4, and I'm sure I can track down where that's happening, but maybe since it's your code, you can faster. Or am *I* doing something wrong here? (My script's attached.) -- gabriel rosenkoetter Transcontinental CC3 Unix & Linux sysadmin [email protected]
imaphorf.pl
(application/x-perl, 2.4 KB)
#!/usr/bin/perl -w
use strict;
use Mail::IMAPClient;
use Mail::Box::Manager;
use Mail::Box::IMAP4;
use Term::ReadKey;
my $server = 'localhost';
my $username = $ENV{USER};
my $base = "$ENV{HOME}/Mail";
my $verbose = 1;
my @excludes = (
'Calendar',
'Contacts',
'Deleted Items',
'Drafts',
'Inbox',
'INBOX',
'Journal',
'Notes',
'Outbox',
'Sent Items',
'Tasks',
'Public Folders',
'"Public Folders/"'
);
my @includes = ();
my ($exclude, $include);
ReadMode('noecho');
print "Password for ${username}\@${server}: ";
chomp(my $password = ReadLine(0));
print "\n";
ReadMode('restore');
my $client = Mail::IMAPClient->new (
Server => $server,
User => $username,
Password => $password,
) or die $@;
print "Connected\n" if $verbose;
print "Authenticated\n" if ($verbose && $client->Authenticated());
my $mgr = new Mail::Box::Manager;
$mgr->defaultTrace('WARNINGS', 'DEBUG');
$mgr->registerType(imap4 => 'Mail::Box::IMAP4');
#my $imap = Mail::Box::IMAP4->new(imap_client => $client);
#my @dirs = $imap->listSubFolders;
my $imap = $mgr->open (
folder => "/",
type => 'imap4',
imap_client => $client,
access => 'rw',
) or die $@;
my @dirs = $imap->listSubFolders;
my ($local, $remote, @messages, $message);
FOLDER: foreach my $dir (sort @dirs) {
foreach $exclude (@excludes) {
if ($dir =~ m/^$exclude/) {
print "skipping [$dir] because of exclude [$exclude]\n" if $verbose;
next FOLDER;
}
}
if ($#includes >= 0) {
my $matched = 0;
foreach $include (@includes) {
if ($dir =~ m/$include/) {
$matched = 1;
last;
}
}
if ($matched == 0) {
print "skipping [$dir] because it's not listed in includes\n" if $verbose;
next FOLDER;
}
}
print "Copying [$dir]:\n" if $verbose;
$local = $mgr->open (
create => 1,
folder => "=$dir",
folderdir => $base,
type => 'maildir',
access => 'rw'
) or die $@;
print " opened locally;\n" if $verbose;
$remote = $mgr->open (
folder => "$dir",
type => 'imap4',
imap_client => $client,
access => 'rw',
) or die $@;
@messages = $remote->messages;
print " opened remotely;\n" if $verbose;
foreach $message (@messages) {
print " moving ", $message->messageId, "... " if $verbose;
$mgr->moveMessage($local, $message) or die $@;
print "moved.\n" if $verbose;
}
print " done moving.\n" if $verbose;
$mgr->close($local);
$mgr->close($remote);
}
$imap->close;
#$client->disconnect or die $@;
#print "Disconnected\n" if $verbose;