[Dovecot] Migration questions...
Lou Duchez
lou at paprikash.com
Tue May 12 16:24:47 EEST 2009
Blast, forgot something: the "Simple.pm" referenced in the script is
this thing:
http://search.cpan.org/~jpaf/Net-IMAP-Simple-0.93/Simple.pm
Download it, compile it, put it somewhere that the script can find it.
> 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