This commit is contained in:
Nick Bebout 2012-04-16 17:28:48 -05:00
parent 054e58c3b9
commit e76c9d2097
18 changed files with 448 additions and 1375 deletions

24
CREDITS
View file

@ -1,5 +1,5 @@
#!/bin/cat
# $Id: CREDITS,v 1.162 2011/09/21 20:21:14 gilles Exp gilles $
# $Id: CREDITS,v 1.165 2011/12/10 02:25:01 gilles Exp gilles $
If you want to make a donation to the author, Gilles LAMIRAL,
use any of the following ways:
@ -30,6 +30,23 @@ I thank very much all of these people.
I thank also very much all people who bought imapsync from the homepage
but I don't cite them here.
Thomas Edgar
Gave a FAQ item "from Exchange 2003 to Cyrus Imap 2.4"
Dan Hulme.
Found a bug in the FAQ about --regextrans2
(Fix is --regextrans2 's,${h2_prefix}(.*),${h2_prefix}FOO${h2_sep}$1,')
Suggested default --useheader 'Message-ID' --useheader 'Received'
(Exchange compliant)
Ameir Abdeldayem
Gave a patch to sync messages lacking Message-ID
http://www.linux-france.org/prj/imapsync_list/msg01151.html
Yousaf Shah
Contributed by giving the book
19.90 "Making Things Talk: Using Sensors, Networks, and Arduino to see, hear, and feel your world"
Klaus Franken
Patch to avoid useless warning "Use of uninitialized value $uid1 in exists"
@ -1020,6 +1037,9 @@ Eric Yung
Total amount of book prices :
c \
19.90+\
13.59+\
32.65+\
20.31+\
\
75.00+\
@ -1150,4 +1170,4 @@ c \
31.20+\
40.00
=
2963.96
3050.41

View file

@ -1,17 +1,52 @@
RCS file: RCS/imapsync,v
Working file: imapsync
head: 1.468
head: 1.476
branch:
locks: strict
gilles: 1.468
gilles: 1.476
access list:
symbolic names:
keyword substitution: kv
total revisions: 468; selected revisions: 468
total revisions: 476; selected revisions: 476
description:
----------------------------
revision 1.468 locked by: gilles;
revision 1.476 locked by: gilles;
date: 2011/12/10 01:33:50; author: gilles; state: Exp; lines: +34 -8
Applied Ameir Abdeldayem patch to deal with errors like
"Host1 Sent/15 size 1428 ignored (no header so we ignore this message)"
It happens with Sent folder when no Message-Id nor Received header
are defined in a message.
----------------------------
revision 1.475
date: 2011/12/08 08:23:16; author: gilles; state: Exp; lines: +7 -7
Default header used to identify a message are now "Message-Id" and "Received".
----------------------------
revision 1.474
date: 2011/12/02 20:30:16; author: gilles; state: Exp; lines: +9 -9
Default down from 1000 to --split1 500. (Cyrus "Word too long")
----------------------------
revision 1.473
date: 2011/12/01 14:06:23; author: gilles; state: Exp; lines: +8 -8
Fixed output. fetch_hash_2 no longer exists.
----------------------------
revision 1.472
date: 2011/12/01 12:44:48; author: gilles; state: Exp; lines: +11 -6
Added start and end dates in the final statistics.
----------------------------
revision 1.471
date: 2011/11/24 09:29:26; author: gilles; state: Exp; lines: +21 -20
Checked and updated "Similar softwares" section in documentation.
----------------------------
revision 1.470
date: 2011/11/23 18:14:20; author: gilles; state: Exp; lines: +7 -7
typo
----------------------------
revision 1.469
date: 2011/11/20 17:44:35; author: gilles; state: Exp; lines: +16 -9
Added --nofilterflags to chech STORE flags ignoring PERMANENTFLAGS (Exchange tests)
----------------------------
revision 1.468
date: 2011/11/18 01:23:37; author: gilles; state: Exp; lines: +33 -105
Replaced fetch_hash_2() calls by normal fetch_hash()
----------------------------

77
FAQ
View file

@ -1,5 +1,5 @@
#!/bin/cat
# $Id: FAQ,v 1.97 2011/11/17 22:14:15 gilles Exp gilles $
# $Id: FAQ,v 1.100 2011/12/10 01:38:36 gilles Exp gilles $
+------------------+
| FAQ for imapsync |
@ -139,6 +139,34 @@ Q. Is is legal?
R. Yes, the license permits it
http://imapsync.lamiral.info/COPYING
=======================================================================
Q. How can I speed up transfers?
R. By using --useuid imapsync avoid getting messages headers and build
a cache. On Unix a good thing is to add also --tmpdir /var/tmp
to keep the cache since /tmp is often cleared on reboot.
imapsync ... --useuid
R. Add also --nofoldersizes since the default behavior is to compute
folder sizes. Folder sizes are useless for the transfer, just
useful to see what has to be done on each folder.
=======================================================================
Q. I see warning messages like
"Host1 Sent/15 size 1428 ignored (no header so we ignore this message)"
What can I do to transfer those messages?
R1. Use --addheader option, it will add a header like
"Message-Id: <15@imapsync>" and transfer the message on host2.
Duplicates won't happen in next runs.
imapsync ... --addheader
R2. Use --useuid then imapsync will avoid dealing with headers.
imapsync ... --useuid
=======================================================================
Q. How can I try imapsync with the new Mail::IMAPClient 3.xx perl library?
@ -270,7 +298,7 @@ Consequences:
The result is that you can have more messages on host1 than on host2.
R2. With option --useuid imapsync doesn't use headers to identify
messages on both sides but it uses their imap uid. In than case
messages on both sides but it uses their imap uid. In that case
duplicates on host1 are transfered on host2.
=======================================================================
@ -641,6 +669,41 @@ R2. Use --include '^MyFolder'
and only them.
======================================================================
Q. How to migrate from or to Exchange 2003 with an admin/authuser
account?
R. Thomas Edgar wrote the following
In case you can glean something from this snippet which allowed us
to migrate from Exchange 2003 t0 Cyrus Imap 2.4 (you would reverse
the flow to go the other way):
imapsync --dry --host1 ExchangeServer.mycompany.com \
--user1 Some.User@mycompany.com --authuser1 ExchangeAdminAccount \
--proxyauth1 --password1 '$pass_with_dollars$' \
--host2 cyrusimapbackend.mycompany.com \
--user2 SameOrDiffererentUser@mycompany.com \
--authuser2 CyrusAdminAccount --proxyauth2
We also needed to:
- Ensure the Exchange Admin Acct had IMAP4 enabled in it's
profile (it initially didn't!)
- Ensure the Some.User Exchange Acct had IMAP4 enabled
in it's profile (it initially didn't!)
- Add the CyrusAdminAccount to admins line in /etc/imapd.conf
- Give CyrusAdminAccount lrswipkxtecda to the Cyrus Imap account
being migrated to (- or in your case, from)
In case you are not aware:
- It will prompt for a password if you don't supply it
- the domain part of the fully-qualified email could be
omitted in our case
- Use --debugimap when testing initial connectivity, if necessary
======================================================================
Q. How to migrate from or to Exchange 2007/2010 with an
admin/authuser account?
@ -786,6 +849,9 @@ Q. Give examples about --regextrans2
R. --regextrans2 is used to transform folder names
Remember that --regextrans2 applies after the default
inversion prefix1 <-> prefix2 and sep1 <-> sep2
Examples:
0) First try with --dry --justfolders options since imapsync shows the
@ -809,15 +875,14 @@ Examples:
--regextrans2 's#(.*)#FOO/$1#'
or:
c) Any separator, any prefix solution, FOO is the subfolder:
It is a complicated line because every case is taken into account.
Type it in one line (or with the \ at the end of first line on Unix shells.
--regextrans2 's,${h1_prefix}(.*),${h2_prefix}FOO${h2_sep}$1,' \
--regextrans2 's,^INBOX$,${h2_prefix}NEW${h2_sep}INBOX,'
--regextrans2 's,${h2_prefix}(.*),${h2_prefix}FOO${h2_sep}$1,' \
--regextrans2 's,^INBOX$,${h2_prefix}FOO{h2_sep}INBOX,'
3) to substitute all characters dot "." by underscores "_"

18
INSTALL
View file

@ -1,4 +1,4 @@
# $Id: INSTALL,v 1.21 2011/11/17 08:07:03 gilles Exp gilles $
# $Id: INSTALL,v 1.22 2011/12/10 02:27:04 gilles Exp gilles $
#
# INSTALL file for imapsync
# imapsync : IMAP sync or copy tool.
@ -110,11 +110,23 @@ Here is some individual module help:
- Perl Authen::NTLM
perl -mAuthen::NTLM -e ''
Everything in one command:
Test everything in one command:
perl -mMail::IMAPClient -mDigest::MD5 -mTerm::ReadKey -mIO::Socket::SSL \
-mFile::Spec -mDigest::HMAC_MD5 -mAuthen::NTLM -e ''
You can install automatically those Perl modules via the
following commands (with root permissions)
perl -MCPAN -e 'install Mail::IMAPClient'
perl -MCPAN -e 'install Digest::MD5'
perl -MCPAN -e 'install Term::ReadKey'
perl -MCPAN -e 'install IO::Socket::SSL'
perl -MCPAN -e 'install File::Spec'
perl -MCPAN -e 'install Digest::HMAC_MD5'
perl -MCPAN -e 'install Authen::NTLM'
INSTALLING on Unix
------------------
@ -122,7 +134,7 @@ To see what will be done, just run:
make -n install
To install imapsync, just run:
To install imapsync, just run (as root):
make install

32
README
View file

@ -1,9 +1,9 @@
NAME
imapsync - IMAP synchronisation, sync, copy or migration tool.
Synchronise mailboxes between two imap servers. Good at IMAP migration.
More than 36 different IMAP server softwares supported with success.
More than 44 different IMAP server softwares supported with success.
$Revision: 1.468 $
$Revision: 1.476 $
SYNOPSIS
To synchronise imap account "foo" on "imap.truc.org" to imap account
@ -111,9 +111,7 @@ DESCRIPTION
sides. Same headers and the transfer is done only once. All flags are
preserved, unread will stay unread, read will stay read, deleted will
stay deleted. You can stop the transfer at any time and restart it
later, imapsync works well with bad connections. imapsync is CPU hungry
so nice and renice commands can be a good help. imapsync can be memory
hungry too, especially with large messages.
later, imapsync works well with bad connections.
You can decide to delete the messages from the source mailbox after a
successful transfer (it is a good feature when migrating). In that case,
@ -125,6 +123,11 @@ DESCRIPTION
You can also just synchronize a mailbox A from another mailbox B in case
you just want to keep a "live" copy of B in A (--delete2 may help)
imapsync is not adequate for maintaining two active imap accounts in
synchronization where the user plays independently on both sides. Use
offlineimap (written by John Goerzen) or mbsync (written by Michael R.
Elkins) for 2 ways synchronizations.
OPTIONS
To get a description of each option just invoke:
@ -423,25 +426,22 @@ Links
SIMILAR SOFTWARES
imap_tools : http://www.athensfbc.com/imap_tools
offlineimap : http://software.complete.org/offlineimap
offlineimap : https://github.com/nicolas33/offlineimap
mbsync : http://isync.sourceforge.net/
mailsync : http://mailsync.sourceforge.net/
imapxfer : http://www.washington.edu/imap/
part of the imap-utils from UW.
mailutil : replace imapxfer in
part of the imap-utils from UW.
http://www.gsp.com/cgi-bin/man.cgi?topic=mailutil
mailutil : http://www.washington.edu/imap/
part of the UW IMAP tookit.
imaprepl : http://www.bl0rg.net/software/
http://freshmeat.net/projects/imap-repl/
imap_migrate : http://freshmeat.net/projects/imapmigration/
http://freecode.com/projects/imap-repl/
imapcopy : http://home.arcor.de/armin.diehl/imapcopy/imapcopy.html
migrationtool : http://sourceforge.net/projects/migrationtool/
imapmigrate : http://sourceforge.net/projects/cyrus-utils/
wonko_imapsync: http://wonko.com/article/554
see also tools/wonko_ruby_imapsync
isync : http://isync.sourceforge.net/
see also file W/tools/wonko_ruby_imapsync
exchange-away : http://exchange-away.sourceforge.net/
pop2imap : http://www.linux-france.org/prj/pop2imap/
Feedback (good or bad) will often be welcome.
$Id: imapsync,v 1.468 2011/11/18 01:23:37 gilles Exp gilles $
$Id: imapsync,v 1.476 2011/12/10 01:33:50 gilles Exp gilles $

3
TIME
View file

@ -1,3 +1,6 @@
180 Release 1.476 --addheader
15 Added start and end dates in the final statistics.
210 Added statistics on ks and lfo, % Operating systems, ip per year .Updated index.shtml
210 Added --nocacheaftercopy and played with dbmail (uids generation are +=2!)
120 Statistics statistics_VERSION_synthesis

48
TODO
View file

@ -1,16 +1,12 @@
#!/bin/cat
# $Id: TODO,v 1.104 2011/11/17 15:45:57 gilles Exp gilles $
# $Id: TODO,v 1.108 2011/12/07 23:59:32 gilles Exp gilles $
TODO file for imapsync
----------------------
Post on newsgroup comp.mail.imap when a new release comes.
http://groups.google.fr/group/comp.mail.imap
Post on imapsync mailing-list when a new release comes.
Start a wiki for imapsync.
Write a tutorial.
Add a best practice migration tips document.
Write a Mail::imapsync package and use it.
@ -22,15 +18,34 @@ http://www.linux-france.org/prj/imapsync_list/msg00307.html
Evaluate
http://www.rackspace.com/apps/email_hosting/migrations
http://www.yippiemove.com/
http://www.migrationwiz.com/
Consider /var/tmp/ instead of /tmp (/tmp is destoyed
on some Unix at reboot)
Add a FAQ entry about long path over than 260 character on Win32.
Fix long path over than 260 character on Win32.
Think about Digest::SHA or Digest::SHA::PurePerl.
Try to use imapsync with cygwin.
Change default --useheader 'Message-ID' --useheader Date to
--useheader 'Message-ID' --useheader 'Received'
because Exchange changes Date header! (but not Received:)
Add an option to solve syncing Sent folder when no good header
are available:
http://www.linux-france.org/prj/imapsync_list/msg01151.html
http://www.linux-france.org/prj/imapsync_list/msg01158.html
Check message exists before fetching it (could have been deleted recently)
Find a way to avoid passwords in --debugimap unless needed.
Explain that users can win time/bandwidth by using --expunge
Fix long path over than 256 character on Win32.
Think about Digest::SHA or Digest::SHA::PurePerl.
Fix "\Forwarded" flag bug in courier.
Does \lalala can be forbidden (courier does a
"16 NO Error in IMAP command received by server"
@ -152,6 +167,21 @@ http://asg.web.cmu.edu/cyrus/download/imapd/altnamespace.html
===========================================================================
DONE. Add a script to install automaticaly all needed Perl modules
if needed. Not a script but command lines in INSTALL file.
DONE. Post on imapsync mailing-list when a new release comes.
No since I no longer distribute it gratis, imapsync detects
itself a new release and buyers are informed by a specific
list. I know some packagers (FreeBSD) use the Changelog file
to detect an update.
DONE. Subscribe users to imapsync_update mailing-list automatically after the payment.
(done in paypal_send)
DONE. NO became porn! Post on newsgroup comp.mail.imap when a new release comes.
http://groups.google.fr/group/comp.mail.imap
DONE. The --search option allows this (and many other things)
Add option --exclude_messages_with_flag

View file

@ -1 +1 @@
1.468
1.476

View file

@ -1 +1 @@
1.468
1.476

View file

@ -1,6 +1,6 @@
#!/usr/bin/perl
# $Id: paypal_bilan,v 1.37 2011/09/17 22:54:31 gilles Exp gilles $
# $Id: paypal_bilan,v 1.39 2011/11/30 07:59:11 gilles Exp gilles $
use strict;
use warnings;
@ -453,7 +453,7 @@ sub compute_line {
my $IND_flag = '' ;
$IND_flag = ' IND' if ('imapsync usage' eq $Nom_Option_1 and 'individual' eq $Valeur_Option_1 ) ;
print "FE $invoice$FR_flag$IND_flag\n" ;
print "Facture $invoice imapsync$FR_flag $Nom\n" ;
print "FE $invoice$FR_flag$IND_flag imapsync $Nom\n" ;
printf( "%.2f [EUR %.2f]\n", $Montant, $MontantEUR ) ;
}
}

View file

@ -1,6 +1,8 @@
#!/bin/sh
# usage: sh paypal_build_invoices /g/var/paypal_invoices/???
# $Id: paypal_build_invoices,v 1.22 2011/12/02 04:08:46 gilles Exp gilles $
# usage: sh paypal_build_invoices /g/var/paypal_invoices/????
lyx -e latex /home/gilles/public_html/AGIL/factures/000/facture_imapsync-000.lyx
cp /home/gilles/public_html/AGIL/factures/000/facture_imapsync-000.tex /g/var/paypal_invoices/
@ -19,11 +21,19 @@ set -x
#/g/public_html/imapsync/W/paypal_reply/paypal_bilan --write_invoices --first_in 999 /g/paypal/paypal_2011_09_complet.csv
#/g/public_html/imapsync/W/paypal_reply/paypal_bilan --write_invoices --first_in 1094 /g/paypal/paypal_2011_10_complet.csv
/g/public_html/imapsync/W/paypal_reply/paypal_bilan --write_invoices --first_in 1185 /g/paypal/paypal_2011_11_complet.csv
/g/public_html/imapsync/W/paypal_reply/paypal_bilan --write_invoices --first_in 1263 /g/paypal/paypal_2011_12_complet.csv
: /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 294 --usdeur 1.3385 /g/paypal/paypal_2011_01_complet.csv
: /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 382 /g/paypal/paypal_2011_02_complet.csv
: /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 473 /g/paypal/paypal_2011_03_complet.csv
: /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 570 /g/paypal/paypal_2011_04_complet.csv
: /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 645 /g/paypal/paypal_2011_05_complet.csv
: /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 733 /g/paypal/paypal_2011_06_complet.csv
: /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 824 /g/paypal/paypal_2011_07_complet.csv
: /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 917 /g/paypal/paypal_2011_08_complet.csv
: /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 1094 /g/paypal/paypal_2011_10_complet.csv
: /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 1185 /g/paypal/paypal_2011_11_complet.csv
: /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 1263 /g/paypal/paypal_2011_12_complet.csv
set +x
# La totale
@ -35,6 +45,9 @@ set +x
--first_in 147 --avoid_numbers '292 293 643 644 731 732 1093' \
/g/paypal/paypal_201?_??_complet.csv
echo 'sh paypal_build_invoices /g/var/paypal_invoices/1???'
# USD de 147 à 340
# EUR de 341 à ...
@ -81,8 +94,6 @@ set +x
# 556 TVA 4,92
# 563 TVA 4,92
echo 'sh paypal_build_invoices /g/var/paypal_invoices/???'
for d in "$@"; do
echo "==== $d ===="
cd $d

View file

@ -1,6 +1,6 @@
#!/usr/bin/perl
# $Id: paypal_build_reply,v 1.16 2011/05/31 21:25:48 gilles Exp gilles $
# $Id: paypal_build_reply,v 1.17 2011/12/07 23:47:03 gilles Exp gilles $
use warnings;
use strict;
@ -99,15 +99,18 @@ while(<>) {
my $address = 'gilles.lamiral@laposte.net';
my $address2 = 'gilles@lamiral.info';
my $rcstag = '$Id: paypal_build_reply,v 1.16 2011/05/31 21:25:48 gilles Exp gilles $';
my $rcstag = '$Id: paypal_build_reply,v 1.17 2011/12/07 23:47:03 gilles Exp gilles $';
my $download_info = "You will find the latest imapsync.exe binary (release $release_exe)
and the latest imapsync source code (release $release) at the following link:
$url" ;
my $next_releases ="Next imapsync releases will be available for one year without extra payment.
Just keep this message and ask for the new links.
(I will build an automatic subscription tool soon)" ;
my $next_releases =
"Next imapsync releases will be available to you for one year without extra payment.
You'll be subscribed to a newsletter [imapsync_update] announcing new releases.
Just keep this message and ask for the new links in case you miss the newsletter.
Run imapsync without any argument to know if a new release is available." ;
my $thanks_software = "I thank you for buying and using imapsync,
I wish you successful transfers!" ;

View file

@ -1,6 +1,6 @@
#!/bin/sh
# $Id: paypal_functions,v 1.17 2011/05/31 21:26:24 gilles Exp gilles $
# $Id: paypal_functions,v 1.18 2011/12/02 01:56:55 gilles Exp gilles $
paypal_prerequisites() {
perl -mMIME::Lite -e '' || echo 'sudo aptitude install libmime-lite-perl'
@ -154,7 +154,7 @@ send_reply() {
debug_mode && echo "paypal_send $f"
test -f "$d_sent/$b" && continue
mkdir -p "$d_sent"
test X"--send" = X"$1" && paypal_send --send "$f" && touch "$d_sent/$b"
test X"--send" = X"$1" && paypal_send --send --subscribe "$f" && touch "$d_sent/$b"
#test X"--send" = X"$1" && touch "$d_sent/$b"
test X"" = X"$1" && paypal_send "$f"
done

View file

@ -1,6 +1,6 @@
#!/usr/bin/perl
# $Id: paypal_send,v 1.3 2010/12/29 23:50:24 gilles Exp gilles $
# $Id: paypal_send,v 1.7 2011/12/02 02:36:28 gilles Exp gilles $
use strict;
use warnings;
@ -11,6 +11,7 @@ my (
$help,
$debug,
$send,
$subscribe,
);
my $numopt = scalar(@ARGV);
@ -18,6 +19,7 @@ my $opt_ret = GetOptions(
"help" => \$help,
"debug!" => \$debug,
"send!" => \$send,
"subscribe!" => \$subscribe,
);
usage() and exit if ($help or ! $numopt or ! $opt_ret) ;
@ -46,10 +48,18 @@ $message->build(%header);
$message->build(Data => $data);
$message->print(\*STDOUT);
my $dest = $header{ 'To:' } ;
if ($send) {
$message->send;
print "Sent to ", $header{'To:'},"\n";
if ( $send ) {
$message->send ;
print "\nSent to $dest\n" ;
}
if ( $subscribe ) {
print "\necho '$dest' | add_members --regular-members-file=- --welcome-msg=y imapsync_update\n" ;
my $out = `echo '$dest' | sudo add_members --regular-members-file=- --welcome-msg=y imapsync_update` ;
print $out ;
print "Subscribed $dest\n" ;
}

103
imapsync
View file

@ -17,10 +17,10 @@
imapsync - IMAP synchronisation, sync, copy or migration tool.
Synchronise mailboxes between two imap servers.
Good at IMAP migration. More than 36 different IMAP server softwares
Good at IMAP migration. More than 44 different IMAP server softwares
supported with success.
$Revision: 1.468 $
$Revision: 1.476 $
=head1 SYNOPSIS
@ -140,9 +140,7 @@ and the transfer is done only once. All flags are
preserved, unread will stay unread, read will stay read,
deleted will stay deleted. You can stop the transfer at any
time and restart it later, imapsync works well with bad
connections. imapsync is CPU hungry so nice and renice
commands can be a good help. imapsync can be memory hungry too,
especially with large messages.
connections.
You can decide to delete the messages from the source mailbox
after a successful transfer (it is a good feature when migrating).
@ -156,6 +154,12 @@ You can also just synchronize a mailbox A from another mailbox B
in case you just want to keep a "live" copy of B in A (--delete2
may help)
imapsync is not adequate for maintaining two active imap accounts
in synchronization where the user plays independently on both sides.
Use offlineimap (written by John Goerzen) or mbsync (written by
Michael R. Elkins) for 2 ways synchronizations.
=head1 OPTIONS
To get a description of each option just invoke:
@ -496,28 +500,25 @@ Entries for imapsync:
=head1 SIMILAR SOFTWARES
imap_tools : http://www.athensfbc.com/imap_tools
offlineimap : http://software.complete.org/offlineimap
offlineimap : https://github.com/nicolas33/offlineimap
mbsync : http://isync.sourceforge.net/
mailsync : http://mailsync.sourceforge.net/
imapxfer : http://www.washington.edu/imap/
part of the imap-utils from UW.
mailutil : replace imapxfer in
part of the imap-utils from UW.
http://www.gsp.com/cgi-bin/man.cgi?topic=mailutil
mailutil : http://www.washington.edu/imap/
part of the UW IMAP tookit.
imaprepl : http://www.bl0rg.net/software/
http://freshmeat.net/projects/imap-repl/
imap_migrate : http://freshmeat.net/projects/imapmigration/
http://freecode.com/projects/imap-repl/
imapcopy : http://home.arcor.de/armin.diehl/imapcopy/imapcopy.html
migrationtool : http://sourceforge.net/projects/migrationtool/
imapmigrate : http://sourceforge.net/projects/cyrus-utils/
wonko_imapsync: http://wonko.com/article/554
see also tools/wonko_ruby_imapsync
isync : http://isync.sourceforge.net/
see also file W/tools/wonko_ruby_imapsync
exchange-away : http://exchange-away.sourceforge.net/
pop2imap : http://www.linux-france.org/prj/pop2imap/
Feedback (good or bad) will often be welcome.
$Id: imapsync,v 1.468 2011/11/18 01:23:37 gilles Exp gilles $
$Id: imapsync,v 1.476 2011/12/10 01:33:50 gilles Exp gilles $
=cut
@ -571,7 +572,7 @@ my(
@folder, @include, @exclude, @folderrec,
$prefix1, $prefix2,
@regextrans2, @regexmess, @regexflag,
$flagsCase,
$flagsCase, $filterflags,
$sep1, $sep2,
$syncinternaldates,
$idatefromheader,
@ -625,13 +626,14 @@ my(
$delete2folders, $delete2foldersonly, $delete2foldersbutnot,
$usecache, $debugcache, $cacheaftercopy,
$wholeheaderifneeded, %h1_msgs_copy_by_uid, $useuid, $h2_uidguess,
$addheader,
);
# main program
# global variables initialisation
$rcs = '$Id: imapsync,v 1.468 2011/11/18 01:23:37 gilles Exp gilles $ ';
$rcs = '$Id: imapsync,v 1.476 2011/12/10 01:33:50 gilles Exp gilles $ ';
$total_bytes_transferred = 0;
$total_bytes_skipped = 0;
@ -695,6 +697,9 @@ $wholeheaderifneeded = defined( $wholeheaderifneeded ) ? $wholeheaderifneeded
# turn on RFC standard flags correction like \SEEN -> \Seen
$flagsCase = defined( $flagsCase ) ? $flagsCase : 1 ;
# Use PERMANENTFLAGS if available
$filterflags = defined( $filterflags ) ? $filterflags : 1 ;
# turn on relogin 5 by default
$relogin1 = defined( $relogin1 ) ? $relogin1 : 5 ;
$relogin2 = defined( $relogin2 ) ? $relogin2 : 5 ;
@ -723,8 +728,8 @@ check_lib_version() or
exit_clean(0) if ($justbanner);
# By default, 1000 at a time, not more.
$split1 ||= 1000;
$split2 ||= 1000;
$split1 ||= 500;
$split2 ||= 500;
$host1 || missing_option("--host1") ;
$port1 ||= (defined $ssl1 and !defined $tls1) ? 993 : 143;
@ -848,7 +853,7 @@ $fastio2 = (defined($fastio2)) ? $fastio2 : 0;
$reconnectretry1 = (defined($reconnectretry1)) ? $reconnectretry1 : 3;
$reconnectretry2 = (defined($reconnectretry2)) ? $reconnectretry2 : 3;
@useheader = ( "Message-Id", "Message-ID", "Date" ) unless ( @useheader ) ;
@useheader = ( "Message-Id", "Message-ID", "Received" ) unless ( @useheader ) ;
my %useheader ;
@ -1188,7 +1193,7 @@ FOLDER: foreach my $h1_fold (@h1_folders_wanted) {
$debug and print "Host1 getting flags idate and sizes of folder [$h1_fold] took ", timenext(), " s\n";
unless ($h1_fir_ref) {
print
"Host1 folder $h1_fold: Could not fetch_hash_2 ",
"Host1 folder $h1_fold: Could not fetch_hash ",
scalar(@h1_msgs), " msgs: ", $imap1->LastError, "\n";
$nb_errors++;
next FOLDER;
@ -1223,7 +1228,7 @@ FOLDER: foreach my $h1_fold (@h1_folders_wanted) {
$debug and print "Host2 parsing headers of folder [$h2_fold] took ", timenext(), " s\n" ;
$debug and print "Host2 getting flags idate and sizes of folder [$h2_fold]\n" ;
@$h2_fir_ref{@h2_msgs} = ( ); # fetch_hash_2 can select by uid with last arg as ref
@$h2_fir_ref{@h2_msgs} = ( ); # fetch_hash can select by uid with last arg as ref
$h2_fir_ref = $imap2->fetch_hash("FLAGS", "INTERNALDATE", "RFC822.SIZE", $h2_fir_ref)
if (@h2_msgs);
$debug and print "Host2 getting flags idate and sizes of folder [$h2_fold] took ", timenext(), " s\n" ;
@ -1407,11 +1412,14 @@ sub sync_flags {
my $h1_flags = $h1_fir_ref->{ $h1_msg }->{ "FLAGS" } || '' ;
my $h2_flags = $h2_fir_ref->{ $h2_msg }->{ "FLAGS" } || '' ;
( $debug or $debugflags ) and
print "init msg h1 $h1_fold/$h1_msg flags( $h1_flags ) h2 $h2_fold/$h2_msg flags( $h2_flags )\n" ;
# RFC 2060: This flag can not be altered by any client
$h1_flags =~ s@\\Recent\s?@@gi ;
$h1_flags = flags_regex( $h1_flags ) if @regexflag;
$h1_flags = flagsCase( $h1_flags ) if $flagsCase ;
$h1_flags = flags_filter( $h1_flags, $permanentflags2) if ( $permanentflags2 ) ;
$h1_flags = flags_filter( $h1_flags, $permanentflags2) if ( $permanentflags2 and $filterflags ) ;
# compare flags - set flags if there a difference
my @h1_flags = sort split(' ', $h1_flags );
@ -1419,7 +1427,7 @@ sub sync_flags {
my $diff = compare_lists( \@h1_flags, \@h2_flags );
#$diff = 1 ;
$debugflags and print "msg h1 $h1_fold/$h1_msg flags( $h1_flags ) h2 $h2_fold/$h2_msg flags( $h2_flags )\n" ;
( $debug or $debugflags ) and print "filt msg h1 $h1_fold/$h1_msg flags( $h1_flags ) h2 $h2_fold/$h2_msg flags( $h2_flags )\n" ;
$diff and ( $debug or $debugflags )
and print "msg $h2_fold/$h2_msg replacing h2 flags( $h2_flags ) with h1 flags( $h1_flags )\n";
# This sets flags so flags can be removed with this
@ -1837,8 +1845,8 @@ sub banner_imapsync {
my @argv_copy = @_;
my $banner_imapsync = join("",
'$RCSfile: imapsync,v $ ',
'$Revision: 1.468 $ ',
'$Date: 2011/11/18 01:23:37 $ ',
'$Revision: 1.476 $ ',
'$Date: 2011/12/10 01:33:50 $ ',
"\n",localhost_info(), "\n",
"Command line used:\n",
"$0 ", command_line_nopassword(@argv_copy), "\n",
@ -2289,7 +2297,7 @@ sub foldersizes {
printf ( "Nb messages: %11s\n", $total_nb ) ;
printf ( "Total size: %11s bytes\n", $total_size ) ;
printf ( "Biggest message: %11s bytes\n", $biggest ) ;
printf ( "Time: %11s secondes\n", timenext( ) ) ;
printf ( "Time: %11s seconds\n", timenext( ) ) ;
}
sub timenext {
@ -2693,6 +2701,11 @@ sub copy_message {
$debug and print "header date from host1: [$h1_date] (fixed)\n";
}
if ( $addheader and defined $h1_fir_ref->{$h1_msg}->{"NO_HEADER"} ) {
my $header = add_header( $h1_msg ) ;
$debug and print "msg $h1_fold/$h1_msg adding custom header [$header]\n" ;
$string = $header . "\r\n" . $string ;
}
# RFC 2060: This flag can not be altered by any client
$h1_flags =~ s@\\Recent\s?@@gi;
$h1_flags = flags_regex($h1_flags) if @regexflag;
@ -3260,6 +3273,9 @@ sub stats {
$timeend = time();
$timediff = $timeend - $timestart;
my $timestart_str = localtime( $timestart ) ;
my $timeend_str = localtime( $timeend ) ;
my $memory_consumption = memory_consumption();
my $memory_ratio = ($max_msg_size_in_bytes) ?
sprintf('%.1f', $memory_consumption / $max_msg_size_in_bytes) : "NA";
@ -3268,6 +3284,8 @@ sub stats {
my $host2_reconnect_count = $imap2->Reconnect_counter() || 0;
print "++++ Statistics\n";
print "Transfer started on : $timestart_str\n";
print "Transfer ended on : $timeend_str\n";
print "Transfer time : $timediff sec\n";
print "Messages transferred : $nb_msg_transferred ";
print "(could be $nb_msg_skipped_dry_mode without dry mode)" if ($dry);
@ -3355,6 +3373,7 @@ sub get_options {
"regextrans2=s" => \@regextrans2,
"regexmess=s" => \@regexmess,
"regexflag=s" => \@regexflag,
"filterflags!" => \$filterflags,
"flagsCase!" => \$flagsCase,
"delete!" => \$delete,
"delete2!" => \$delete2,
@ -3424,6 +3443,7 @@ sub get_options {
"cacheaftercopy!" => \$cacheaftercopy,
"debugcache!" => \$debugcache,
"useuid!" => \$useuid,
"addheader!" => \$addheader,
);
$debug and print "get options: [$opt_ret]\n";
@ -3518,6 +3538,13 @@ sub parse_header_msg {
}
}
if ( ( ! $headstr) and ( $addheader ) and ( $s eq "Host1" )){
my $header = add_header( $m_uid ) ;
print "Host1 uid $m_uid no header found so adding our own [$header]\n";
$headstr .= uc( $header ) ;
$s_fir->{$m_uid}->{"NO_HEADER"} = 1;
}
return() if ( ! $headstr );
my $size = $s_fir->{$m_uid}->{"RFC822.SIZE"};
@ -3606,7 +3633,7 @@ sub check_last_release {
}
sub imapsync_version {
my $rcs = '$Id: imapsync,v 1.468 2011/11/18 01:23:37 gilles Exp gilles $ ';
my $rcs = '$Id: imapsync,v 1.476 2011/12/10 01:33:50 gilles Exp gilles $ ';
$rcs =~ m/,v (\d+\.\d+)/;
my $VERSION = ($1) ? $1: "UNKNOWN";
return($VERSION);
@ -3896,7 +3923,7 @@ sub usage_complete {
--reconnectretry2 <int>: same as --reconnectretry1 but for host2
--split1 <int> : split the requests in several parts on host1.
<int> is the number of messages handled per request.
default is like --split1 1000.
default is like --split1 500.
--split2 <int> : same thing on host2.
--timeout <int> : imap connect timeout.
@ -4382,12 +4409,24 @@ sub tests_epoch {
ok( '1282658400' eq epoch( '24-Aug-2010 14:01:00 +0001' ), 'epoch 24-Aug-2010 14:01:00 +0001 -> 1282658400' ) ;
}
sub add_header {
my $uid = shift || 'mistake' ;
my $header = 'Message-Id: <' . $uid . '@imapsync>' ;
return( $header ) ;
}
sub tests_add_header {
ok( 'Message-Id: <mistake@imapsync>' eq add_header(), 'add_header no arg' ) ;
ok( 'Message-Id: <123456789@imapsync>' eq add_header(123456789), 'add_header 123456789' ) ;
}
sub tests_debug {
SKIP: {
skip "No test in normal run" if ( not $tests_debug );
tests_good_date();
tests_epoch( ) ;
tests_add_header( ) ;
}
}

View file

@ -5,7 +5,7 @@
<title>Imapsync: an IMAP migration tool ( release <!--#exec cmd="cat VERSION"--> )</title>
<meta name="generator" content="Bluefish 1.0.7"/>
<meta name="author" content="Gilles LAMIRAL"/>
<meta name="date" content="2011-11-18T17:10:31+0100"/>
<meta name="date" content="2011-11-24T10:37:23+0100"/>
<meta name="copyright" content="None"/>
<meta name="keywords" content="imap, transfert, migration"/>
<meta name="description" content="imap migration tool"/>
@ -31,7 +31,7 @@
<ul class="none">
<li>Buy <a href="#buy_source"><b>imapsync source code</b></a> (any OS)</li>
<li>Buy <a href="#buy_exe"><b>standalone win32</b></a> <b>imapsync.exe</b> (also <b>works on win64</b>)</li>
<li>Buy <a href="#buy_support">imapsync <b>support</b></a> to succeed your migration</li>
<li>Buy professional <a href="#buy_support">imapsync <b>support</b></a> to succeed your migration</li>
<li>Are your <a href="#imap_server_success">imap servers <b>supported</b></a> by imapsync?</li>
</ul>
@ -44,23 +44,27 @@
<h2>What is imapsync?</h2>
<p><b>imapsync</b> software is a command line tool allowing incremental and
recursive <b>imap</b> transfers from one mailbox to another, both anywhere on the internet
or in your local network.
recursive <b>IMAP</b> transfers from one mailbox to another, both anywhere on the internet
or in your local network. Incremental means you can stop the transfer at any time
and restart it later efficiently. Recursive means all folders hierarchy can be copied.
</p>
<p><b>imapsync</b> is useful for imap account <b>migration</b> or imap account <b>backup</b>.
</p>
<p><b>imapsync</b> is <b>not adequate</b> for maintaining two active imap accounts in synchronization
where the user plays independently on both sides. Use <b>offlineimap</b>
(written by John Goerzen) for this purpose.
<p><b>imapsync</b> is <b>not adequate</b> for maintaining two active imap accounts
in synchronization where the user plays independently on both sides.
Use <a href="https://github.com/nicolas33/offlineimap"><b>offlineimap</b></a> (written by John Goerzen)
or <a href="http://isync.sourceforge.net/"><b>mbsync</b></a> (written by Michael R. Elkins)
for <b>2 ways synchronizations</b>.
</p>
<h2><a id="NUMBERS"></a>Some numbers for 2011</h2>
<ul>
<li>Number of <b>imapsync users</b> per month: between <b>2 and 3 thousands </b>users</li>
<li>Number of <b>imapsync transfers</b> per month: between <b>3 and 11 millions </b>transfers </li>
<li>Number of <b>imapsync transfers</b> per month: between <b>3 and 11 millions mailboxes </b>transfers </li>
<li>Pourcentage between <b>operating systems</b> users running imapsync:
<ul>
<li><b>Linux: 65 %</b></li>
@ -142,18 +146,26 @@ where the user plays independently on both sides. Use <b>offlineimap</b>
imapsync mailing-list (see below section <a href="#MAILING-LIST">Mailing-List</a>).
</p>
<h2><a id="buy_source"></a>Buy imapsync source code</h2>
<p>
The Perl <b>imapsync</b> source code will run anywhere a <b>Perl interpreter can run</b>: any Unix, Linux, Windows, or Mac OS operating system.
</p>
<h2><a id="buy_source"></a>Buy imapsync source code</h2>
<p>Buy <b>latest</b> imapsync Perl <b>source code</b> for <b>30 EUR</b>
</p>
<p>
<b>+ One year</b> of imapsync <b>updates</b> without extra payment.<br/>
<b>+ 30 days money-back guarantee!</b><br/>
<b>+ A little support</b>.
</p>
<p>
30 EUR is equal to around <b>45 USD</b>, no problem to pay in USD (or any currency) with paypal:
</p>
<p>
The Perl <b>imapsync</b> source code will run anywhere a <b>Perl interpreter can run</b>: any Unix, Linux, Windows, or Mac OS operating system.
</p>
<form action="https://www.paypal.com/cgi-bin/webscr" method="post">
<p>
@ -170,14 +182,14 @@ name="submit" alt="PayPal - The safer, easier way to pay online!"/>
</p>
</form>
<p>You will receive a download link <b>just after</b> the payment.<br/>
<b>One year</b> of imapsync <b>updates</b> without extra payment.<br/>
<b>30 days money-back guarantee!</b></p>
<p>You will receive a download link <b>just after</b> the payment.
</p>
<h2><a id="buy_support"></a>Buy professional support for imapsync</h2>
<p>You will be able to expose your issues by email or phone and to converse until your issues are solved.
</p>
<p>For <b>180 EUR</b> buy imapsync <b>support</b> by the developper who wrote and maintains imapsync.
</p>
<p>
@ -197,14 +209,22 @@ name="submit" alt="PayPal - The safer, easier way to pay online!"/>
</p>
</form>
<p>Then you will be able to expose your issues by email or phone and to converse until your issues are solved.
</p>
<h2><a id="buy_exe"></a>Buy standalone imapsync.exe for win32</h2>
<p>Struggle free from source code and Perl installation by<br/>
buying the latest win32 <b>standalone imapsync.exe</b> for <b>30 EUR</b>
</p>
<p>
<b>+ One year</b> of imapsync <b>updates</b> without extra payment.<br/>
<b>+ 30 days money-back guarantee!</b><br/>
<b>+ A little support</b>.
</p>
<p>
30 EUR is equal to around <b>45 USD</b>, no problem to pay in USD (or any currency) with paypal:
</p>
@ -225,8 +245,7 @@ name="submit" alt="PayPal - The safer, easier way to pay online!"/>
</form>
<p>You will receive a download link <b>just after</b> the payment.<br/>
<b>One year</b> of imapsync <b>updates</b> without extra payment.<br/>
<b>30 days money-back guarantee!</b></p>
</p>
<!--
@ -308,42 +327,17 @@ See also the <a href="#WANTED">wanted</a> section.
<h2><a id="WANTED"></a>WANTED!</h2>
<p>I code new features and fix bugs for free when I have time and when I find it useful.<br/>
If you really want a feature or a fix you can donate money and my next development time
will be to code it or fix it.<br/>
<p>I fix bugs as soon as possible and I code new features when I find them useful.<br/>
Don't hesitate to ask for them.
</p>
<p>On april 2011: <b>1 EUR ~ 1.48 USD</b>.</p>
<form action="https://www.paypal.com/cgi-bin/webscr" method="post">
<p>
<input type="hidden" name="cmd" value="_s-xclick"/>
<input type="hidden" name="encrypted" value="-----BEGIN PKCS7-----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-----END PKCS7-----
"/>
<input type="image" src="https://www.paypal.com/en_US/i/btn/btn_donateCC_LG.gif" name="submit" alt="PayPal - The safer, easier way to pay online!"/>
<img alt="" src="https://www.paypal.com/fr_FR/i/scr/pixel.gif" width="1" height="1"/>
</p>
</form>
<p>Some features and their time/money to be done evaluation:</p>
<p>Some features and their time to be done evaluation:</p>
<table cellpadding="10" cellspacing="0" border="1">
<tr align="right"><th>DONE</th><th>Feature </th><th>Time guessed</th><th>Time spent</th><th>Money received</th><th>Money still needed</th></tr>
<tr align="right"><td> <b>No</b></td><td>Backup to files </td><td>20 hours </td><td> 60 min </td><td> 0 $ </td><td>800 $ </td></tr>
<tr align="right"><td> <b>No</b></td><td>Efficient Gmail backup </td><td>20 hours </td><td> 80 min </td><td> 0 $ </td><td>800 $ </td></tr>
<tr align="right"><td> <b>No</b></td><td>Better error reporting </td><td> 5 hours </td><td> 0 min </td><td> 0 $ </td><td>200 $ </td></tr>
<tr align="right"><td> Yes</td><td>Add cache </td><td>10 hours </td><td>1310 min </td><td>400 $ </td><td> 0 $ </td></tr>
<tr align="right"><td> Yes</td><td>Speedup 50% </td><td>10 hours </td><td> 80 min </td><td> 10 $ </td><td> 0 $ </td></tr>
<tr align="right"><td> Yes</td><td>--delete2folders </td><td> 3 hours </td><td> 270 min </td><td> 90 $ </td><td> 0 $ </td></tr>
<tr align="right"><td> Yes</td><td>NTLM auth </td><td> 3 hours </td><td> 300 min </td><td> 15 $ </td><td> 0 $ </td></tr>
<tr align="right"><td> Yes</td><td>Win32 imapsync.exe </td><td> 8 hours </td><td> 520 min </td><td> 45 $ </td><td> 0 $ </td></tr>
<tr align="right"><td> Yes</td><td>Win32 bug fixes </td><td> various </td><td> 370 min </td><td>100 $ </td><td> 0 $ </td></tr>
<tr align="right"><td> Yes</td><td>Fix capability changes </td><td> 1 hour </td><td> 80 min </td><td> 0 $ </td><td> 0 $ </td></tr>
<tr align="right"><td> Yes</td><td>Large mailbox --maxage </td><td> 4 hours </td><td> 270 min </td><td> 0 $ </td><td> 0 $ </td></tr>
<tr align="right"><td> Yes</td><td>dkimap support </td><td> 3 hours </td><td> 120 min </td><td> 0 $ </td><td> 0 $ </td></tr>
<tr align="right"><th>DONE</th><th>Feature </th><th>Time guessed</th><th>Time spent</th></tr>
<tr align="right"><td> <b>No</b></td><td>Backup to files </td><td>20 hours </td><td> 60 min </td></tr>
<tr align="right"><td> <b>No</b></td><td>Efficient Gmail backup </td><td>20 hours </td><td> 80 min </td></tr>
<tr align="right"><td> <b>No</b></td><td>Better error reporting </td><td> 5 hours </td><td> 0 min </td></tr>
</table>
<h2><a id="imap_server_success"></a>Lists of imap server software failures and success stories</h2>
@ -434,6 +428,35 @@ Don't hesitate to have a try, I will help you and make efforts to switch them to
Zimbra 5.0.24_GA_3356.RHEL4 [host1], 5.5, 6.x</li>
</ul>
<h2>Similar softwares</h2>
<ul>
<li> imap_tools: <a href="http://www.athensfbc.com/imap_tools">http://www.athensfbc.com/imap_tools</a></li>
<li> <b>offlineimap</b>: <a href="https://github.com/nicolas33/offlineimap">https://github.com/nicolas33/offlineimap</a></li>
<li> <b>mbsync</b>: <a href="http://isync.sourceforge.net/">http://isync.sourceforge.net/</a></li>
<li> mailsync: <a href="http://mailsync.sourceforge.net/">http://mailsync.sourceforge.net/</a></li>
<li> mailutil: <a href="http://www.washington.edu/imap/">http://www.washington.edu/imap/</a>
part of the UW IMAP tookit.</li>
<li> imaprepl: <a href="http://www.bl0rg.net/software/">http://www.bl0rg.net/software/</a>
<a href="http://freecode.com/projects/imap-repl/">http://freecode.com/projects/imap-repl/</a></li>
<li> imapcopy: <a href="http://home.arcor.de/armin.diehl/imapcopy/imapcopy.html">http://home.arcor.de/armin.diehl/imapcopy/imapcopy.html</a></li>
<li> migrationtool: <a href="http://sourceforge.net/projects/migrationtool/">http://sourceforge.net/projects/migrationtool/</a></li>
<li> imapmigrate: <a href="http://sourceforge.net/projects/cyrus-utils/">http://sourceforge.net/projects/cyrus-utils/</a></li>
<li> wonko_imapsync: <a href="http://wonko.com/article/554">http://wonko.com/article/554</a></li>
<li> pop2imap: <a href="http://www.linux-france.org/prj/pop2imap/">http://www.linux-france.org/prj/pop2imap/</a></li>
<li> exchange-away: <a href="http://exchange-away.sourceforge.net/">http://exchange-away.sourceforge.net/</a></li>
</ul>
<h2>Online IMAP migration services</h2>
<ul>
<li> ovh imapcopy (French) 0 USD: <a href="https://ssl0.ovh.net/fr/imapcopy/">https://ssl0.ovh.net/fr/imapcopy/</a></li>
<li> yippiemove 15 USD: <a href="http://www.yippiemove.com">http://www.yippiemove.com/</a></li>
<li> migrationwiz 10 USD: <a href="http://www.migrationwiz.com/">http://www.migrationwiz.com/</a></li>
<li> rackspace migration 10 USD: <a href="http://www.rackspace.com/apps/email_hosting/migrations/">http://www.rackspace.com/apps/email_hosting/migrations/</a></li>
</ul>
<hr/>
<p>
<a href="http://validator.w3.org/check?uri=referer">
@ -460,7 +483,7 @@ alt="Viewable With Any Browser" />
<!--#config timefmt="%D" -->
<!--#config timefmt="%A %B %d, %Y" -->
<b>This document last modified on <!--#echo var="LAST_MODIFIED" --></b>
($Id: index.shtml,v 1.97 2011/11/18 16:11:33 gilles Exp gilles $)
($Id: index.shtml,v 1.99 2011/11/24 09:38:35 gilles Exp gilles $)
</p>
</body>

1226
learn/zzz

File diff suppressed because it is too large Load diff

View file

@ -1,6 +1,6 @@
#!/bin/sh
# $Id: tests.sh,v 1.183 2011/11/17 22:13:27 gilles Exp gilles $
# $Id: tests.sh,v 1.186 2011/12/10 01:37:20 gilles Exp gilles $
# Example 1:
# CMD_PERL='perl -I./Mail-IMAPClient-3.25/lib' sh -x tests.sh
@ -325,7 +325,7 @@ ll_noheader() {
--passfile1 ../../var/pass/secret.tata \
--host2 $HOST2 --user2 titi \
--passfile2 ../../var/pass/secret.titi \
--folder INBOX.few_emails --useheader ''
--folder INBOX.few_emails --useheader '' --debug
}
ll_noheader_force() {
@ -339,6 +339,15 @@ ll_noheader_force() {
--skipheader 'Message-Id|Date'
}
ll_addheader() {
$CMD_PERL ./imapsync \
--host1 $HOST1 --user1 tata \
--passfile1 ../../var/pass/secret.tata \
--host2 $HOST2 --user2 titi \
--passfile2 ../../var/pass/secret.titi \
--folder INBOX.addheader --delete2 --expunge2 --addheader
}
ll_usecachemaxage() {
@ -1083,8 +1092,8 @@ ll_regextrans2_subfolder()
--justfolders \
--nofoldersize \
--folder 'INBOX.yop.yap' \
--regextrans2 's,${h1_prefix}(.*),${h2_prefix}FOO${h2_sep}$1,' --dry
--prefix1 'INBOX.yop.' \
--regextrans2 's,^${h2_prefix}(.*),${h2_prefix}FOO${h2_sep}$1,' --dry
}
@ -1162,6 +1171,20 @@ ll_useheader()
echo 'rm /home/vmail/titi/.yop.yap/cur/*'
}
ll_useheader_Received()
{
$CMD_PERL ./imapsync \
--host1 $HOST1 --user1 tata \
--passfile1 ../../var/pass/secret.tata \
--host2 $HOST2 --user2 titi \
--passfile2 ../../var/pass/secret.titi \
--folder INBOX.yop.yap \
--useheader 'Received' \
--dry --debug --fast
echo 'rm /home/vmail/titi/.yop.yap/cur/*'
}
ll_useheader_noheader()
{
$CMD_PERL ./imapsync \
@ -2258,7 +2281,13 @@ exchange_1() {
--passfile1 ../../var/pass/secret.tata \
--host2 mail.ethz.ch --ssl2 --user2 glamiral \
--passfile2 ../../var/pass/secret.ethz.ch \
--folder INBOX.oneemail --folder INBOX.few_emails --folder INBOX -maxage 1
--folder INBOX.few_emails \
--debugflags \
--useheader 'MESSAGE-ID' --delete2 --expunge2 \
--nofilterflags \
#--regexflag 's/\$\w+//g'
#-maxage 1
}
exchange_2() {
@ -2279,6 +2308,25 @@ exchange_3_delete2() {
--folder INBOX.Junk --useuid --delete2
}
exchange_4_useheader_Received() {
$CMD_PERL ./imapsync \
--host1 $HOST1 --user1 tata \
--passfile1 ../../var/pass/secret.tata \
--host2 mail.ethz.ch --ssl2 --user2 glamiral \
--passfile2 ../../var/pass/secret.ethz.ch \
--folder INBOX.yop.yap \
--delete2 --expunge2 \
--useheader 'Received'
# --useheader 'Received'
#--regexflag 's/\$\w+//g'
#-maxage 1
}
jong_1() {
$CMD_PERL ./imapsync \
--host1 mail.y-publicaties.nl --user1 gillesl --passfile1 ../../var/pass/secret.jong \