This commit is contained in:
Nick Bebout 2011-03-12 02:44:40 +00:00
parent bf62e181ca
commit c09ef20a65
10 changed files with 2699 additions and 87 deletions

18
CREDITS
View file

@ -1,7 +1,6 @@
#!/bin/cat
# $Id: CREDITS,v 1.114 2008/08/13 23:34:05 gilles Exp gilles $
# $Id: CREDITS,v 1.115 2008/08/27 11:56:52 gilles Exp gilles $
I thank very much all of these people.
If you want to make a donation to the author, Gilles LAMIRAL:
@ -15,13 +14,22 @@ b) If you can read french, please use the following wishlist :
c) its paypal account gilles.lamiral@laposte.net
Here are the people I thanks, and why :
Here are the persons who helped me to develop imapsync.
Feel free to tell me if a name is missing or if you want
to remove one.
I thank very much all of these people.
Daniel Skinner
Made me write the FAQ entry about offlineimap and
read its documentation.
Ploc
Made me write the option --idatefromheader
Pierre-Emmanuel André
Success from dovecot 1.0.0 to Archiveopteryx 2.10
Success from dovecot 1.0.0 to Archiveopteryx 3.0.0
Kevin Harriss
Pushed me to find (documentation and source) and solve
@ -424,10 +432,6 @@ Kirk Averett
Bug about --subscribed option. I stupidly
commented a map line in release 1.138
Here are the persons who helped me to develop imapsync.
Feel free to tell me if a name is missing or if you want
to remove one.
Evert Mouw
Gave the "Term::ReadKey" module dependency problem.

View file

@ -1,17 +1,29 @@
RCS file: RCS/imapsync,v
Working file: imapsync
head: 1.261
head: 1.264
branch:
locks: strict
gilles: 1.261
gilles: 1.264
access list:
symbolic names:
keyword substitution: kv
total revisions: 261; selected revisions: 261
total revisions: 264; selected revisions: 264
description:
----------------------------
revision 1.261 locked by: gilles;
revision 1.264 locked by: gilles;
date: 2008/08/27 15:19:05; author: gilles; state: Exp; lines: +7 -8
Archiveopteryx 3.0.0
----------------------------
revision 1.263
date: 2008/08/26 02:58:11; author: gilles; state: Exp; lines: +59 -22
Added modules versions output.
----------------------------
revision 1.262
date: 2008/08/16 17:19:29; author: gilles; state: Exp; lines: +6 -6
Work fine under XP.
----------------------------
revision 1.261
date: 2008/08/16 15:56:00; author: gilles; state: Exp; lines: +32 -41
- Fixed bug about ssl and justconnect option
- Cleaned connect code.

17
FAQ
View file

@ -58,6 +58,23 @@ R. - Download Mail::IMAPClient 2.2.9 at
or if imapsync is in directory /path/
perl -I./Mail-IMAPClient-2.2.9 /path/imapsync [...]
=======================================================================
Q. I am interested in creating a local clone of the IMAP on a LAN
server for faster synchronisations, Email will always be delivered
to the remote server and so the synchronisation will be one way from
remote to local. How suited is ImapSync to continouous one-way
synchronisation of mailboxes? Is there a better solution?
R. If messages are delivered remotely and you play locally with the
copy, in order to have fast access, then the synchronisation can't
be one way. You may change flags, you may move messages in
different folders etc.
A better tool with this scenario is offlineimap,
designed for this issue, and faster than imapsync.
=======================================================================
Q. We have found that the sent time and date have been changed to the
time at which the file was synchronised.

23
INSTALL
View file

@ -1,8 +1,29 @@
# $Id: INSTALL,v 1.13 2008/03/19 00:28:36 gilles Exp gilles $
# $Id: INSTALL,v 1.14 2008/08/16 17:18:58 gilles Exp gilles $
#
# INSTALL file for imapsync
# imapsync : IMAP sync or copy tool.
INTRODUCTION
------------
imapsync works fine under any Unix OS with perl.
imapsync works fine under Windows (2000, XP) and ActiveState's 5.8 Perl
imapsync is already available directly on the following distributions (at least):
FreeBSD, Debian, Ubuntu, Gentoo, NetBSD, Darwin, Mandriva and OpenBSD (yeah!).
Get imapsync at
http://www.linux-france.org/prj/imapsync/dist/
You'll find a compressed tarball called imapsync-x.xx.tgz
where x.xx is the version number. Untar the tarball where
you want (on Unix):
tar xzvf imapsync-x.xx.tgz
Go into the directory imapsync-x.xx and read the INSTALL file.
You're already reading the INSTALL file.
GETTING
-------

10
README
View file

@ -3,11 +3,11 @@ NAME
Synchronise mailboxes between two imap servers. Good at IMAP migration.
More than 32 different IMAP server softwares supported with success.
$Revision: 1.261 $
$Revision: 1.264 $
INSTALL
imapsync works fine under any Unix OS with perl.
imapsync works fine under Windows 2000 (at least) and ActiveState's 5.8 Perl
imapsync works fine under Windows (2000, XP) and ActiveState's 5.8 Perl
imapsync is already available directly on the following distributions (at least):
FreeBSD, Debian, Ubuntu, Gentoo, NetBSD, Darwin, Mandriva and OpenBSD (yeah!).
@ -247,7 +247,7 @@ IMAP SERVERS
Success stories reported with the following 35 imap servers (softwares
names are in alphabetic order) :
- Archiveopteryx 2.03, 2.04, 2.09, 2.10 [dest]
- Archiveopteryx 2.03, 2.04, 2.09, 2.10 [dest], 3.0.0 [dest]
(OSL 3.0) http://www.archiveopteryx.org/
- BincImap 1.2.3 (GPL) (http://www.bincimap.org/)
- CommuniGatePro server (Redhat 8.0)
@ -268,7 +268,7 @@ IMAP SERVERS
2.0.7 seems buggy.
- Deerfield VisNetic MailServer 5.8.6 [from]
- Dovecot 0.99.10.4, 0.99.14, 0.99.14-8.fc4, 1.0-0.beta2.7,
1.0.0 [dest] (LGPL) (http://www.dovecot.org/)
1.0.0 [dest/source] (LGPL) (http://www.dovecot.org/)
- Domino (Notes) 4.61[from], 6.5, 5.0.6, 5.0.7, 7.0.2, 6.0.2CF1, 7.0.1 [from]
- Eudora WorldMail v2
- GMX IMAP4 StreamProxy.
@ -364,5 +364,5 @@ SIMILAR SOFTWARES
Feedback (good or bad) will be always welcome.
$Id: imapsync,v 1.261 2008/08/16 15:56:00 gilles Exp gilles $
$Id: imapsync,v 1.264 2008/08/27 15:19:05 gilles Exp gilles $

84
TODO
View file

@ -1,20 +1,17 @@
TODO file for imapsync
----------------------
Fix bad english language.
Write to zimbra coders about the date presentation:
Sorting by default by internal date is bad with migrations
and delays arrivals. An option would be good.
Fix --ssl --justconnect bug
Fix --ssl need --authmech login with gmail. Why?
Add an option to implement the faq entry about copying a contact folder.
imapsync doesn't report well. It should says "I had
to sync 123 messages but I could transfer only 99 messages"
Fix bug "not possible to use space in the imap password"
Add kerberos authentification
@ -23,21 +20,19 @@ Add NOOP commands to avoid timeouts.
Make "--delete 2" be a fatal error.
Start an imap internet scan project.
Explain howto change only the header with --regexmess
Start a wiki for imapsync.
Add a --pidfile option.
Add a --tmpfile option.
Add a --tmpdir option.
Write a clean_exit() replacing each die() or exit() call.
Add a --skipheaderinfolder option
See the code patches/imapsync_Cvitkovich_pidfile_tmpfile
Make --skipheader be multiple
Fix this:
> - Erreur avec la traditionnelle différence entre Windows
> et LInux sur les retour-chariots : le calcul de la
@ -48,31 +43,14 @@ Fix this:
> # No NL Count on Windows my $length = ( -s $file ) + $bare_nl_count;
> my $length = ( -s $file );
Normally, "no header used or found" means imapsync found a message
with no header. It may be a bad message with really no header
or it may be a imap server problem, the server gives no header
for this message. In that case imapsync gets the whole message
to see if there is the same on the other side. It slows the transfer
of course. I think I'll change imapsync behavior and let it
give up those bad messages missing an header.
Add a --delete2folders option
"When syncing mailboxes with imapsync, is there a way to delete folders in the
target account? The --delete2 option only seems to delete individual
messages, not folders."
Fix the buggy --include behavior with no --folder --folderrec or --subscribed.
make --syncinternaldates turn on by default
Add different level of output to see clearly the
Add different levels of output to see clearly the
problem by default.
Check imapsync with gmail (dates problem?).
Add --justlogin --justlogin1 --justlogin2 options
to check username and passwort.
@ -89,8 +67,6 @@ that - in example, to write each mail to stdout, pipe that to the
convertion program, and read the result from stdin - and this all before
the mail will transfer to the target imap-server"
Add a --tmpdir option.
Fix bug with folder names starting with an asterisk: *Archiv
Sending: 220 SELECT *Archiv/Support/foobar
Read: 220 BAD Protokollfehler: "Invalid folder specified in SELECT command"
@ -113,16 +89,12 @@ Add an entry to
http://lsm.execpc.com/lsm/
See template lsm.imapsync
Update the distribution list including imapsync in the
INSTALL chapter.
Add an option to tell imapsync that the domain
is changing and have it replace the domain in all user names that are
related to ACLs.
See patches/imapsync-acls-users
Add a best practice migration tips document,
good options with such imap server.
Add a best practice migration tips document.
Add "output to reflect everything that imapsync was doing".
Not everything but flag synchronization will be nice"
@ -134,9 +106,6 @@ Add a method doing the switch automagicaly.
Add --verbose from Kjetil jumbo patch.
Talk about mbox and maildir format when "Invalid header"
problem is encountered.
Post on newsgroup comp.mail.imap when a new release comes.
http://groups.google.fr/group/comp.mail.imap
@ -147,18 +116,50 @@ Write to the debian maintener about that.
Interface with external software like procmail
Look at http://barnson.org/node/81
Read:
http://www.washington.edu/imap/documentation/commndmt.txt.html
Add cyrus link about INBOX. namespace
http://asg.web.cmu.edu/cyrus/download/imapd/altnamespace.html
Explain expunge behavior.
DONE. Fix the buggy --include behavior with no --folder --folderrec or --subscribed.
DONE. Update the distribution list including imapsync in the
INSTALL chapter. Also in README.
DONE. Start FAQ entries about good options with such imap server.
DONE. Talk about mbox and maildir format when "Invalid header"
problem is encountered. (See FAQ "Invalid header")
DONE. Look at http://barnson.org/node/81
An old blog about imap migration.
DONE. Normally, "no header used or found" means imapsync found a message
with no header. It may be a bad message with really no header
or it may be a imap server problem, the server gives no header
for this message. In that case imapsync gets the whole message
to see if there is the same on the other side. It slows the transfer
of course. I think I'll change imapsync behavior and let it
give up those bad messages missing an header.
DONE. Make --syncinternaldates turn on by default
DONE. Check imapsync with gmail (dates problem?).
DONE. Start an imap internet scan project.
DONE. Fix --ssl --justconnect bug
DONE. Fix --ssl needs --authmech login with gmail. Why?
DONE. Try a 50Mo message transfer (slow ?)
fast !
@ -241,7 +242,6 @@ Test the new Mail::IMAPClient (2.1.4 -> 2.2.6 or sup)
userdbpw -hmac-md5 | userdb userdb set hmac-md5pw
http://www.inter7.com/courierimap/INSTALL.html
DONE. Add a --subscribe option to subscribe folders on the
destination server.

View file

@ -1 +1 @@
1.261
1.264

View file

@ -9,12 +9,12 @@ tool. Synchronise mailboxes between two imap servers. Good
at IMAP migration. More than 32 different IMAP server softwares
supported with success.
$Revision: 1.261 $
$Revision: 1.264 $
=head1 INSTALL
imapsync works fine under any Unix OS with perl.
imapsync works fine under Windows 2000 (at least) and ActiveState's 5.8 Perl
imapsync works fine under Windows (2000, XP) and ActiveState's 5.8 Perl
imapsync is already available directly on the following distributions (at least):
FreeBSD, Debian, Ubuntu, Gentoo, NetBSD, Darwin, Mandriva and OpenBSD (yeah!).
@ -284,7 +284,7 @@ Failure stories reported with the following 4 imap servers :
Success stories reported with the following 35 imap servers
(softwares names are in alphabetic order) :
- Archiveopteryx 2.03, 2.04, 2.09, 2.10 [dest]
- Archiveopteryx 2.03, 2.04, 2.09, 2.10 [dest], 3.0.0 [dest]
(OSL 3.0) http://www.archiveopteryx.org/
- BincImap 1.2.3 (GPL) (http://www.bincimap.org/)
- CommuniGatePro server (Redhat 8.0)
@ -305,7 +305,7 @@ Success stories reported with the following 35 imap servers
2.0.7 seems buggy.
- Deerfield VisNetic MailServer 5.8.6 [from]
- Dovecot 0.99.10.4, 0.99.14, 0.99.14-8.fc4, 1.0-0.beta2.7,
1.0.0 [dest] (LGPL) (http://www.dovecot.org/)
1.0.0 [dest/source] (LGPL) (http://www.dovecot.org/)
- Domino (Notes) 4.61[from], 6.5, 5.0.6, 5.0.7, 7.0.2, 6.0.2CF1, 7.0.1 [from]
- Eudora WorldMail v2
- GMX IMAP4 StreamProxy.
@ -422,7 +422,7 @@ Entries for imapsync:
Feedback (good or bad) will be always welcome.
$Id: imapsync,v 1.261 2008/08/16 15:56:00 gilles Exp gilles $
$Id: imapsync,v 1.264 2008/08/27 15:19:05 gilles Exp gilles $
@ -489,7 +489,7 @@ my(
use vars qw ($opt_G); # missing code for this will be option.
$rcs = '$Id: imapsync,v 1.261 2008/08/16 15:56:00 gilles Exp gilles $ ';
$rcs = '$Id: imapsync,v 1.264 2008/08/27 15:19:05 gilles Exp gilles $ ';
$rcs =~ m/,v (\d+\.\d+)/;
$VERSION = ($1) ? $1 : "UNKNOWN";
@ -521,10 +521,27 @@ sub check_lib_version {
$error=0;
sub modules_VERSION() {
no warnings 'uninitialized';
my $modules_releases = "
Mail::IMAPClient $Mail::IMAPClient::VERSION
IO::Socket $IO::Socket::VERSION
IO::Socket::SSL $IO::Socket::SSL::VERSION
Digest::MD5 $Digest::MD5::VERSION
Digest::HMAC_MD5 $Digest::HMAC_MD5::VERSION
Term::ReadKey $Term::ReadKey::VERSION
Date::Manip $Date::Manip::VERSION
";
return($modules_releases);
}
my $banner = join("",
'$RCSfile: imapsync,v $ ',
'$Revision: 1.261 $ ',
'$Date: 2008/08/16 15:56:00 $ ',
'$Revision: 1.264 $ ',
'$Date: 2008/08/27 15:19:05 $ ',
"\n",localhost_info(),
" and the module Mail::IMAPClient version used here is ",
$VERSION_IMAPClient,"\n",
@ -555,6 +572,8 @@ $port1 ||= defined $ssl1 ? 993 : 143;
$host2 || missing_option("--host2") ;
$port2 ||= defined $ssl2 ? 993 : 143;
sub connect_imap {
my($host, $port, $debugimap, $ssl) = @_;
my $imap = Mail::IMAPClient->new();
@ -569,13 +588,15 @@ sub connect_imap {
sub localhost_info {
my($infos) = join("",
"Here is a [$OSNAME] system (",
join(" ",
uname(),
),
")\n",
"with perl ",
sprintf("%vd", $PERL_VERSION));
"Here is a [$OSNAME] system (",
join(" ",
uname(),
),
")\n",
"with perl ",
sprintf("%vd", $PERL_VERSION),
modules_VERSION()
);
return($infos);
}
@ -661,7 +682,6 @@ print "To imap server [$host2] port [$port2] user [$user2]\n";
sub ask_for_password {
require Term::ReadKey;
my ($user, $host) = @_;
print "What's the password for $user\@$host? ";
Term::ReadKey::ReadMode(2);
@ -1737,6 +1757,8 @@ sub get_options
}
load_modules();
# exit with --help option or no option at all
usage() and exit if ($help or ! $numopt) ;
@ -1744,9 +1766,25 @@ sub get_options
exit(EX_USAGE()) unless ($opt_ret) ;
}
sub load_modules {
require IO::Socket::SSL if ($ssl1 or $ssl2);
require Date::Manip if ($syncinternaldates || $idatefromheader) ;
# require Term::ReadKey if (
# (not($password1 or $passfile1))
# or (not($password2 or $passfile2))
# or (not $help));
#require Data::Dumper if ($debug);
}
sub parse_header_msg1 {
my ($imap, $m_uid, $s_heads, $s_fir, $s, $s_hash) = @_;
@ -1978,7 +2016,6 @@ $0 \\
--host2 imap.trac.org --user2 bar --passfile2 /etc/secret2
$localhost_info
Mail::IMAPClient version is $Mail::IMAPClient::VERSION
$rcs
$thank
@ -2398,14 +2435,14 @@ use constant NonFolderArg => 1; # Value to pass to Massage to
}
}
use warnings;
my $candump = 0;
if ($self->Debug) {
eval {
require Data::Dumper;
Data::Dumper->import;
};
$candump++ unless $@;
}
# my $candump = 0;
# if ($self->Debug) {
# eval {
# require Data::Dumper;
# Data::Dumper->import;
# };
# $candump++ unless $@;
# }
}
# if we asked for one message, just return its hash,
@ -2585,7 +2622,6 @@ use constant NonFolderArg => 1; # Value to pass to Massage to
$self->Socket($sock);
$self->State(Connected);
$sock->autoflush(1) ;
my ($code, $output);
$output = "";
until ( $code ) {

View file

@ -1,6 +1,6 @@
#!/bin/sh
# $Id: tests.sh,v 1.78 2008/08/16 15:54:40 gilles Exp gilles $
# $Id: tests.sh,v 1.79 2008/08/27 15:18:12 gilles Exp gilles $
#### Shell pragmas
@ -130,6 +130,35 @@ locallocal() {
fi
}
ll_timeout() {
if test X`hostname` = X"plume"; then
echo3 Here is plume
$CMD_PERL ./imapsync \
--host1 localhost --user1 tata@est.belle \
--passfile1 /var/tmp/secret.tata \
--host2 localhost --user2 titi@est.belle \
--passfile2 /var/tmp/secret.titi \
--folder INBOX --timeout 1
else
:
fi
}
ll_timeout_ssl() {
if test X`hostname` = X"plume"; then
echo3 Here is plume
$CMD_PERL ./imapsync \
--host1 localhost --user1 tata@est.belle \
--passfile1 /var/tmp/secret.tata \
--host2 localhost --user2 titi@est.belle \
--passfile2 /var/tmp/secret.titi \
--folder INBOX --timeout 5 --ssl1 --ssl2
else
:
fi
}
ll_folder() {
@ -1013,6 +1042,17 @@ ariasolutions2() {
# --dry --debug --debugimap
}
genomics() {
# Blocked, timeout ignored
./imapsync \
--host1 mail.genomics.org.cn --user1 lamiral --passfile1 /var/tmp/secret.genomics \
--host2 szmail.genomics.cn --user2 lamiral --passfile2 /var/tmp/secret.genomics \
--sep1 . --prefix1 'INBOX.' --folder INBOX --useheader 'Message-Id' --expunge --skipsize \
--timeout 7 --debug --debugimap
}
##########################
##########################
@ -1035,6 +1075,7 @@ test $# -eq 0 && run_tests \
option_tests \
first_sync \
locallocal \
ll_timeout \
ll_folder \
ll_buffersize \
ll_justfolders \

2481
zzz Normal file

File diff suppressed because it is too large Load diff