spacer
Web Development Tutorials CGI-PERL Tutorials
 Developer Newsletter

Tutorials
AJAX
ASP
CGI & Perl
CSS
Flash
HTML
Illustrator
Java
JavaScript
Linux
MySQL
PHP
Photoshop
Python
Wireless
XML
Miscellaneous


Scripts Directory
AJAX Scripts
ASP Scripts
ASP.NET Scripts
CGI & Perl Scripts
Flash Scripts
Java Scripts
JavaScript Scripts
PHP Scripts
Python Scripts
Remotely Hosted Scripts
Tools & Utilities Scripts
XML Scripts

Web Hosting Directory
ASP.NET
Budget
Dedicated Servers
Ecommerce
Linux
Resellers
Shared
Small Business
Windows

Developer Manuals
Learn HTML
Learn PHP
Learn CSS
Learn AJAX
Learn JavaScript
Learn Pear
Free White Papers

Developer Resources
Developer Tools
Developer Content
Survey Software
Dedicated Servers




Transferring Mail to a New Mail Server

By Tony Lawrence
2005-05-03


Transferring Mail to a New Mail Server

Sometimes we just have to move on. Your current mail server may just not be meeting your needs, so you've put up something new. But what about old mail? If your servers are identical (Sendmail to Sendmail, etc.) or use the same mailbox storage format, you may be able to just transfer files directly. If not, read on..

If everyone uses POP, there's usually not much to transfer, and if you can shut off incoming mail and just wait long enough for everyone to pop their mail, there won't be anything. But many people now use IMAP

It's actually sometime useful NOT to transfer anything. Many users let their mailboxes build up without ever deleting unneeded messages. If you can leave the old server on the network, they can always access their old mail if they need to, but they (and you) may find after a year or so that nobody ever has. You might then archive the messages "Just in case" and take down the old server.

If you do want to transfer messages, it can be as simple as running command line tools. The first thing to do is to set the old server to forward all mail to the new server. Exactly what you do to accomplish that depends on your server, but it should be easy. For sendmail, you'd set SMART_HOST and MAIL_HUB, or edit the aliases file and forward each user. For SME server, set the "Delegate Mail Server" in the Server Manager.

Transferring existing mail depends on the format it now uses. For example, Qmail stores messages in individual files. On an SME server (which uses Qmail) you could transfer "tony"'s current mail with just this:

 
cd /home/e-smith/files/users/tony/Maildir
for i in *
do
cat $i | /var/qmail/bin/qmail-inject
doneRepeating that for each directory would move all mail to the new server. However, it all ends up in the user's INBOX unless that server can apply rules to determine where to file it. To assist that, you may want to use a perl program instead. Something like this:

#!/usr/bin/perl

use Mail::Mailer;

@stuff=<>;
foreach (@stuff) {
$from=$_ if /^From:/;
$to=$_ if /^To:/;
$subject=$_ if /^Subject:/;
last if $subject;
}
$from=~ s/From: //;
$from=~ s/<//;
$from=~ s/>//;
$to=~ s/To: //;
$to=~ s/<//;
$to=~ s/>//;
$subject=~ s/^/*** FILE ME IN CUSTS ***/;
$mailer=Mail::Mailer->new();
$mailer->open({From =>$from,
To => $to,
Subject => $subject,
}) or die "Can't open $!\n";
foreach (@stuff) {
print $mailer $_;
}
$mailer=>close();
You'd adjust the modification to Subject appropriately, or add entirely new headers if desired.

If your mail is stored in Unix mailbox fashion, you need something to read the messages and break them up. While you could read the mailboxes directly, it's more portable to use tools like POP:

#!/usr/bin/perl

use Net::POP3;
$pop=Net::POP3->new('10.1.36.237') or die "$!";
$pop->login("tony","password");
$messages=$pop->list;
foreach $msg(keys %$messages) {
$message=$pop->get($msg);
foreach (@$message) {
#same basic idea as above,
}
}
You may need to get Net::POP3 from CPAN. There are similar modules for IMAP.

Tutorial Pages:
» Transferring Mail to a New Mail Server


© Copyright 2005 A.P. Lawrence


 | Bookmark Print |   Write For Us
Related Tutorials:
» Random subroutines in Perl
» Log Script Use
» Creating Perl Modules for Web Sites
» Bit Vector, Using Perl Vec
» Build a Perl/CGI Voting System
» Perl Range Operator



About the NetVisits, Inc Network | Write For Us | Advertise
Copyright ©2007 NetVisits, Inc Network. All Rights Reserved. Privacy Policy.
Visit other NetVisits, Inc. sites: