[Dovecot] Migration questions...
Lou Duchez
lou at paprikash.com
Tue May 12 14:50:53 EEST 2009
I don't know whether this would help with the migration, but I routinely
solve a similar problem. I have implemented mail failover between two
servers -- which are configured with identical sets of mailboxes -- and
every 10 minutes or so, a script grabs any E-Mails from the other server
and stores them locally in the proper mailboxes. This script relies on
IMAP connectivity and passwords in plaintext in a passwd-file. Here it is:
---
#!/usr/bin/perl
require '/vmail/Simple.pm';
use Net::SMTP;
$passwdfile = "/path/to/passwd-file";
$remoteserver = "myotherserver.com";
open(FIN, $passwdfile);
@pwlines = (<FIN>);
close(FIN);
for ($i = 0; $i <= $#pwlines; $i++)
{
@pwflds = split(/[:]/, $pwlines[$i]);
if ($#pwflds == 3)
{
@pwparts = split(/[}]/, $pwflds[1]);
if ($#pwparts == 1)
{
$thislogin = $pwflds[0];
$thispassword = $pwparts[1];
transfermail($remoteserver, $thislogin, $thispassword);
}
}
}
sub transfermail
{
my $remoteserver = $_[0];
my $thislogin = $_[1];
my $thispassword = $_[2];
print $remoteserver, " - ", $thislogin, " - ", $thispassword, "\n";
my $server = new Net::IMAP::Simple( $remoteserver );
my $login_status = $server->login( $thislogin, $thispassword );
if ($login_status)
{
my $number_of_messages = $server->select("INBOX");
print $thislogin, " - ", $number_of_messages, " messages.\n";
my $msg;
for ($msg = 1; $msg <= $number_of_messages; $msg++)
{
$ok = 1;
$lines = $server->get( $msg ) or $ok = 0;
$smtp = Net::SMTP->new("127.0.0.1") or $ok = 0;
$smtp->mail($thislogin) or $ok = 0;
$smtp->recipient($thislogin) or $ok = 0;
$smtp->data() or $ok = 0;
$smtp->datasend(@$lines) or $ok = 0;
$smtp->dataend() or $ok = 0;
$smtp->quit or $ok = 0;
if ($ok)
{
$server->delete( $msg );
}
}
}
else
{
print $thislogin, " - could not log in.\n";
}
$server->quit();
}
1;
More information about the dovecot
mailing list