[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