[Postfixbuch-users] OT: Alte eMails in anderes IMAP Postfach archivieren
Foo Bar
foobar at web.de
So Mär 25 15:01:06 CEST 2012
On 03/25/2012 01:50 PM, David Huecking wrote:
> Hallo und guten Tag!
>
> Ich würde gerne automatisiert/ per Skript/ per Knopfdruck eMails eines
> bestimmten Alters von einem IMAP Postfach "david" in ein anderes IMAP Postfach
> "david-archiv" verschieben.
>
> Ähnlich der "Archivierungsfunktion" diverser MUAs (M$ Outlook, Lotu$ Note$,
> KMail), die dann diese eMail in Dateien iherer teilweisen proprietären Formate
> (.P$T, Notes-DB, GZIP oder BZIP komprimierte MBOX) verschieben.
>
> Skalieren müsste das lediglich für den Home-Gebrauch mit zwei bis fünf Usern.
> IMAP-Server ist z.Z. Cyrus, wenn die Info was nützt. Wäre aber natürlich
> schön, sich nicht auf ein Produkt festzulegen - halt ein xyz-IMAP Postfach als
> Ziel wäre schön.
>
> Hat jemand so etwas schon mal gemacht und könnte einen Wink geben?!
>
>
> Herzliche Grüße, David.
uralt und nicht wirklich schön, aber geht ...
#!/usr/bin/perl
use strict;
use warnings;
use File::Find;
use Cyrus::IMAP::Admin;
unless ( $ARGV[0] ) {
print "\n\t$0 <uid>\n\n";
exit;
}
my $user = $ARGV[0];
my $base = "/var/spool/imap/";
my $box = "user/$user";
my $year = `date +\%Y`;
chomp($year);
my $arch = "archive/old_user/$year/$user";
chomp($arch);
# backup imapbox as tar
`tar cvzf $user.imap.tgz $base$box`;
# move mail to archiv
my $cyradm = Cyrus::IMAP::Admin->new();
$cyradm->authenticate( -user => "cyrus",
-authz => "cyrus",
-password => "?????");
if ( $cyradm->error ) {
print 'unable to connect to IMAP backend error: '.$cyradm->error;
print 'aborting';
exit;
}
my $r1 = $cyradm->create($arch);
find({ wanted => \&mach, no_cdir => 1 }, "$base$box");
sub mach {
return unless -d $File::Find::name;
my $folder = $File::Find::name;
chomp($folder);
return if ( "$folder" eq "$base$box" );
$folder =~ s/$base$box\///g;
$cyradm->rename("$box/$folder", "$arch/$folder");
}
`mv $base$box/*. $base$arch/`;
`chown -R cyrus.mail $base$arch`;
`su - cyrus -c 'reconstruct -rf $box'`;
`su - cyrus -c 'reconstruct -rf $arch'`;
$cyradm->delete($box);
Mehr Informationen über die Mailingliste Postfixbuch-users