Cyrus Muder: determine backend of a mailbox
Andrew Morgan
morgan at orst.edu
Wed Sep 22 13:07:09 EDT 2010
On Wed, 22 Sep 2010, Torsten Schlabach wrote:
> Dear list!
>
> We are running a Cyrus Murder configuration.
>
> In the mailboxlist (which I can get using ctl_mboxlist, I can see on
> which backend each mailbox resides physically.
>
> Is there any way to extract that information through the IMAP protocol?
>
> What I mean is, I can issue a command:
>
> list "Mail" "*"
>
> but the output will not list the backend that the mailbox / folder sits
> on.
>
> Are there any options I could use for that?
>
> Or am I on the wrong path and I should achieve this in a different way.
>
> I hope ctl_mboxlist is not the only way to access this information.
Here is a chunk of perl code which uses IMAP to get the mailbox
location/backend:
##########################
# Locate which backend a mailbox is on
##########################
sub locatemailbox {
my ($server, $authuser, $authpw, $mailbox) = @_;
my $location = "";
use Mail::IMAPClient;
my $imap = Mail::IMAPClient->new(
Server => $server,
User => $authuser,
Password => $authpw,
Ssl => 1,
);
if (! $imap) {
die("Cannot connect to mail server '$server' to locate mailbox - $!");
}
my @results = $imap->tag_and_run(qq/GETANNOTATION $mailbox "*" "value.shared"/);
$imap->logout;
foreach my $r (@results) {
$r =~ s/\r//g;
$r =~ s/\n//g;
if ($r =~ /\/vendor\/cmu\/cyrus-imapd\/server" \("value.shared""(.*)"\)$/) {
$location = $1;
}
}
if ($location eq '') {
die("Cannot locate mailbox '$mailbox'.\n");
}
return $location;
}
$mailbox is something like "user.morgan". Basically, you need to look at
the mailbox annotations to get this. There are other interesting things
in the annotations. Here are the annotations on my own mailbox:
condstore: false
duplicatedeliver: false
lastpop:
lastupdate: 22-Sep-2010 10:01:36 -0700
partition: p4
pop3newuidl: true
server: cyrus-be3.onid.oregonstate.edu
sharedseen: false
size: 67386044
Andy
More information about the Info-cyrus
mailing list