From b7c835d670d55b69e078a72bedd4aaf2f596c319 Mon Sep 17 00:00:00 2001
From: Nick Bebout
Date: Thu, 3 Dec 2015 11:16:32 -0600
Subject: [PATCH] 1.670
---
CREDITS | 10 +-
ChangeLog | 127 +-
FAQ | 423 +-
FAQ.d/FAQ.Domino.txt | 30 +-
FAQ.d/FAQ.Dovecot.txt | 4 +-
FAQ.d/FAQ.Duplicates.txt | 11 +-
FAQ.d/FAQ.Exchange.txt | 141 +-
FAQ.d/FAQ.Flags.txt | 4 +-
FAQ.d/FAQ.Folders_Mapping.txt | 38 +-
FAQ.d/FAQ.Gmail.txt | 205 +-
FAQ.d/FAQ.ISP.txt | 72 +
FAQ.d/FAQ.Massive.txt | 89 +-
FAQ.d/FAQ.Messages_selection.txt | 93 +
FAQ.d/FAQ.Oracle-UCS.txt | 15 +
FAQ.d/FAQ.Security.txt | 21 +
FAQ.d/FAQ.SmarterMail.txt | 46 +
FAQ.d/FAQ.Various_Server_Softwares.txt | 283 +
FAQ.d/FAQ.XOAUTH2.txt | 110 +
INSTALL | 15 +-
INSTALL.d/INSTALL.CPanel.txt | 3 +
INSTALL.d/INSTALL.Centos.txt | 40 +-
INSTALL.d/INSTALL.Darwin.txt | 115 +-
INSTALL.d/INSTALL.Debian.txt | 6 +
INSTALL.d/INSTALL.FreeBSD.txt | 6 +-
INSTALL.d/INSTALL.Mandriva.txt | 2 +
INSTALL.d/INSTALL.Ubuntu.txt | 2 +
LICENSE | 4 +-
Makefile | 111 +-
NOLIMIT | 4 +-
OPTIONS | 408 +-
README | 44 +-
S/external.shtml | 10 +-
S/imapservers.shtml | 10 +-
S/imapsync_sold_by_country.txt | 82 +
S/news.shtml | 112 +-
S/template.shtml | 2 +-
TODO | 30 +-
VERSION | 2 +-
VERSION_EXE | 2 +-
W/.BUILD_EXE_TIME | 34 +
W/{CONCEPTION => CONCEPTION.txt} | 0
W/LOG_imapsync/2015_10_22_15_58_28.txt | 33 +
W/Mail-IMAPClient-3.37.tar.gz | Bin 0 -> 188964 bytes
W/Mail-IMAPClient-3.37/Changes | 2291 +++
W/Mail-IMAPClient-3.37/MANIFEST | 40 +
W/Mail-IMAPClient-3.37/META.json | 56 +
W/Mail-IMAPClient-3.37/META.yml | 36 +
W/Mail-IMAPClient-3.37/Makefile.PL | 138 +
W/Mail-IMAPClient-3.37/README | 97 +
W/Mail-IMAPClient-3.37/examples/build_dist.pl | 172 +
W/Mail-IMAPClient-3.37/examples/build_ldif.pl | 235 +
W/Mail-IMAPClient-3.37/examples/cleanTest.pl | 64 +
.../examples/copy_folder.pl | 147 +
.../examples/cyrus_expire.pl | 111 +
.../examples/cyrus_expunge.pl | 85 +
.../examples/find_dup_msgs.pl | 217 +
W/Mail-IMAPClient-3.37/examples/idle.pl | 231 +
.../examples/imap_to_mbox.pl | 266 +
.../examples/imtestExample.pl | 226 +
.../examples/migrate_mail2.pl | 326 +
.../examples/migrate_mbox.pl | 131 +
.../examples/populate_mailbox.pl | 319 +
.../examples/sharedFolder.pl | 88 +
W/Mail-IMAPClient-3.37/lib/Mail/IMAPClient.pm | 3468 ++++
.../lib/Mail/IMAPClient.pod | 3981 ++++
.../lib/Mail/IMAPClient/BodyStructure.pm | 576 +
.../IMAPClient/BodyStructure/Parse.grammar | 189 +
.../Mail/IMAPClient/BodyStructure/Parse.pm | 17063 ++++++++++++++++
.../Mail/IMAPClient/BodyStructure/Parse.pod | 15 +
.../lib/Mail/IMAPClient/MessageSet.pm | 280 +
.../lib/Mail/IMAPClient/Thread.grammar | 18 +
.../lib/Mail/IMAPClient/Thread.pm | 1039 +
.../lib/Mail/IMAPClient/Thread.pod | 14 +
W/Mail-IMAPClient-3.37/prepare_dist | 43 +
W/Mail-IMAPClient-3.37/t/basic.t | 487 +
W/Mail-IMAPClient-3.37/t/body_string.t | 76 +
W/Mail-IMAPClient-3.37/t/bodystructure.t | 172 +
W/Mail-IMAPClient-3.37/t/fetch_hash.t | 317 +
W/Mail-IMAPClient-3.37/t/messageset.t | 37 +
W/Mail-IMAPClient-3.37/t/pod.t | 10 +
W/Mail-IMAPClient-3.37/t/simple.t | 36 +
W/Mail-IMAPClient-3.37/t/thread.t | 30 +
W/Mail-IMAPClient-3.37/test_template.txt | 5 +
W/OSI_request.txt | 29 +
W/{RECORD => RECORD.txt} | 0
W/{TESTING => TESTING.txt} | 0
W/{TIME => TIME.txt} | 0
W/build_exe.bat | 89 +-
W/build_mac.sh | 5 +
W/imapsync.1 | 46 +-
W/install_module_one.bat | 28 +
W/install_module_ssl.bat | 28 +
W/install_modules.bat | 23 +-
W/learn/10990.txt | 1 +
W/learn/10_99.txt | 450 +
W/learn/getoptlong | 14 +
W/learn/imap_rename_regex | 46 +
W/learn/imap_rename_regex_examples.txt | 7 +
W/learn/imap_utf7_decode | 2 -
W/learn/imap_utf7_encode | 23 +
W/learn/imapclient_quota_qq | 31 +
W/learn/imapclient_quota_qq_memo | 4 +
...t3xx_skeleton_test => imapclient_skeleton} | 8 +-
W/learn/increaseline | 9 +
W/learn/mail2world | 2 +-
W/learn/re_backslashb | 15 +
W/{livredor => livredor.txt} | 0
W/memo | 102 +-
W/paypal.shtml | 6 +-
W/paypal_reply/imapsync_sold_by_country.txt | 82 +
W/paypal_reply/memo | 29 +
W/paypal_reply/paypal_bilan | 28 +-
W/paypal_reply/paypal_bilan_1.78 | 1445 ++
W/paypal_reply/paypal_bilan_1.79 | 1445 ++
W/paypal_reply/paypal_build_invoices | 22 +-
W/perlcritic_1.out | 2646 +++
W/perlcritic_2.out | 1492 +-
W/perlcritic_3.out | 162 +-
W/perlcritic_4.out | 9 +
W/prereq.Ubuntu | 4 +-
W/prereq.scandeps | 451 +-
W/test2.bat | 63 +-
W/test3.bat | 31 +-
W/test3_boxon.bat | 54 +
W/test3_gmail.bat | 8 +-
W/test_tests.bat | 4 +-
...archive_per_month => archive_per_month.sh} | 4 +-
examples/file.txt | 17 +-
examples/sync_loop_unix.sh | 42 +-
examples/sync_loop_windows.bat | 58 +-
i3 | 4 +-
imapsync | 1892 +-
index.shtml | 28 +-
tests.sh | 339 +-
134 files changed, 44448 insertions(+), 2810 deletions(-)
mode change 100755 => 100644 FAQ.d/FAQ.Gmail.txt
create mode 100644 FAQ.d/FAQ.ISP.txt
mode change 100755 => 100644 FAQ.d/FAQ.Massive.txt
create mode 100644 FAQ.d/FAQ.Messages_selection.txt
create mode 100644 FAQ.d/FAQ.Oracle-UCS.txt
create mode 100644 FAQ.d/FAQ.Security.txt
create mode 100755 FAQ.d/FAQ.SmarterMail.txt
create mode 100644 FAQ.d/FAQ.Various_Server_Softwares.txt
create mode 100644 FAQ.d/FAQ.XOAUTH2.txt
create mode 100644 S/imapsync_sold_by_country.txt
rename W/{CONCEPTION => CONCEPTION.txt} (100%)
create mode 100644 W/LOG_imapsync/2015_10_22_15_58_28.txt
create mode 100644 W/Mail-IMAPClient-3.37.tar.gz
create mode 100644 W/Mail-IMAPClient-3.37/Changes
create mode 100644 W/Mail-IMAPClient-3.37/MANIFEST
create mode 100644 W/Mail-IMAPClient-3.37/META.json
create mode 100644 W/Mail-IMAPClient-3.37/META.yml
create mode 100644 W/Mail-IMAPClient-3.37/Makefile.PL
create mode 100644 W/Mail-IMAPClient-3.37/README
create mode 100755 W/Mail-IMAPClient-3.37/examples/build_dist.pl
create mode 100755 W/Mail-IMAPClient-3.37/examples/build_ldif.pl
create mode 100755 W/Mail-IMAPClient-3.37/examples/cleanTest.pl
create mode 100755 W/Mail-IMAPClient-3.37/examples/copy_folder.pl
create mode 100755 W/Mail-IMAPClient-3.37/examples/cyrus_expire.pl
create mode 100755 W/Mail-IMAPClient-3.37/examples/cyrus_expunge.pl
create mode 100755 W/Mail-IMAPClient-3.37/examples/find_dup_msgs.pl
create mode 100755 W/Mail-IMAPClient-3.37/examples/idle.pl
create mode 100755 W/Mail-IMAPClient-3.37/examples/imap_to_mbox.pl
create mode 100755 W/Mail-IMAPClient-3.37/examples/imtestExample.pl
create mode 100755 W/Mail-IMAPClient-3.37/examples/migrate_mail2.pl
create mode 100755 W/Mail-IMAPClient-3.37/examples/migrate_mbox.pl
create mode 100755 W/Mail-IMAPClient-3.37/examples/populate_mailbox.pl
create mode 100755 W/Mail-IMAPClient-3.37/examples/sharedFolder.pl
create mode 100644 W/Mail-IMAPClient-3.37/lib/Mail/IMAPClient.pm
create mode 100644 W/Mail-IMAPClient-3.37/lib/Mail/IMAPClient.pod
create mode 100644 W/Mail-IMAPClient-3.37/lib/Mail/IMAPClient/BodyStructure.pm
create mode 100644 W/Mail-IMAPClient-3.37/lib/Mail/IMAPClient/BodyStructure/Parse.grammar
create mode 100644 W/Mail-IMAPClient-3.37/lib/Mail/IMAPClient/BodyStructure/Parse.pm
create mode 100644 W/Mail-IMAPClient-3.37/lib/Mail/IMAPClient/BodyStructure/Parse.pod
create mode 100644 W/Mail-IMAPClient-3.37/lib/Mail/IMAPClient/MessageSet.pm
create mode 100644 W/Mail-IMAPClient-3.37/lib/Mail/IMAPClient/Thread.grammar
create mode 100644 W/Mail-IMAPClient-3.37/lib/Mail/IMAPClient/Thread.pm
create mode 100644 W/Mail-IMAPClient-3.37/lib/Mail/IMAPClient/Thread.pod
create mode 100755 W/Mail-IMAPClient-3.37/prepare_dist
create mode 100644 W/Mail-IMAPClient-3.37/t/basic.t
create mode 100644 W/Mail-IMAPClient-3.37/t/body_string.t
create mode 100644 W/Mail-IMAPClient-3.37/t/bodystructure.t
create mode 100644 W/Mail-IMAPClient-3.37/t/fetch_hash.t
create mode 100644 W/Mail-IMAPClient-3.37/t/messageset.t
create mode 100644 W/Mail-IMAPClient-3.37/t/pod.t
create mode 100644 W/Mail-IMAPClient-3.37/t/simple.t
create mode 100644 W/Mail-IMAPClient-3.37/t/thread.t
create mode 100644 W/Mail-IMAPClient-3.37/test_template.txt
create mode 100755 W/OSI_request.txt
rename W/{RECORD => RECORD.txt} (100%)
rename W/{TESTING => TESTING.txt} (100%)
rename W/{TIME => TIME.txt} (100%)
create mode 100644 W/install_module_one.bat
create mode 100644 W/install_module_ssl.bat
create mode 100644 W/learn/10990.txt
create mode 100644 W/learn/10_99.txt
create mode 100755 W/learn/getoptlong
create mode 100755 W/learn/imap_rename_regex
create mode 100644 W/learn/imap_rename_regex_examples.txt
create mode 100755 W/learn/imap_utf7_encode
create mode 100755 W/learn/imapclient_quota_qq
create mode 100755 W/learn/imapclient_quota_qq_memo
rename W/learn/{imapclient3xx_skeleton_test => imapclient_skeleton} (72%)
mode change 100755 => 100644
create mode 100755 W/learn/increaseline
create mode 100755 W/learn/re_backslashb
rename W/{livredor => livredor.txt} (100%)
create mode 100644 W/paypal_reply/imapsync_sold_by_country.txt
mode change 100644 => 100755 W/paypal_reply/memo
create mode 100755 W/paypal_reply/paypal_bilan_1.78
create mode 100755 W/paypal_reply/paypal_bilan_1.79
create mode 100644 W/perlcritic_1.out
create mode 100644 W/perlcritic_4.out
rename examples/{archive_per_month => archive_per_month.sh} (91%)
diff --git a/CREDITS b/CREDITS
index 27c89c7..e469d78 100644
--- a/CREDITS
+++ b/CREDITS
@@ -1,5 +1,5 @@
#!/bin/cat
-# $Id: CREDITS,v 1.182 2015/05/26 10:16:16 gilles Exp gilles $
+# $Id: CREDITS,v 1.184 2015/11/05 20:57:21 gilles Exp gilles $
If you want to make a donation to me, imapsync author, Gilles LAMIRAL,
use any of the following ways:
@@ -24,6 +24,14 @@ 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.
+Mike Salonia
+Contributed by using and validating the multi-archive Gmail
+destination account. See FAQ.d/FAQ.Gmail.txt
+
+Sebastian Lemke
+Contributed by moving hosts from sync_loop_unix.sh to the
+credentials file "file.txt".
+
Ingo Wichmann
Contributed by giving the book
14.95 USD "Rambles Through My Library"
diff --git a/ChangeLog b/ChangeLog
index f7d1bde..7263bf7 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,17 +1,136 @@
RCS file: RCS/imapsync,v
Working file: imapsync
-head: 1.644
+head: 1.670
branch:
locks: strict
- gilles: 1.644
+ gilles: 1.670
access list:
symbolic names:
keyword substitution: kv
-total revisions: 644; selected revisions: 644
+total revisions: 670; selected revisions: 670
description:
----------------------------
-revision 1.644 locked by: gilles;
+revision 1.670 locked by: gilles;
+date: 2015/12/03 02:36:41; author: gilles; state: Exp; lines: +11 -12
+Bugfix. logfile missed user2.
+----------------------------
+revision 1.669
+date: 2015/12/03 02:03:53; author: gilles; state: Exp; lines: +138 -83
+--logdir --logfile now compatible with old --logfile alone. tests cases.
+----------------------------
+revision 1.668
+date: 2015/12/02 13:23:22; author: gilles; state: Exp; lines: +94 -86
+Fixed some perlcritics.
+----------------------------
+revision 1.667
+date: 2015/11/30 02:44:12; author: gilles; state: Exp; lines: +156 -60
+--automap implemented.
+Added --justautomap to see what will happen with --automap and --f1f2 options.
+----------------------------
+revision 1.666
+date: 2015/11/23 14:56:56; author: gilles; state: Exp; lines: +50 -19
+Doc fix. --logfile path inline and in usage().
+Added require JSON::WebToken::Crypt::RSA and Crypt::OpenSSL::RSA to a good build on Win32.
+Tested OAUTH2 on windows. Works.
+Bug fix. Changed "Host1: checking all wanted folders exist" not efficient algorythm
+ to allow a 2.4 million folders account. Yes, some people have this...
+----------------------------
+revision 1.665
+date: 2015/11/06 00:45:35; author: gilles; state: Exp; lines: +29 -9
+Made quota wrnings, quota human usable.
+----------------------------
+revision 1.664
+date: 2015/11/04 18:09:22; author: gilles; state: Exp; lines: +362 -323
+Back to require IO::Socket::SSL;
+instead of use.
+
+Reformated the usage output.
+Added --f1f2 str1=str2 : Force folder str1 to be synced to str2.
+--f1f2 overrides any automap mapping and any regextrans2
+----------------------------
+revision 1.663
+date: 2015/10/03 23:59:27; author: gilles; state: Exp; lines: +12 -9
+Bugfix. Return with previous Debug when no quota available.
+----------------------------
+revision 1.662
+date: 2015/10/03 22:14:37; author: gilles; state: Exp; lines: +84 -24
+Added quota_extract_storage_limit_in_bytes()
+Added quota_extract_storage_current_in_bytes()
+----------------------------
+revision 1.661
+date: 2015/09/28 15:36:41; author: gilles; state: Exp; lines: +18 -19
+Better prints.
+----------------------------
+revision 1.660
+date: 2015/09/28 14:18:10; author: gilles; state: Exp; lines: +21 -15
+IMAP output as an early stage of quota and ID.
+----------------------------
+revision 1.659
+date: 2015/09/21 22:47:50; author: gilles; state: Exp; lines: +107 -29
+Better ID format sent. Order terms like in thr RFC.
+Added imapsync_id_github, in case.
+----------------------------
+revision 1.658
+date: 2015/09/19 08:56:07; author: gilles; state: Exp; lines: +8 -8
+RCS date in id.
+----------------------------
+revision 1.657
+date: 2015/09/19 08:26:04; author: gilles; state: Exp; lines: +206 -77
+Started to use global $sync-> in order to reduce number of parameters in routines.
+----------------------------
+revision 1.656
+date: 2015/09/13 16:11:07; author: gilles; state: Exp; lines: +46 -24
+Some perlcritic fixes.
+----------------------------
+revision 1.655
+date: 2015/09/11 01:57:51; author: gilles; state: Exp; lines: +15 -12
+Bugfix testing automap.
+----------------------------
+revision 1.654
+date: 2015/09/11 01:23:42; author: gilles; state: Exp; lines: +121 -76
+Added --automap to implement rfc6154. Turned on by default.
+Use --noautomap to avoid it.
+----------------------------
+revision 1.653
+date: 2015/09/05 21:35:56; author: gilles; state: Exp; lines: +27 -25
+IO::Socket::SSL mandatory to run.
+SSL_VERIFY_NONE in --ssl and --tls
+----------------------------
+revision 1.652
+date: 2015/08/28 14:59:59; author: gilles; state: Exp; lines: +8 -8
+"Initial difference" -> "Start difference"
+----------------------------
+revision 1.651
+date: 2015/08/18 22:35:05; author: gilles; state: Exp; lines: +8 -8
+fixed xoauth2 calls.
+----------------------------
+revision 1.650
+date: 2015/08/16 00:42:58; author: gilles; state: Exp; lines: +28 -28
+Changed some output, added Host1: or Host2 at the begining of line.
+----------------------------
+revision 1.649
+date: 2015/08/10 03:10:15; author: gilles; state: Exp; lines: +7 -7
+576 tests.
+----------------------------
+revision 1.648
+date: 2015/08/10 02:58:21; author: gilles; state: Exp; lines: +99 -39
+Added guess_prefix() and guess_separator()
+Guess prefixes and separators instead of forcing the user to find them.
+----------------------------
+revision 1.647
+date: 2015/08/07 04:35:15; author: gilles; state: Exp; lines: +33 -20
+Added folders counting outputs.
+----------------------------
+revision 1.646
+date: 2015/08/07 00:07:39; author: gilles; state: Exp; lines: +16 -6
+Added sub imap_utf7_encode( ). Not used.
+----------------------------
+revision 1.645
+date: 2015/07/31 14:48:11; author: gilles; state: Exp; lines: +11 -11
+Better outpout in login_imap()
+----------------------------
+revision 1.644
date: 2015/07/17 01:22:52; author: gilles; state: Exp; lines: +9 -7
Added NOOP in --dry mode during fake APPEND.
----------------------------
diff --git a/FAQ b/FAQ
index d6f4caa..1327f8d 100644
--- a/FAQ
+++ b/FAQ
@@ -1,5 +1,5 @@
#!/bin/cat
-# $Id: FAQ,v 1.209 2015/05/09 20:53:23 gilles Exp gilles $
+# $Id: FAQ,v 1.216 2015/11/13 23:58:12 gilles Exp gilles $
+-------------------+
| FAQs for imapsync |
@@ -65,21 +65,30 @@ R. Use md5sum to check integrity of the file.
=======================================================================
Q. How to install imapsync?
-R. Read the INSTALL file in the tarball also available at
+R. Read the INSTALL files in the tarball also available at
http://imapsync.lamiral.info/INSTALL
+ http://imapsync.lamiral.info/INSTALL.d/
=======================================================================
Q. How to configure and run imapsync?
-R. Read the README and FAQ files in the tarball also available at
+R. Read the README, OPTIONS and FAQ files in the tarball also
+ available at:
http://imapsync.lamiral.info/README
+ http://imapsync.lamiral.info/OPTIONS
http://imapsync.lamiral.info/FAQ
=======================================================================
Q. Can you give some configuration examples?
-R. The FAQ file contains many examples for several scenarios
- http://imapsync.lamiral.info/FAQ
+R1. Basic usage is described there:
+ http://imapsync.lamiral.info/#DOC_BASIC
+
+ imapsync --host1 test1.lamiral.info --user1 test1 --password1 secret1 \
+ --host2 test2.lamiral.info --user2 test2 --password2 secret2
+
+R2. The FAQ files contains many examples for several scenarios
+ http://imapsync.lamiral.info/FAQ
=======================================================================
Q. How can I have commercial support?
@@ -277,17 +286,24 @@ option --justfoldersizes (no transfer will be done)
=======================================================================
-Q. I see warning messages like
-"Host1 Sent/15 size 1428 ignored (no header so we ignore this message)"
+Q. I see warning messages like the following:
+"Host1 Sent/15 size 1428 ignored (no header so we ignore this message.
+To solve this: use --addheader)".
+
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.
+
+R1. Like suggested inline, use --addheader option.
+Option --addheader will add an header line like
+Message-Id: <15@imapsync>
+where 15 is the message UID number on host1.
+Then imapsync will transfer the changed message on host2.
+Duplicates won't happen on next runs.
imapsync ... --addheader
-R2. Use --useuid then imapsync will avoid dealing with headers.
+R2. Other solution.
+Use --useuid then imapsync will avoid dealing with headers.
imapsync ... --useuid
@@ -343,7 +359,7 @@ Q. How can I try imapsync with latest Mail::IMAPClient 3.xx perl module?
Three solutions at least.
R1 - Look at the script named "i3" in the tarball, it can be used to
- run imapsync with the included Mail-IMAPClient-3.35/ wherever you
+ run imapsync with the included Mail-IMAPClient-3.37/ wherever you
unpacked the imapsync tarball
R2 Run:
@@ -367,10 +383,10 @@ R3 If you want to install the Perl module locally in a directory
- run imapsync with perl and -I option tailing to use the perl
module Mail-IMAPClient-3.xx. Example:
- perl -I./Mail-IMAPClient-3.35/lib ./imapsync ...
+ perl -I./Mail-IMAPClient-3.37/lib ./imapsync ...
or if imapsync is in directory /path/
- perl -I./Mail-IMAPClient-3.35/lib /path/imapsync ...
+ perl -I./Mail-IMAPClient-3.37/lib /path/imapsync ...
=======================================================================
@@ -573,7 +589,12 @@ The file imapsync.pid contains the PID of the imapsync process.
This file is removed at the end of a normal run.
You can safely ignore the warning if you don't use imapsync.pid file.
+=======================================================================
+Q. Quantifier in {,} bigger than 32766 in regex; marked by <-- HERE in
+ m/(.{ <-- HERE 1,49947})(?:,|$)/ at Mail/IMAPClient.pm line 2121.
+R. Do not use a bigger value than 3276 with --split1 or --split2
+
=======================================================================
Q. Couldn't create [INBOX.Ops/foo/bar]: NO Invalid mailbox name:
INBOX.Ops/foo/bar
@@ -628,63 +649,6 @@ R1. Use it with --subscribed
R2. There is also the --subscribe_all option that subscribe
to all folders on host2.
-=======================================================================
-Q. Is there a way we can specify a date range to sync emails?
- If yes, can you please share an example?
-
-R. Yes, with the --search option.
-
- imapsync ... --search "SENTSINCE 1-Jan-2010 SENTBEFORE 31-Dec-2010"
-
- Jan
- Feb
- Mar
- Apr
- May
- Jun
- Jul
- Aug
- Sep
- Oct
- Nov
- Dec
-
-=======================================================================
-Q. Is there a way we can specify an age to sync emails?
- If yes, can you please share some examples?
-
-R. Yes, with the --maxage or the --minage option.
-
-E.1 Sync only messages less than 2 days old:
-
- imapsync ... --maxage 2
-
-E.2 Sync only messages more than 2 days old:
-
- imapsync ... --minage 2
-
-E.3 Sync only messages more than 30 days old and less than 365 days old:
-
- imapsync ... --minage 30 --maxage 365
-
-E.4 Sync only messages less than 30 days old or more than 365 days old:
-
- imapsync ... --maxage 30 --minage 365
-
-Full explanation:
-
---maxage : Skip messages older than days.
- final stats (skipped) don't count older messages
- see also --minage
---minage : Skip messages newer than days.
- final stats (skipped) don't count newer messages
- You can do (+ are the messages selected):
- past|----maxage+++++++++++++++>now
- past|+++++++++++++++minage---->now
- past|----maxage+++++minage---->now (intersection)
- past|++++minage-----maxage++++>now (union)
-
-
=======================================================================
Q. On Unix, some passwords contain * and " characters. Login fails.
R. Use a backslash to escape the characters:
@@ -1056,12 +1020,12 @@ b) Replace manually the whitespace by a colon in string "From " but you
header lines of the message)
c) Run imapsync with the following option (this replaces "From "by "From:"):
- --regexmess 's/\AFrom /From:/'
+ --regexmess 's/\AFrom /From: /'
or may be better (no other "From:" collision):
d) Run imapsync with the following option (this replaces "From "by "X-om:"):
- --regexmess 's/\AFrom /X-om:/'
+ --regexmess 's/\AFrom /X-From: /'
e) Run imapsync with the following option (this removes the whole "From " line):
--regexmess 's{\AFrom\ [^\n]*(\n)?}{}gxms'
@@ -1087,319 +1051,6 @@ using the same server, we can use $from->copy Therefore we seem to not
download and upload the message and therefore we do not have any
format issues. And now it works fine. (Thanks to Hansjoerg.Maurer)
-=======================================================================
- Server specific issues and solutions
-=======================================================================
-
-=======================================================================
-Q. From Zimbra to XXX
-
-imapsync ... \
- --exclude "Conversation Action Settings" \
- --exclude "Quick Step Settings" \
- --exclude "News Feed"
-
-=======================================================================
-Q. From or to HMailServer version 4.4.1.
-
-R. You have to add prefix and separator manually because 4.4.1 doesn't
-honor the NAMESPACE imap command.
-
-Example for host1:
-
-imapsync ... \
- --prefix1 "" --sep1 .
-
-No specific option for HMailServer 5.3.3 since NAMESPACE is supported.
-
-Maybe --subscribe_all will help you to see all migrated folders.
-
-
-=======================================================================
-Q. Synchronizing from Kerio Connect to XXX
-
-R. No special options required.
-See also:
-http://www.linux-france.org/prj/imapsync_list/msg01756.html
-http://www.safetynet-it.com/it-support/mac-kerio-server-to-microsoft-exchange-2010-migration-1/
-http://www.safetynet-it.com/it-support/mac-kerio-server-to-microsoft-exchange-2010-migration-2/
-
-
-=======================================================================
-Q. Synchronizing from SmarterMail to XXX
-
-imapsync --host1 imap.d1.org --user1 joe --password1 secret1 --sep1 "/" \
- --host2 imap.d2.org --user2 joe --password2 secret2 \
- --prefix1 "" \
- --regextrans2 "s#Sent Items$#Sent#" \
- --dry --justfolders
-
-Maybe add other --regextrans2 to change folder names and see the result.
-When satisfied, run without --dry --justfolders
-
-
-=======================================================================
-Q. Synchronizing from Yahoo to XXX
-
-R. Use --host1 imap.mail.yahoo.com --sep1 '/'
-
-./imapsync \
- --host1 imap.mail.yahoo.com \
- --user1 billy \
- --password1 secret \
- --host2 XXX \
- --user2 billy \
- --password2 secret \
- --sep1 '/'
-
-Can also add --ssl1 to gain encrypted transfer from yahoo.
-SSL seems to be mandatory for yahoo (since november 2011)
-
-=======================================================================
-Q. from Microsoft's Exchange 2007 to Google Apps for your Domain
- (GAFYD)
-
-R. Take a look at:
-http://mark.ossdl.de/2009/02/migrating-from-exchange-2007-to-google-apps-mail/
-
-=======================================================================
-Q. Syncing from Google Apps domain to Googlemail account
-
-A known bug encountered with this output (Alexander is a folder name):
-
-++++ Verifying [Alexander] -> [Alexander] ++++
-+ NO msg #16 [A96Dh4AwlLVphOAW5MS/eQ:779824] in Alexander
-+ Copying msg #16:779824 to folder Alexander
-flags from : [\Seen]["04-Jul-2007 14:32:22 +0100"]
-Couldn't append msg #16 (Subject:[Rieter-Event (please accept with
-comments)]) to folder Alexander: 46 NO Invalid folder: Sent (Failure)
-
-In fact folder "Sent" is just the last folder listed previously
-as a:
-...
-To Folder [Sent] does not exist yet
-To Folder [Sonja] Size: 1024546 Messages: 96
-...
-
-R. Just run imapsync a time like this :
-imapsync ... --folder Alexander
-
-=======================================================================
-Q. Migrating from or to Parallels Plex Server
-
-R. It depends on the OS
-
-Parallells Plesk Panel for Windows requires --sep2 / --prefix2 ""
-Parallells Plesk Panel for Linux works with default parameters.
-
-=======================================================================
-Q. I'm migrating from WU to Cyrus, and the mail folders are under
- /home/user/mail but the tool copies everything in /home/user, how
- can i avoid that?
-
-Two solutions:
-
-R. Use
- imapsync ... --include '^mail'
-
-R. or (better)
- imapsync ... --subscribed --subscribe
-
-
-=======================================================================
-Q. I'm migrating from WU to Cyrus, and the mail folders are under
- /home/user/mail directory. When imapsync creates the folders in
- the new cyrus imap server, it makes a folder "mail" and below that
- folder puts all the mail folders the user have in /home/user/mail,
- i would like to have all those folders directly under INBOX.
-
-R. Use
- imapsync ... --regextrans2 's/^mail/INBOX/' --dry
- look at the simulation and if all transformations seem
- good then remove the --dry option.
-
-
-=======================================================================
-Q. Migrating from Groupwise to Cyrus
-
-R. By Jamie Neil:
-
-I eventually managed to get the mail to migrate without errors using the
-following options:
-
---sep1 /
- - doesn't report separator so has to be set explicitly.
-
---nosyncacls
- - doesn't support ACLs.
-
---skipheader '^Content-Type'
- - MIME separator IDs seem to change every time a mail is accessed so
- this is required to stop duplicates.
-
---maxage 3650
- - some messages just don't seem to want to transfer and produce the
- perl errors I mentioned before. This prevents the errors, but the
- bad messages don't transfer.
-
-Even though the mail migrated OK, there are a couple of gotchas with
-Groupwise IMAP:
-
-1) Some of the GW folders are not real folders and are not available
-to IMAP, the main problem one being "Sent Items". I could find no way
-of coping the contents of these folders. The nearest I got was to
-create a "real" folder and copy/move the sent items into it, but
-imapsync still didn't see the messages (I think because there is
-something funny about the reported dates/sizes).
-
-It think this problem has been rectified in GW6.5.
-
-2) The "skipheader '^Content-Type'" directive is required to stop
-duplicate messages being created. GW seems to generate this field on
-the fly for messages that have MIME separators and so it's different
-every time.
-
-3) Version 6.0.1 of the Groupwise Internet Connector sucks. I was
-getting server aborts when I pushed it a bit hard! I eventually had to
-upgrade to 6.0.4 which seems to be a lot more stable.
-
-
-=======================================================================
-Q. Migrating from iPlanet Messaging Server
-5.2 Patch 2 (built Jul 14 2004)) to Groupwise 7.0
-I encounter many errors like this:
-"Error trying to append string: 17847 BAD APPEND"
-
-R. GroupWise 7 seems buggy. Apply GroupWise 7 support pack 1
-
-=======================================================================
-Q. Migrating from David Tobit V10 (DvISE Mail Access Server MA-...)
-
-R. Use the following options:
-
-imapsync ... --prefix1 "" --sep1 / --idatefromheader ^
- --nofoldersizes --useuid --nocheckmessageexists
-
-=======================================================================
-Q. Migrating from David Tobit V8
- ("* OK IMAP4rev1 DvISE Mail Access Server MA-8.10a (0126)")
-
-First try above V10 solution since improvments have been made
-to support Tobit.
-
-R. Use the following options :
-imapsync ... --prefix1 INBOX. --sep1 / --subscribe --subscribed
-
-=======================================================================
-Q. Migrating from Tobit David Server 6
- ("DvISE Mail Access Server MA-6.60a (0118)")
-
-First try above V10 solution since improvments have been made
-to support Tobit.
-
-R. Look at the discussion:
-http://www.linux-france.org/prj/imapsync_list/msg00582.html
-http://www.linux-france.org/prj/imapsync_list/threads.html#00582
-patch saved in ./patches/imapsync-1.337_tobit_V6.patch
-
-=======================================================================
-Q. I need to migrate 1250 mailboxes, passwords are in a MySQL Database.
-Can you tell me if your script suits my needs?
-
-R. Mailboxes must exist before running imapsync.
-You have to extract users logins and passwords in a csv file.
-See the "HUGE MIGRATION" section in the README file.
-
-
-======================================================================
-Q: From MailEnable 1.75
-R: --sep1 "/" --prefix1 ""
-
-Q: From MailEnable 2.2
-R: --sep1 "." --prefix1 ""
-
-Q: To MailEnable
-R: --sep2 / --prefix2 "" --addheader --messageidnodomain --syncflagsaftercopy
-
-======================================================================
-Q. From GMX IMAP4 StreamProxy
-R. Use:
- --prefix1 INBOX and --sep1 .
-
-======================================================================
-Q. From Courier to Archiveopteryx
-R. You can read http://www.archiveopteryx.org/migration/imapsync
- Default values might be fine now with latest imapsync.
-
-======================================================================
-Q. To Sun Java(tm) System Messaging Server 6.2-7.05
-Q. To Communigate Pro - Solaris version
-
-R. See and run patches/imapsync_1.267_jari
-
-
-======================================================================
-Q. From Softalk Workgroup Mail 7.6.4
-
-R. Old Softalk releases don't support the IMAP SEARCH command.
- Here are the options to get it working.
-
-imapsync ... --sep1 '.' --prefix1 '' \
- --noabletosearch --nocheckmessageexists --addheader
-
-(Thanks to Andrew Tucker)
-
-======================================================================
-Q. From or to QQMail IMAP4Server
-
-R. imapsync ... --noabletosearch
-
-======================================================================
-Q. From FirstClass to XXX
- http://www.firstclass.com/
-
-R. Migrating from FirstClass is not easy because FirstClass, strangely,
- does not show all messages via IMAP. To make it show all messages,
- a trick, painful to follow by hand, is moving emails
- out and back in, for each folder. May be it can be done by a script.
-
- FirstClass releases prior to release 12 do not shows the "Sent"
- folder in IMAP but FirstClass release 12 shows it.
- I advice you to upgrade to FirstClass release 12 before leaving it
- with imapsync or another imap tool.
-
-Here is a command line used to migrate from FirtClass release 12:
-
- imapsync ... \
- --tmpdir /var/tmp --usecache \
- --useheader Message-ID \
- --idatefromheader \
- --addheader \
- --regextrans2 "s,(/|^) +,\$1,g" --regextrans2 "s, +(/|$),\$1,g" \
- --regextrans2 "s/[\^]/_/g" \
- --regextrans2 "s/['\"\\\\]/_/g" \
- --regextrans2 "s,&AC8-,-,g" \
- --regextrans2 "s,&APg-,oe,g"
-
-On Windows, in the previous example containing \$1 you have to
-replace the two \$1 by $1 (remove the \ before $).
-
-Special thanks to Kristian Wind and Joey Alexander for helping me
-writing this FAQ item.
-See also this worth reading discussion in a Zimbra forum:
-http://www.zimbra.com/forums/migration/20349-help-needed-migrating-firstclass.html
-
-======================================================================
-Q. From XXX to FTGate
-
-R. Do NOT use --usecache since new UIDs are not given by FTGate and also
- badly guessed by imapsync. UIDEXPUNGE does not work so use also
- --expunge2 when using --delete2
-
- imapsync ... \
- --sep2 / --prefix2 "" \
- --useheader Message-Id \
-
======================================================================
Q: How can I write an .rpm with imapsync
diff --git a/FAQ.d/FAQ.Domino.txt b/FAQ.d/FAQ.Domino.txt
index f31d1f9..5289b75 100644
--- a/FAQ.d/FAQ.Domino.txt
+++ b/FAQ.d/FAQ.Domino.txt
@@ -1,39 +1,51 @@
#!/bin/cat
-$Id: FAQ.Domino.txt,v 1.2 2015/03/26 04:24:17 gilles Exp gilles $
+# $Id: FAQ.Domino.txt,v 1.4 2015/09/19 08:58:34 gilles Exp gilles $
======================================================================
- Domino specific issues and solutions
+ Imapsync. Domino specific issues and solutions
======================================================================
+
======================================================================
Q. From Domino Notes to xxx
On Windows use:
- imapsync.exe ... --sep2 "\\" --prefix2 ""
-
+ imapsync.exe ... --sep1 "\\" --prefix1 ""
On Unix use:
- imapsync ... --sep2 '\\' --prefix2 ''
+ imapsync ... --sep1 '\' --prefix1 ''
======================================================================
Q. From xxx to Domino Notes
-For Domino anywhere with imapsync.exe on Windows use:
+Domino doesn't accept INBOX subfolders.
+
+On Windows:
imapsync.exe ... ^
--sep2 "\\" --prefix2 "" ^
- --regextrans2 "s,^INBOX\\(.*),$1,"
+ --regextrans2 "s,^Inbox\\(.*),$1,i"
-Explanation: Domino doesn't accept INBOX subfolders.
+On Unix:
+
+ imapsync ... \
+ --sep2 '\' --prefix2 '' \
+ --regextrans2 's,^Inbox\\(.*),$1,i'
If you want to sync the complete host1 mailbox in a subfolder called OLDBOX use:
+On Windows:
imapsync.exe ... ^
--sep2 "\\" --prefix2 "" ^
- --regextrans2 "s,(.*),OLDBOX\\$1," --justfolders --dry
+ --subfolder2 "OLDBOX" --justfolders --dry
+On Unix:
+ imapsync ... \
+ --sep2 '\' --prefix2 '' \
+ --subfolder2 'OLDBOX' --justfolders --dry
+
If the output is correct for you then remove --dry and have a run.
Verify the folder hierarchy is good on host2 then remove --justfolders to
sync the messages.
diff --git a/FAQ.d/FAQ.Dovecot.txt b/FAQ.d/FAQ.Dovecot.txt
index 28e9caf..bec2efb 100644
--- a/FAQ.d/FAQ.Dovecot.txt
+++ b/FAQ.d/FAQ.Dovecot.txt
@@ -1,8 +1,8 @@
#!/bin/cat
-$Id: FAQ.Dovecot.txt,v 1.1 2015/03/23 00:16:43 gilles Exp gilles $
+$Id: FAQ.Dovecot.txt,v 1.2 2015/07/18 22:35:27 gilles Exp gilles $
=======================================================================
- Dovecot specific issues and solutions
+ Imapsync. Dovecot specific issues and solutions
=======================================================================
diff --git a/FAQ.d/FAQ.Duplicates.txt b/FAQ.d/FAQ.Duplicates.txt
index d7ad840..eb36e4c 100644
--- a/FAQ.d/FAQ.Duplicates.txt
+++ b/FAQ.d/FAQ.Duplicates.txt
@@ -1,8 +1,8 @@
#!/bin/cat
-$Id: FAQ.Duplicates.txt,v 1.3 2015/04/02 23:40:08 gilles Exp gilles $
+$Id: FAQ.Duplicates.txt,v 1.5 2015/09/19 08:59:14 gilles Exp gilles $
======================================================================
- Imapsync and message duplicates issues
+ Imapsync and duplicated messages issues.
======================================================================
=======================================================================
@@ -62,6 +62,11 @@ and Received lines? Often standalone Message-Id works:
imapsync ... --useheader "Message-Id"
+Once imapsync does not generate duplicates, the previous duplicates
+can be deleted with option --delete2duplicates
+
+ imapsync ... --useheader "Message-Id" --delete2duplicates
+
Another good way toward a solution is to isolate two or three messages
in a BUG folder and send me the --debug output by email at
gilles.lamiral@laposte.net
@@ -69,7 +74,7 @@ gilles.lamiral@laposte.net
imapsync ... --debug --folder BUG
I will take a close look at the log and modify imapsync to fix
-this faulty duplicate behaviour.
+this faulty duplicate behavior.
Remark. (Trick found by Tomasz Kaczmarski)
diff --git a/FAQ.d/FAQ.Exchange.txt b/FAQ.d/FAQ.Exchange.txt
index 1dff510..81ccead 100644
--- a/FAQ.d/FAQ.Exchange.txt
+++ b/FAQ.d/FAQ.Exchange.txt
@@ -1,13 +1,60 @@
#!/bin/cat
-$Id: FAQ.Exchange.txt,v 1.4 2015/06/03 15:33:48 gilles Exp gilles $
+$Id: FAQ.Exchange.txt,v 1.14 2015/11/30 16:12:18 gilles Exp gilles $
=======================================================================
- Exchange 20xx and Office365 specific issues and solutions
+ Imapsync. Exchange 20xx and Office365 specific issues and solutions
=======================================================================
+Questions anwswered in this FAQ are:
+
+Q. Can I use imapsync to transfer from or to Exchange or Office365 accounts?
+
+Q. How to sync from XXX to Exchange 2010/2013 or Office365
+
+Q. For Office365 I have double and triple checked the username and
+ password spelling but I still get a "LOGIN failed". Any clue?
+
+Q. Exchange fails with "User is authenticated but not connected".
+
+Q. From XXX to Exchange 2013 or Office365, read receipts are all
+ resent again after a sync. Even for old messages. How can I fix that?
+
+Q. From XXX to Exchange 2010/2013 or Office365 I get this error message
+ sometimes: "BAD Command Argument Error 11". What does it mean?
+
+Q. From XXX to Exchange 2010 or 2013 or Office365 the flag Flagged does
+ not seem to be well synced. What can I do?
+
+Q. Exchange and Office365 have throttle mechanisms to limit any huge
+ usage. Sometimes imapsync transfers are too stressful for servers.
+ How to deal with that?
+
+Q. How to migrate from or to Exchange 2007/2010 with an
+ admin/authuser account?
+
+Q. How to migrate from or to Office 365 with an admin/authuser account?
+
+Q. How to migrate from or to Exchange 2003 with an admin/authuser
+ account?
+
+Q. Couldn't create folder [trash] "Mailbox already exists".
+
+Q. Migrating to Exchange 201O, messages get date of the transfer,
+ this is bad for sorting and listing. What can I do?
+
+Q. How to sync from any to Exchange2007?
+
+Q. How to sync from Microsoft Exchange 2000 IMAP4rev1 server?
=======================================================================
-Q. From XXX to Exchange 2010/2013 or Office365
+Q. Can I use imapsync to transfer from or to Exchange or Office365 accounts?
+
+R. Yes. But IMAP access to a Exchange or Office365 account is not always
+ allowed by default so it has to be allowed in the server configuration
+ part:
+
+=======================================================================
+Q. How to sync from XXX to Exchange 2010/2013 or Office365
R. Here is a command line resume that solves most encountered issues when
migrating to Exchange or Office365. To understand or change the
@@ -19,9 +66,13 @@ On Windows:
imapsync.exe ... ^
--maxsize 10000000 ^
--maxlinelength 9900 ^
+ --maxmessagespersecond 4 ^
--regexflag "s/\\Flagged//g" ^
--disarmreadreceipts ^
- --maxlinelength 9000
+ --regexmess "s,(.{9900}),$1\r\n,g"
+
+ On Unix
+ imapsync ... --regexmess 's,(.{9900}),$1\r\n,g'
On Unix:
@@ -29,18 +80,50 @@ On Unix:
imapsync ... \
--maxsize 10000000 \
--maxlinelength 9900 \
- --regexflag "s/\\Flagged//g" \
+ --maxmessagespersecond 4 \
+ --regexflag 's/\\Flagged//g' \
--disarmreadreceipts \
--maxlinelengthcmd 'reformime -r7'
-To get the "reformime" command on Linux install the "maildrop" package
-No "reformime" on Windows so for now messages with too long line length
-can't be synced to Exchange or Office365.
+On Linux, to get the "reformime" command, install the "maildrop" package.
+In case you don't have it you can use
+ --regexmess 's,(.{9900}),$1\r\n,g'
+instead of --maxlinelengthcmd 'reformime -r7'
+On Windows, no "reformime" is available so messages with too long line length
+can be synced to Exchange or Office365 by inserting a CRLF every 9900
+characters on long lines, using --regexmess "s,(.{9900}),$1\r\n,g"
=======================================================================
-Q. From XXX to Exchange 2013 or Office365 read receipts are all
- resent again after a sync. Even for old messages. How can I fix that?
+Q. For Office365 I have double and triple checked the username and
+ password spelling but I still get a "LOGIN failed". Any clue?
+
+R1. Triple check the hostname then. Try all of these:
+ * imap-mail.outlook.com
+ * imap.outlook.com
+ * outlook.office365.com
+
+R2. Also triple check a license is assigned to that account
+ in Office365.
+
+R3. Try with a classic email client like Thunderbird and the same
+ parameters.
+
+=======================================================================
+Q. Exchange fails with "User is authenticated but not connected".
+
+R. "The message “User is authenticated but not connected” is due to a
+ bug in the Exchange server's IMAP implementation. If the client
+ presents a valid user name but an invalid password, the server
+ accepts the login, but subsequent commands fail with the
+ aforementioned error message." Source:
+http://unix.stackexchange.com/questions/164823/user-is-authenticated-but-not-connected-after-changing-my-exchange-password
+Thanks to James Abbottsmith for this link and explanation at
+https://github.com/imapsync/imapsync/issues/32#issuecomment-153561647
+
+=======================================================================
+Q. From XXX to Exchange 2013 or Office365, read receipts are all
+ resent again after a sync. Even for old messages. How can I fix that?
R. imapsync can remove the header containing this read receipt request.
@@ -74,7 +157,7 @@ Thanks to David Karnowski for pointing and solving this issue.
=======================================================================
Q. From XXX to Exchange 2010/2013 or Office365 I get this error message
- sometimes: "BAD Command Argument Error 11"
+ sometimes: "BAD Command Argument Error 11". What does it mean?
R. This error message comes from Exchange IMAP server when it
encounters any problem. Most of the time it is one of the following:
@@ -101,6 +184,15 @@ R. This error message comes from Exchange IMAP server when it
imapsync ... --maxlinelength 9900
+ In case you prefer fixing messages with long lines the hard way,
+ instead of skipping them with --maxlinelength 9900, just use:
+
+ On Windows
+ imapsync ... --regexmess "s,(.{9900}),$1\r\n,g"
+
+ On Unix
+ imapsync ... --regexmess 's,(.{9900}),$1\r\n,g'
+
Have also in mind that Exchange closes the connection after 10 errors
encountered so you might also see "BYE Connection closed" errors from
Exchange, which means Exchange leaves the session and say goodbye,
@@ -108,7 +200,7 @@ come back later. Rerun a sync then.
=======================================================================
Q. From XXX to Exchange 2010 or 2013 or Office365 the flag Flagged does
- not seem to be well synced.
+ not seem to be well synced. What can I do?
R. Use the following trick. Run imapsync twice, one with --regexflag
and one without, like this:
@@ -128,7 +220,15 @@ With STORE it sets and gets the "\Flagged" flag everywhere.
Thanks to Dave Murray and Simon Savva for reporting and solving
this issue.
+======================================================================
+Q. Exchange and Office365 have throttle mechanisms to limit any huge
+ usage. Sometimes imapsync transfers are too stressful for servers.
+ How to deal with that?
+R. It looks like limiting 4 messages per second is enough to never
+ reach any throttle limit.
+
+ imapsync ... --maxmessagespersecond 4
======================================================================
Q. How to migrate from or to Exchange 2007/2010 with an
@@ -245,8 +345,7 @@ In case you are not aware:
=======================================================================
-Q. Couldn't create folder [trash] from [INBOX.trash]:
- 588 NO Mailbox already exists.
+Q. Couldn't create folder [trash] "Mailbox already exists".
R. Some servers take care about character case in folder names,
some servers do not, like Exchange. Since non-respecting case
@@ -275,10 +374,13 @@ R. Some servers take care about character case in folder names,
mandatory, otherwise imapsync will sync messages from the
first Trash and then delete them when syncing trash.
+ In order to avoid merging folders that are considered different
+ on host1 but the same on destination host2 because of case
+ sensitivities and insensitivities, use --nomixfolders
======================================================================
Q. Migrating to Exchange 201O, messages get date of the transfer,
- this is bad for sorting and listing.
+ this is bad for sorting and listing. What can I do?
R1. Be sure to have at least Exchange 2010 SP2 Rollup 5
http://www.tribalchicken.com.au/15-technical/29-imapsync-exchange2010
@@ -291,7 +393,7 @@ It's often shorter to change one server than thousands clients
so R1 might be easier to do.
======================================================================
-Q. From any to Exchange2007
+Q. How to sync from any to Exchange2007?
Several problems:
- Big messages: increase the "send- and receive-connector"
@@ -310,10 +412,9 @@ Two users succeeded by using "MS Transporter Suite" (which is closed
expensive non-free software).
======================================================================
-Q. From Microsoft Exchange 2000 IMAP4rev1 server version 6.0.6487.0.
+Q. How to sync from Microsoft Exchange 2000 IMAP4rev1 server?
-R. imapsync ... \
- --prefix1 INBOX.
+R. imapsync ... --prefix1 "INBOX."
-=======================================================================
\ No newline at end of file
+=======================================================================
diff --git a/FAQ.d/FAQ.Flags.txt b/FAQ.d/FAQ.Flags.txt
index 88d6a42..213c8a5 100644
--- a/FAQ.d/FAQ.Flags.txt
+++ b/FAQ.d/FAQ.Flags.txt
@@ -1,8 +1,8 @@
#!/bin/cat
-$Id: FAQ.Flags.txt,v 1.3 2015/04/03 21:05:11 gilles Exp gilles $
+$Id: FAQ.Flags.txt,v 1.4 2015/07/18 22:35:27 gilles Exp gilles $
======================================================================
- Imapsync and flags
+ Imapsync and flags
======================================================================
Questions answered here are:
diff --git a/FAQ.d/FAQ.Folders_Mapping.txt b/FAQ.d/FAQ.Folders_Mapping.txt
index 2192879..090b146 100644
--- a/FAQ.d/FAQ.Folders_Mapping.txt
+++ b/FAQ.d/FAQ.Folders_Mapping.txt
@@ -1,9 +1,9 @@
#!/bin/cat
-$Id: FAQ.Folders_Mapping.txt,v 1.5 2015/05/11 10:36:33 gilles Exp gilles $
+$Id: FAQ.Folders_Mapping.txt,v 1.8 2015/12/03 02:37:45 gilles Exp gilles $
-===========================================
- Imapsync changing folders names
-===========================================
+======================================================================
+ Imapsync. Changing folders names
+======================================================================
Things to know and understand before playing with --regextrans2
@@ -61,18 +61,23 @@ Q. Give examples about --regextrans2
Examples:
-1) To remove INBOX. in the name of destination folders:
+1) To remove INBOX. in the name of destination folders
- --regextrans2 's/^INBOX\.(.+)/$1/'
+ imapsync ... --regextrans2 's/^INBOX\.(.+)/$1/'
-2a) To sync all folders to INBOX:
+2) To change only INBOX to Inbox_Migrated
+
+ imapsync ... --regextrans2 's{^INBOX$}{Inbox_Migrated}'
+
+
+2a) To sync all folders to INBOX
imapsync ... --regextrans2 "s/.*/INBOX/"
-2b) To sync a complete account in a subfolder called FOO:
+2b) To sync a complete account in a subfolder called FOO
-Since imapsync release 1.641 simply use:
+Since imapsync release 1.641 simply use
imapsync ... --subfolder2 FOO
@@ -130,6 +135,21 @@ On Windows:
--regextrans2 s,\^",_,g
+3c) to substitute all characters *%. by underscores _
+You can increase the *%. list by any unwanted character.
+
+On Linux/Unix:
+
+ --regextrans2 'tr,*%.#,_,'
+
+On Windows:
+
+ --regextrans2 "tr,*%.#,_,"
+
+3d) It is a bad idea to substitute & characters since &
+is a character to encode non-ascii characters in IMAP folder names.
+
+
4) to change folder names like this:
[mail/Sent Items] -> [Sent]
diff --git a/FAQ.d/FAQ.Gmail.txt b/FAQ.d/FAQ.Gmail.txt
old mode 100755
new mode 100644
index 320514d..f118b75
--- a/FAQ.d/FAQ.Gmail.txt
+++ b/FAQ.d/FAQ.Gmail.txt
@@ -1,13 +1,78 @@
#!/bin/cat
-$Id: FAQ.Gmail.txt,v 1.2 2015/05/11 01:11:40 gilles Exp gilles $
+$Id: FAQ.Gmail.txt,v 1.13 2015/11/05 21:01:12 gilles Exp gilles $
======================================================================
- Imapsync with Gmail
+ Imapsync with Gmail
======================================================================
+Questions anwswered in this FAQ are:
+
+Q. Can I use imapsync to transfer from or to Gmail accounts?
+Q. How to synchronize from Gmail to Gmail?
+Q. How to synchronize from XXX to Gmail?
+Q. How to synchronize from Gmail to XXX?
+Q. How to avoid the [IMAP] prefix on Gmail side?
+Q. I can't authenticate with Gmail via IMAP
+ and Gmail says "Please log in via your web browser"
+Q. Can not open imap connection on [imap.gmail.com]
+Q. Gmail does not really delete messages in folder [Gmail]/All Mail
+Q. Does imapsync have the capability to do 2 stage authentication?
+Q. How to use XOAUTH2 to globally authenticate gmail users?
+Q. How to use XOAUTH to globally authenticate gmail users?
+Q. How to use a Gmail account to backup several different imap accounts?
+Q. How to migrate email from gmail to google apps?
+
+=======================================================================
+Q. Can I use imapsync to transfer from or to Gmail accounts?
+
+R. Yes. But IMAP access to a Gmail account is not allowed by default so
+it has to be allowed in the Gmail configuration part:
+ -> Settings
+ -> Forwarding and POP/IMAP
+ -> IMAP Access
+ -> Enable IMAP
+
+=======================================================================
+Q. How to synchronize from Gmail to Gmail?
+
+
+R. Use the following example:
+
+./imapsync \
+ --host1 imap.gmail.com \
+ --ssl1 \
+ --user1 account1@gmail.com \
+ --password1 gmailsecret1 \
+ --host2 imap.gmail.com \
+ --ssl2 \
+ --user2 account2@gmail.com \
+ --password2 gmailsecret2 \
+ --exitwhenover 500000000 \
+ --exclude "\[Gmail\]$"
+
+
+Explanations:
+
+--ssl1 --ssl2 are mandatory since Gmail only supports
+imap ssl connections.
+
+--exitwhenover 500000000 ( ~500 MB ) option is here to avoid
+locking or errors when transfers exceed maximum limit.
+See http://support.google.com/a/bin/answer.py?hl=en&answer=1071518
+--exitwhenover is not mandatory in the sense you may be able to
+use an upper value than 500 MB without disconnections; I don't
+know the hard value, it seems to vary, so just have some tries
+and report me what you discover in case you detect something
+reliable.
+
+--exclude "\[Gmail\]$" is just there to avoid a warning error
+when selecting this not used folder.
+
+=======================================================================
+
=======================================================================
-Q. Synchronizing from XXX to Gmail
+Q. How to synchronize from XXX to Gmail?
R. There are some details to get the special [Gmail] sub-folders
right. Here's an example of migrating an old "Sent" folder to
@@ -102,31 +167,23 @@ unselect some "System labels", depending on your needs.
The "All Mail" archive pseudo-folder should be updated automatically.
-
=======================================================================
-Q. Some of the folders are getting created with [IMAP] prefix on Google
-side. How to stop creating folder with this prefix?
-Any switch we can use? e.g. [IMAP]/Archive
+Q. How to synchronize from Gmail to XXX?
-R. No switch in imapsync since [IMAP]/ prefix is done by Gmail,
- it might be configurable with Gmail parameters.
-
-=======================================================================
-Q. Synchronizing from Gmail to XXX
-
-R. Gmail needs SSL
+R. Use this example:
./imapsync \
--host1 imap.gmail.com \
--user1 gilles.lamiral@gmail.com \
--password1 gmailsecret \
- --host2 localhost
+ --host2 localhost \
--user2 tata \
--password2 tatasecret \
--ssl1 \
--exitwhenover 2500000000 \
--useheader="X-Gmail-Received" \
--useheader "Message-Id" \
+ --regextrans2 "s,\[Gmail\].,," \
--skipcrossduplicates \
--folderfirst "Work" \
--folderfirst "Friends" \
@@ -138,8 +195,9 @@ Explanations:
--ssl1 is mandatory since Gmail only supports imap ssl connections.
---exitwhenover 2500000000 option is here to avoid locking when
-transfers exceed maximum limit.
+--exitwhenover 2500000000 (2.5 GB) option is here to avoid
+locking when transfers exceed maximum limit.
+
See http://support.google.com/a/bin/answer.py?hl=en&answer=1071518
--exitwhenover is not mandatory in the sense you may be able to
use an upper value than 2.5 GB without disconnections; I don't
@@ -154,9 +212,9 @@ by imapsync can not fail using this header. "Message-Id" is there
for safety about this Gmail rule.
-If your destination imap server doesn't like "[Gmail]" name, just add
-option:
- --regextrans2 's/\[Gmail\]/Gmail/'
+--regextrans2 "s,\[Gmail\].,,"
+If your destination imap server doesn't like "[Gmail]" name,
+get rid of this "[Gmail]" part with that.
You can select folders exported to imap within the gmail preferences,
for example you may unselect all "System labels".
@@ -186,9 +244,17 @@ label CanWait and only it.
--skipcrossduplicates, will only put in "[Gmail]/All Mail"
the messages that are not labeled at all.
+=======================================================================
+Q. How to avoid the [IMAP] prefix on Gmail side?
+How to stop creating folder with this prefix?
+Any switch we can use? e.g. [IMAP]/Archive
+
+R. No switch in imapsync since [IMAP]/ prefix is done by Gmail,
+ it might be configurable within Gmail parameters configuration.
+
=======================================================================
Q. I can't authenticate with Gmail via IMAP
- Gmail says "Please log in via your web browser"
+ and Gmail says "Please log in via your web browser"
R1. See Coert Grobbelaar solution:
https://security.stackexchange.com/questions/86404/how-do-i-interact-with-google-to-import-email-via-imapsync
@@ -200,8 +266,40 @@ so I logged for this account via a web browser,
it asked me to receive a code via a mobile, I said yes,
I entered the code and everything went ok.
+R3. Use https://www.google.com/settings/security/lesssecureapps
+ (thanks to Flavio Zarur)
+ See https://support.google.com/accounts/answer/6010255?hl=en
+
=======================================================================
-Q. Gmail does not really delete messages in folder [Gmail]/All Mail
+Q. Can not open imap connection on [imap.gmail.com]:
+ Unable to connect to imap.gmail.com
+
+R0. It looks like this issue is related to ipv6. Both ipv4 and ipv6
+protocols should work with gmail and imapsync, I test that regurlarly,
+imapsync works fine for both ipv4 and ipv6.
+If you disable ipv6 then disable also ipv6 resolution or at least
+make ipv4 answers be taken before ipv6 since default resolution
+order is to take ipv6 resolution if any.
+
+R1. A first simple solution is to use directly gmail ipv4 ip address:
+
+ imapsync ... --host1 74.125.133.108
+
+In case it changes, get with any command showing the imap.gmail.com resolution
+
+ nslookup imap.gmail.com
+ host imap.gmail.com
+ ping imap.gmail.com
+Or go to http://ping.eu/nslookup/ to get the resolution.
+
+R2. Fix imapsync with the line:
+
+ use IO::Socket::SSL 'inet4' ;
+
+Thanks to Chris Nolan to report, understand and fix this issue!
+
+=======================================================================
+Q. Gmail does not really delete messages in folder [Gmail]/All Mail
What happens? What can I do?
R. It's true and explained in Gmail documentation at
@@ -209,64 +307,45 @@ https://support.google.com/mail/answer/78755?hl=en
To really remove messages in folder "[Gmail]/All Mail", they have to
be moved to the "Trash" folder and be deleted from "Trash".
-
+
=======================================================================
-Q. Does imapsync have the capability to do 2 stage authentication for google.
+Q. Does imapsync have the capability to do 2 stage authentication?
R. No, imapsync doesn't support 2 stage authentication.
Reading https://support.google.com/mail/answer/1173270?hl=en
it looks like it can't because imapsync uses imap protocol.
So you have to follow the Google recommendation and generate an
-application-specific password or normal authentication or XOAUTH.
+application-specific password or normal authentication
+or use XOAUTH or XOAUTH2.
=======================================================================
-Q. Is XOAUTH2 authentication available with imapsync?
+Q. How to use XOAUTH2 to globally authenticate gmail users?
-R. Yes but only on Unix systems and not really well documented. See
-* http://www.linux-france.org/prj/imapsync_list/msg02129.html
-* https://github.com/imapsync/imapsync/pull/25/files
+R. Yes, but really tested on Unix systems, not sure on Windows. See:
+ http://imapsync.lamiral.info/FAQ.d/FAQ.XOAUTH2.txt
=======================================================================
Q. How to use XOAUTH to globally authenticate gmail users?
- The XOAUTH code and this FAQ item come from Eduardo Bortoluzzi
- Thanks Eduardo!
-
-R. The goal of OAUTH is to migrate all users from/to Google Apps
- Premier Edition without knowing their passwords.
-
- The global password is available at the Google Apps control panel,
- at Advanced Tools -> Manage OAuth domain key.
-
-./imapsync \
- --host1 imap.gmail.com --ssl1 \
- --user1 foo@lab3.dedal.br \
- --password1 secret1 \
- --authmech1 XOAUTH \
- --host2 imap.gmail.com --ssl2 \
- --user2 bar@lab3.dedal.br \
- --password2 secret2 \
- --authmech2 XOAUTH
-
-Google Apps is a paid service, but you can try it for 30 days without any cost.
-
-Some notes about configuring the Google Apps XOAUTH:
-
- On "Advanced Tools > Manage OAuth domain key > Two-legged OAuth access control"
- the "Allow access to all APIs" must be checked
- (https://support.google.com/a/bin/answer.py?answer=162105)
-
- OR
-
- On "Advanced Tools > Manage third party OAuth client access",
- the configured costumer key must have the scope
- "https://mail.google.com/" configured
- (https://support.google.com/a/bin/answer.py?answer=162106).
+R0. XOAUTH is considered obsolete and superseded by XOAUTH2
+ See http://imapsync.lamiral.info/FAQ.d/FAQ.XOAUTH2.txt
=======================================================================
-Q. migrate email from gmail to google apps
+Q. How to use a Gmail account to backup several different imap accounts?
+
+R. For each account named xxx use:
+
+ imapsync ... --subfolder2 xxx/xxx
+
+It syncs the account xxx under a sub-subfolder xxx/xxx. This way there
+is no supplementary label created on the multi-archive Gmail
+destination account. No labels all over the place and all original
+xxx sub-folders show up nested within xxx/xxx.
+
+=======================================================================
+Q. How to migrate email from gmail to google apps?
R. Take a look at:
http://www.linux-france.org/prj/imapsync_list/msg00639.html
diff --git a/FAQ.d/FAQ.ISP.txt b/FAQ.d/FAQ.ISP.txt
new file mode 100644
index 0000000..c3d4f89
--- /dev/null
+++ b/FAQ.d/FAQ.ISP.txt
@@ -0,0 +1,72 @@
+#!/bin/cat
+$Id: FAQ.ISP.txt,v 1.2 2015/10/21 15:23:07 gilles Exp gilles $
+
+=================================================
+ Imapsync. ISP specific issues and solutions
+=================================================
+
+* IMAP Sync - usage scenario with ISP - by Flvio Zarur Lucarelli.
+
+I thought Id write a quick step by step on my attempts to learn the
+imapsync features that matter the most, so it works as we expected in
+the cenario in which we use it, which is to migrate customers from
+their old ISP to our ISP/email hosting. Thanks to the master Gilles
+Lamiral for all his help and hard work.
+
+First of all, remember to use --dry to test things first always and
+check the log file to see what would actually happen.
+
+My first goal is to have an exact sync of an account from
+current/source host to the new/destination host and be able to sync
+several times. The --useuid parameter is very important for that
+purpose. This is what I use:
+
+ imapsync --host1 imap.gmail.com --user1 user@domain.com --password1 pwd --ssl1 --host2 imap.myisp.com --user2 user@domain.com --password2 pwd --ssl2 --useuid --delete2 --delete2folders
+
+This makes it so imap.myisp.com (destination) is an exact copy of the
+account at imap.gmail.com (source). This is not a problem, since the
+user is not using the new host yet. ]You can check Imapsync log files
+and surely you will see the final difference should be 0. Check also
+for any possible errors in the log (search for "error").
+
+The second goal is to lower the TTL (ex: 5 min) for the host
+associated with the MX record, in the domain's DNS server. Let's say
+customer has a host mail which his MX points to, with a high TTL
+(usually 1 hour). Lower it to 5 min so that, when you change the MX,
+it propagates faster.
+
+When comes time to switch over to the new host, do a final sync with
+above syntax, before changing the MX. Then, change the MX and tell
+your users to start using exclusively the new host.
+
+A few hours after the MX change, we will run Imapsync again. We have
+to start preserving emails users move or flag in the new host, which
+they started using, so we can't do an exact sync anymore.
+
+The best solution for me was to Sync any new emails (maxage:1) from
+source (that could arrive in source even after MX change, due to
+cache) and delete such emails from source server. This way, customer's
+mailbox is still intact on the source server, except new emails, which
+get synced to new server and deleted from source.
+
+ imapsync --host1 imap.gmail.com --user1 user@domain.com --password1 pwd --ssl2 --folder INBOX --useuid --noexpungeaftereach --skipemptyfolders --maxage 1 --delete1
+
+I personally prefer to keep a copy of users box intact in source, but
+if that's not an issue for you, you can remove --folder INBOX and even
+--maxage, but then, all emails in source will be deleted. You can use
+--maxage 1 with --delete1, however, for all folder (without specifying
+--folder INBOX), so only any new email that arrives at source is
+copied to destination and deleted from source.
+
+My next goal was to automate the process, so I followed this advice:
+http://imapsync.lamiral.info/examples/sync_loop_unix.sh
+
+I also ended up requiring a regex to translate folder names. On the
+old server (Gmail), Sent items were in a folder called [Gmail]/E-mails
+enviados and on the new server, its simply called SENT. Same with
+lixeira (trash) and rascunhos (drafts).
+
+So this was added:
+
+ --regextrans2 "s,\[Gmail\].,," --regextrans2 "s,E-mails enviados,Sent," --regextrans2 "s,/Lixeira,Trash," --regextrans2 "s,/Rascunhos,Drafts,"
+
diff --git a/FAQ.d/FAQ.Massive.txt b/FAQ.d/FAQ.Massive.txt
old mode 100755
new mode 100644
index 92823bb..c673ace
--- a/FAQ.d/FAQ.Massive.txt
+++ b/FAQ.d/FAQ.Massive.txt
@@ -1,8 +1,8 @@
#!/bin/cat
-$Id: FAQ.Massive.txt,v 1.1 2015/03/26 05:06:27 gilles Exp gilles $
+$Id: FAQ.Massive.txt,v 1.5 2015/11/05 14:46:20 gilles Exp gilles $
======================================================================
- Imapsync for massive migrations
+ Imapsync for massive migrations
======================================================================
Questions answered here are:
@@ -10,49 +10,55 @@ Questions answered here are:
Q. I need to migrate hundred accounts, how can I do?
Q. I have to migrate 500k users using 400 TB of disk space.
How do I proceed?
+Q. How to determine what is the bottleneck in my current imapsync process?
-
=======================================================================
Q. I need to migrate hundred accounts, how can I do?
R. If you have many mailboxes to migrate think about a little
-shell program. Write a file called file.txt (for example)
-containing users and passwords.
+script program. Write a file called file.txt (for example)
+containing hosts users and passwords on both sides.
The separator used in this example is ";"
-The file.txt file contains:
+The file.txt file contains for example:
-user001_1;password001_1;user001_2;password001_2
-user002_1;password002_1;user002_2;password002_2
-user003_1;password003_1;user003_2;password003_2
-user004_1;password004_1;user004_2;password004_2
-user005_1;password005_1;user005_2;password005_2
-...
+host001_1;user001_1;password001_1;host001_2;user001_2;password001_2;
+host002_1;user002_1;password002_1;host002_2;user002_2;password002_2;
+host003_1;user003_1;password003_1;host003_2;user003_2;password003_2;
+host004_1;user004_1;password004_1;host004_2;user004_2;password004_2;
+etc.
-On Unix the shell program can be:
+On Unix the shell script can be:
- { while IFS=';' read u1 p1 u2 p2; do
- imapsync --host1 imap.side1.org --user1 "$u1" --password1 "$p1" \
- --host2 imap.side2.org --user2 "$u2" --password2 "$p2" ...
- done ; } < file.txt
+#!/bin/sh
+{ while IFS=';' read h1 u1 p1 h2 u2 p2 fake
+ do
+ imapsync --host1 "$h1" --user1 "$u1" --password1 "$p1" \
+ --host2 "$h2" --user2 "$u2" --password2 "$p2"
+ done
+} < file.txt
-Here is a complete Unix example nearly ready to use:
+
+Here is a complete Unix example ready to use:
http://imapsync.lamiral.info/examples/sync_loop_unix.sh
-On Windows the batch program can be:
+On Windows the batch script can be:
- FOR /F "tokens=1,2,3,4 delims=; eol=#" %%G IN (file.txt) DO imapsync ^
- --host1 imap.side1.org --user1 %%G --password1 %%H ^
- --host2 imap.side2.org --user2 %%I --password2 %%J ...
+CD /D %~dp0
+SET csvfile=file.txt
+FOR /F "tokens=1,2,3,4,5,6 delims=; eol=#" %%G IN (%csvfile%) DO (
+imapsync ^
+ --host1 %%G --user1 %%H --password1 %%I ^
+ --host2 %%J --user2 %%K --password2 %%L ...
+)
-The ... can be replaced by nothing or any supplementary imapsync option.
+The final ... can be replaced by nothing or any supplementary imapsync option.
Here is a complete Windows example nearly ready to use:
http://imapsync.lamiral.info/examples/sync_loop_windows.bat
-
=======================================================================
Q. I have to migrate 500k users using 400 TB of disk space.
How do I proceed?
@@ -63,13 +69,15 @@ they can be processed independently.
500k on 400TB is 800 MB per account on average.
-No one knows in advance what is the first bottleneck. The first
-bottleneck has to be determined, by measurements, not by guesses.
-Once this first bottleneck is known and overcome then the next
-bottleneck has to be determined and overcome too, if needed. Repeat
-the process of looking for the next bottleneck and its resolution
-until you estimate the transfer rates, money costs and final dates are
-good enough to proceed the whole 500k/400TB migration.
+On any process involving several mechanisms there is always a
+bottleneck among all elements taking part on the process. No one knows
+in advance what is the first bottleneck. The first bottleneck has to
+be determined, by measurements, not by guesses. Once this first
+bottleneck is known and overcome then the next bottleneck has to be
+determined and overcome too, if needed. Repeat the process of looking
+for the next bottleneck and its resolution until you estimate the
+transfer rates, money costs and final dates are good enough to proceed
+the whole 500k/400TB migration.
Possible bottlenecks:
@@ -96,3 +104,22 @@ Possible bottlenecks:
- Bad luck.
- ...
+=======================================================================
+Q. How to determine what is the bottleneck in my current imapsync process?
+
+R. Divide and conquer.
+
+In order to detect whether host1/link1 is the bottleneck or
+host2/link2, we have several tests to explore:
+
+1) run a sync from host1 to host1, with a host1 test account as destination.
+This way, only host1+link1 are tested. host2 is not concerned.
+If performances increase a lot then host2/link2 is the bottleneck.
+
+2) run a sync from host2 to host2, with a host2 test account as destination.
+This way, only host2+link2 are tested. host1 is not concerned.
+If performances increase a lot then host1/link1 is the bottleneck.
+
+If performances increase on both tests 1) and 2), I have no clue to explain that.
+Same thing if they both decrease!
+
diff --git a/FAQ.d/FAQ.Messages_selection.txt b/FAQ.d/FAQ.Messages_selection.txt
new file mode 100644
index 0000000..fd36125
--- /dev/null
+++ b/FAQ.d/FAQ.Messages_selection.txt
@@ -0,0 +1,93 @@
+#!/bin/cat
+$Id: FAQ.Messages_selection.txt,v 1.2 2015/10/21 15:39:57 gilles Exp gilles $
+
+====================================
+ Imapsync. How to select messages
+====================================
+
+=======================================================================
+Q. Is there a way we can specify a date range to sync emails?
+ If yes, can you please share an example?
+
+R. Yes, with the --search option.
+
+ imapsync ... --search "SENTSINCE 1-Jan-2010 SENTBEFORE 31-Dec-2010"
+
+ Jan
+ Feb
+ Mar
+ Apr
+ May
+ Jun
+ Jul
+ Aug
+ Sep
+ Oct
+ Nov
+ Dec
+
+=======================================================================
+Q. Is there a way we can specify an age to sync emails?
+ If yes, can you please share some examples?
+
+R. Yes, with the --maxage or the --minage option.
+
+E.1 Sync only messages less than 2 days old:
+
+ imapsync ... --maxage 2
+
+E.2 Sync only messages more than 2 days old:
+
+ imapsync ... --minage 2
+
+E.3 Sync only messages more than 30 days old and less than 365 days old:
+
+ imapsync ... --minage 30 --maxage 365
+
+E.4 Sync only messages less than 30 days old or more than 365 days old:
+
+ imapsync ... --maxage 30 --minage 365
+
+Full explanation:
+
+--maxage : Skip messages older than days.
+ final stats (skipped) don't count older messages
+ see also --minage
+--minage : Skip messages newer than days.
+ final stats (skipped) don't count newer messages
+ You can do (+ are the messages selected):
+ past|----maxage+++++++++++++++>now
+ past|+++++++++++++++minage---->now
+ past|----maxage+++++minage---->now (intersection)
+ past|++++minage-----maxage++++>now (union)
+
+
+
+=======================================================================
+Q. I want to sync messages based on their UID.
+
+R. First have in mind that UIDs are uniq only per folder, so work this
+ way only with one folder at a time, with --folder option.
+
+To show UIDs, there is the --debugLIST parameter.
+
+ imapsync ... --debugLIST
+
+To sync only a part of all messages, selected by UIDs
+from 10000 to 11000:
+
+ imapsync ... --search1 "UID 10000:11000"
+
+To sync from INBOX only 3 messages UIDs 20000 20002 20004:
+
+ imapsync ... --search1 'OR OR UID 20000 UID 20002 UID 20004' --folder INBOX
+
+To sync all messages from INBOX except 3 messages
+UIDs 20000 20002 20004:
+
+ imapsync ... --search1 'NOT OR OR UID 20000 UID 20002 UID 20004' --folder INBOX
+
+If you search n UIDs then you have to put n-1 OR in the search line.
+That's IMAP.
+
+
diff --git a/FAQ.d/FAQ.Oracle-UCS.txt b/FAQ.d/FAQ.Oracle-UCS.txt
new file mode 100644
index 0000000..dd1d3b6
--- /dev/null
+++ b/FAQ.d/FAQ.Oracle-UCS.txt
@@ -0,0 +1,15 @@
+#!/bin/cat
+$Id: FAQ.Oracle-UCS.txt,v 1.1 2015/07/20 04:34:32 gilles Exp gilles $
+
+=======================================================================
+ Imapsync. Oracle-UCS specific issues and solutions
+=======================================================================
+
+Oracle-UCS was previously Sun JES, IPlanet, etc.
+
+
+"NO Message contains NUL characters"
+--skipmess 'm/(\x00)+\Z/'
+
+"Message contains invalid header"
+--skipmess 'm/[\x80-\xff]/'
\ No newline at end of file
diff --git a/FAQ.d/FAQ.Security.txt b/FAQ.d/FAQ.Security.txt
new file mode 100644
index 0000000..0bec110
--- /dev/null
+++ b/FAQ.d/FAQ.Security.txt
@@ -0,0 +1,21 @@
+#!/bin/cat
+# $Id: FAQ.Security.txt,v 1.1 2015/10/21 14:18:27 gilles Exp gilles $
+
+======================================================================
+ Imapsync. Security issues and solutions
+======================================================================
+
+
+======================================================================
+Q. Imapsync used to use SSL_VERIFY_PEER now it uses SSL_VERIFY_NONE.
+ How can I change this back to the more secure SSL_VERIFY_PEER?
+
+
+R1. In function "sub set_ssl", replace
+ IO::Socket::SSL::SSL_VERIFY_NONE()
+by
+ IO::Socket::SSL::SSL_VERIFY_PEER()
+
+
+C1. Don't do this in function "sub set_tls" since it won't work by principle,
+ tls is done AFTER the application level connexion is established
diff --git a/FAQ.d/FAQ.SmarterMail.txt b/FAQ.d/FAQ.SmarterMail.txt
new file mode 100755
index 0000000..45d3ffe
--- /dev/null
+++ b/FAQ.d/FAQ.SmarterMail.txt
@@ -0,0 +1,46 @@
+#!/bin/cat
+$Id: FAQ.SmarterMail.txt,v 1.6 2015/11/30 02:58:25 gilles Exp gilles $
+
+=======================================================================
+ Imapsync. SmarterMail specific issues and solutions
+=======================================================================
+
+
+=======================================================================
+Q. Synchronizing from SmarterMail to XXX
+
+On Unix:
+imapsync --host1 imap.d1.org --user1 joe --password1 secret1 \
+ --host2 imap.d2.org --user2 joe --password2 secret2 \
+ --sep1 "/" --prefix1 "" --useheader Message-Id \
+ --regextrans2 "s,Deleted Items,Trash," \
+ --regextrans2 "s,Junk E-Mail,Junk," \
+ --regextrans2 "s,Sent Items,Sent,"
+
+On Windows:
+imapsync.exe --host1 imap.d1.org --user1 joe --password1 secret1 ^
+ --host2 imap.d2.org --user2 joe --password2 secret2 ^
+ --sep1 "/" --prefix1 "" --useheader Message-Id ^
+ --regextrans2 "s,Deleted Items,Trash," ^
+ --regextrans2 "s,Junk E-Mail,Junk," ^
+ --regextrans2 "s,Sent Items,Sent,"
+
+Maybe add other --regextrans2 to change folder names, for this
+see also http://imapsync.lamiral.info/FAQ.d/FAQ.Folders_Mapping.txt
+
+=======================================================================
+Q. Synchronizing from XXX to SmarterMail
+
+On Unix:
+imapsync --host1 imap.d1.org --user1 joe --password1 secret1 \
+ --host2 imap.d2.org --user2 joe --password2 secret2 \
+ --sep2 "/" --prefix2 "" --useheader Message-Id
+
+On Windows:
+imapsync.exe --host1 imap.d1.org --user1 joe --password1 secret1 ^
+ --host2 imap.d2.org --user2 joe --password2 secret2 ^
+ --sep2 "/" --prefix2 "" --useheader Message-Id
+
+
+=======================================================================
+
diff --git a/FAQ.d/FAQ.Various_Server_Softwares.txt b/FAQ.d/FAQ.Various_Server_Softwares.txt
new file mode 100644
index 0000000..9d9fc25
--- /dev/null
+++ b/FAQ.d/FAQ.Various_Server_Softwares.txt
@@ -0,0 +1,283 @@
+#!/bin/cat
+$Id: FAQ.Various_Server_Softwares.txt,v 1.2 2015/10/21 15:41:41 gilles Exp gilles $
+
+=======================================================================
+ Imapsync. Server software specific issues and solutions
+=======================================================================
+
+
+
+=======================================================================
+Q. From Zimbra to XXX
+
+imapsync ... \
+ --exclude "Conversation Action Settings" \
+ --exclude "Quick Step Settings" \
+ --exclude "News Feed"
+
+=======================================================================
+Q. From or to HMailServer version 4.4.1.
+
+R. You have to add prefix and separator manually because 4.4.1 doesn't
+honor the NAMESPACE imap command.
+
+Example for host1:
+
+imapsync ... \
+ --prefix1 "" --sep1 .
+
+No specific option for HMailServer 5.3.3 since NAMESPACE is supported.
+
+Maybe --subscribe_all will help you to see all migrated folders.
+
+
+=======================================================================
+Q. Synchronizing from Kerio Connect to XXX
+
+R. No special options required.
+See also:
+http://www.linux-france.org/prj/imapsync_list/msg01756.html
+http://www.safetynet-it.com/it-support/mac-kerio-server-to-microsoft-exchange-2010-migration-1/
+http://www.safetynet-it.com/it-support/mac-kerio-server-to-microsoft-exchange-2010-migration-2/
+
+
+=======================================================================
+Q. Synchronizing from Yahoo to XXX
+
+R. Use --host1 imap.mail.yahoo.com --ssl1
+
+./imapsync \
+ --host1 imap.mail.yahoo.com \
+ --user1 billy \
+ --password1 secret \
+ --ssl1 \
+ --host2 XXX \
+ --user2 billy \
+ --password2 secret
+
+SSL is mandatory for yahoo since november 2011.
+
+=======================================================================
+Q. from Microsoft's Exchange 2007 to Google Apps for your Domain
+ (GAFYD)
+
+R. Take a look at:
+http://mark.ossdl.de/2009/02/migrating-from-exchange-2007-to-google-apps-mail/
+
+
+=======================================================================
+Q. Migrating from or to Parallels Plex Server
+
+R. It depends on the OS
+
+Parallells Plesk Panel for Windows requires --sep2 / --prefix2 ""
+Parallells Plesk Panel for Linux works with default parameters.
+
+=======================================================================
+Q. I'm migrating from WU to Cyrus, and the mail folders are under
+ /home/user/mail but the tool copies everything in /home/user, how
+ can i avoid that?
+
+Two solutions:
+
+R. Use
+ imapsync ... --include '^mail'
+
+R. or (better)
+ imapsync ... --subscribed --subscribe
+
+
+=======================================================================
+Q. I'm migrating from WU to Cyrus, and the mail folders are under
+ /home/user/mail directory. When imapsync creates the folders in
+ the new cyrus imap server, it makes a folder "mail" and below that
+ folder puts all the mail folders the user have in /home/user/mail,
+ i would like to have all those folders directly under INBOX.
+
+R. Use
+ imapsync ... --regextrans2 's/^mail/INBOX/' --dry
+ look at the simulation and if all transformations seem
+ good then remove the --dry option.
+
+
+=======================================================================
+Q. Migrating from Groupwise to Cyrus
+
+R. By Jamie Neil:
+
+I eventually managed to get the mail to migrate without errors using the
+following options:
+
+--sep1 /
+ - doesn't report separator so has to be set explicitly.
+
+--nosyncacls
+ - doesn't support ACLs.
+
+--skipheader '^Content-Type'
+ - MIME separator IDs seem to change every time a mail is accessed so
+ this is required to stop duplicates.
+
+--maxage 3650
+ - some messages just don't seem to want to transfer and produce the
+ perl errors I mentioned before. This prevents the errors, but the
+ bad messages don't transfer.
+
+Even though the mail migrated OK, there are a couple of gotchas with
+Groupwise IMAP:
+
+1) Some of the GW folders are not real folders and are not available
+to IMAP, the main problem one being "Sent Items". I could find no way
+of coping the contents of these folders. The nearest I got was to
+create a "real" folder and copy/move the sent items into it, but
+imapsync still didn't see the messages (I think because there is
+something funny about the reported dates/sizes).
+
+It think this problem has been rectified in GW6.5.
+
+2) The "skipheader '^Content-Type'" directive is required to stop
+duplicate messages being created. GW seems to generate this field on
+the fly for messages that have MIME separators and so it's different
+every time.
+
+3) Version 6.0.1 of the Groupwise Internet Connector sucks. I was
+getting server aborts when I pushed it a bit hard! I eventually had to
+upgrade to 6.0.4 which seems to be a lot more stable.
+
+
+=======================================================================
+Q. Migrating from iPlanet Messaging Server
+5.2 Patch 2 (built Jul 14 2004)) to Groupwise 7.0
+I encounter many errors like this:
+"Error trying to append string: 17847 BAD APPEND"
+
+R. GroupWise 7 seems buggy. Apply GroupWise 7 support pack 1
+
+=======================================================================
+Q. Migrating from David Tobit V10 (DvISE Mail Access Server MA-...)
+
+R. Use the following options:
+
+imapsync ... --prefix1 "" --sep1 / --idatefromheader ^
+ --nofoldersizes --useuid --nocheckmessageexists
+
+=======================================================================
+Q. Migrating from David Tobit V8
+ ("* OK IMAP4rev1 DvISE Mail Access Server MA-8.10a (0126)")
+
+First try above V10 solution since improvments have been made
+to support Tobit.
+
+R. Use the following options :
+imapsync ... --prefix1 INBOX. --sep1 / --subscribe --subscribed
+
+=======================================================================
+Q. Migrating from Tobit David Server 6
+ ("DvISE Mail Access Server MA-6.60a (0118)")
+
+First try above V10 solution since improvments have been made
+to support Tobit.
+
+R. Look at the discussion:
+http://www.linux-france.org/prj/imapsync_list/msg00582.html
+http://www.linux-france.org/prj/imapsync_list/threads.html#00582
+patch saved in ./patches/imapsync-1.337_tobit_V6.patch
+
+=======================================================================
+Q. I need to migrate 1250 mailboxes, passwords are in a MySQL Database.
+Can you tell me if your script suits my needs?
+
+R. Mailboxes must exist before running imapsync.
+You have to extract users logins and passwords in a csv file.
+See the "HUGE MIGRATION" section in the README file.
+
+
+======================================================================
+Q: From MailEnable 1.75
+R: --sep1 "/" --prefix1 ""
+
+Q: From MailEnable 2.2
+R: --sep1 "." --prefix1 ""
+
+Q: To MailEnable
+R: --sep2 / --prefix2 "" --addheader --messageidnodomain --syncflagsaftercopy
+
+======================================================================
+Q. From GMX IMAP4 StreamProxy
+R. Use:
+ --prefix1 INBOX and --sep1 .
+
+======================================================================
+Q. From Courier to Archiveopteryx
+R. You can read http://www.archiveopteryx.org/migration/imapsync
+ Default values might be fine now with latest imapsync.
+
+======================================================================
+Q. To Sun Java(tm) System Messaging Server 6.2-7.05
+Q. To Communigate Pro - Solaris version
+
+R. See and run patches/imapsync_1.267_jari
+
+
+======================================================================
+Q. From Softalk Workgroup Mail 7.6.4
+
+R. Old Softalk releases don't support the IMAP SEARCH command.
+ Here are the options to get it working.
+
+imapsync ... --sep1 '.' --prefix1 '' \
+ --noabletosearch --nocheckmessageexists --addheader
+
+(Thanks to Andrew Tucker)
+
+======================================================================
+Q. From or to QQMail IMAP4Server
+
+R. imapsync ... --noabletosearch
+
+======================================================================
+Q. From FirstClass to XXX
+ http://www.firstclass.com/
+
+R. Migrating from FirstClass is not easy because FirstClass, strangely,
+ does not show all messages via IMAP. To make it show all messages,
+ a trick, painful to follow by hand, is moving emails
+ out and back in, for each folder. May be it can be done by a script.
+
+ FirstClass releases prior to release 12 do not shows the "Sent"
+ folder in IMAP but FirstClass release 12 shows it.
+ I advice you to upgrade to FirstClass release 12 before leaving it
+ with imapsync or another imap tool.
+
+Here is a command line used to migrate from FirtClass release 12:
+
+ imapsync ... \
+ --tmpdir /var/tmp --usecache \
+ --useheader Message-ID \
+ --idatefromheader \
+ --addheader \
+ --regextrans2 "s,(/|^) +,\$1,g" --regextrans2 "s, +(/|$),\$1,g" \
+ --regextrans2 "s/[\^]/_/g" \
+ --regextrans2 "s/['\"\\\\]/_/g" \
+ --regextrans2 "s,&AC8-,-,g" \
+ --regextrans2 "s,&APg-,oe,g"
+
+On Windows, in the previous example containing \$1 you have to
+replace the two \$1 by $1 (remove the \ before $).
+
+Special thanks to Kristian Wind and Joey Alexander for helping me
+writing this FAQ item.
+See also this worth reading discussion in a Zimbra forum:
+http://www.zimbra.com/forums/migration/20349-help-needed-migrating-firstclass.html
+
+======================================================================
+Q. From XXX to FTGate
+
+R. Do NOT use --usecache since new UIDs are not given by FTGate and also
+ badly guessed by imapsync. UIDEXPUNGE does not work so use also
+ --expunge2 when using --delete2
+
+ imapsync ... \
+ --sep2 / --prefix2 "" \
+ --useheader Message-Id \
+
diff --git a/FAQ.d/FAQ.XOAUTH2.txt b/FAQ.d/FAQ.XOAUTH2.txt
new file mode 100644
index 0000000..9e8c22d
--- /dev/null
+++ b/FAQ.d/FAQ.XOAUTH2.txt
@@ -0,0 +1,110 @@
+#!/bin/cat
+$Id: FAQ.XOAUTH2.txt,v 1.6 2015/11/30 23:40:10 gilles Exp gilles $
+
+=======================================================================
+ Imapsync. Using XOAUTH2 and XOAUTH authentication (Gmail)
+=======================================================================
+
+
+=======================================================================
+Q. Is XOAUTH2 authentication available with imapsync?
+
+R. Yes, but XOAUTH2 has been really tested on Unix systems,
+ less profund on Windows but it should work.
+
+First, consider the XOAUTH2 feature at a prototype level.
+
+Perl modules needed for xoauth2 are:
+ Crypt::OpenSSL::RSA
+ JSON
+ JSON::WebToken
+ LWP
+ HTML::Entities
+
+A easy way to install or upgrade Perl modules is to use cpanm command,
+also called cpanminus.
+
+ sudo cpanm JSON::WebToken JSON Crypt::OpenSSL::RSA LWP HTML::Entities
+
+The code and first explanation comes from Joaquin Lopez at
+https://github.com/imapsync/imapsync/pull/25
+http://www.linux-france.org/prj/imapsync_list/msg02129.html
+
+Also, the binary command "openssl" is needed since it is used to
+convert the pk12 file.
+On Windows I've tried xoauth2 with openssl from
+https://slproweb.com/download/Win32OpenSSL-1_0_2d.exe at
+https://slproweb.com/products/Win32OpenSSL.html
+
+
+Here is a complete example for Gmail. It is a little stupid
+since it is the same account as source and destination.
+
+All xoauth2 is given via the --password1 parameter.
+It has the form:
+
+ --password1 "A;B;C"
+
+where A = 108687549524-gj68fg5ho5icoicv3v79dq2rcuf5c85e@developer.gserviceaccount.com
+is the name of the Google Developer API service account.
+
+where B = /g/var/pass/imapsync-xoauth2-15f8456ad5b7_notasecret.p12
+is the location of the keyfile associated with it.
+
+where C = notasecret
+is the password to access the keyfile.
+
+
+imapsync \
+ --host1 imap.gmail.com --ssl1 --user1 gilles.lamiral@gmail.com \
+ --password1 "108687549524-gj68fg5ho5icoicv3v79dq2rcuf5c85e@developer.gserviceaccount.com;/g/var/pass/imapsync-xoauth2-15f8456ad5b7_notasecret.p12;notasecret" \
+ --host2 imap.gmail.com --ssl2 --user2 gilles.lamiral@gmail.com \
+ --password2 "108687549524-gj68fg5ho5icoicv3v79dq2rcuf5c85e@developer.gserviceaccount.com;/g/var/pass/imapsync-xoauth2-15f8456ad5b7_notasecret.p12" \
+ --justfoldersizes --nofoldersizes \
+ --authmech1 XOAUTH2 --authmech2 XOAUTH2 --debug
+
+Use your own xoauth2 values.
+
+=======================================================================
+Q. How to use XOAUTH to globally authenticate gmail users?
+
+R0. XOAUTH is considered obsolete and superseded by XOAUTH2
+ Anyway the manage part might be the same (I don't know).
+
+R1. The XOAUTH code and this FAQ item come from Eduardo Bortoluzzi
+ Thanks Eduardo!
+
+R2. In case you still have to use XOAUTH, here is the method:
+
+ The goal of OAUTH is to migrate all users from/to Google Apps
+ Premier Edition without knowing their passwords.
+
+ The global password is available at the Google Apps control panel,
+ at Advanced Tools -> Manage OAuth domain key.
+
+./imapsync \
+ --host1 imap.gmail.com --ssl1 \
+ --user1 foo@lab3.dedal.br \
+ --password1 secret1 \
+ --authmech1 XOAUTH \
+ --host2 imap.gmail.com --ssl2 \
+ --user2 bar@lab3.dedal.br \
+ --password2 secret2 \
+ --authmech2 XOAUTH
+
+Google Apps is a paid service, but you can try it for 30 days without any cost.
+
+Some notes about configuring the Google Apps XOAUTH:
+
+ On "Advanced Tools > Manage OAuth domain key > Two-legged OAuth access control"
+ the "Allow access to all APIs" must be checked
+ (https://support.google.com/a/bin/answer.py?answer=162105)
+
+ OR
+
+ On "Advanced Tools > Manage third party OAuth client access",
+ the configured costumer key must have the scope
+ "https://mail.google.com/" configured
+ (https://support.google.com/a/bin/answer.py?answer=162106).
+
+
diff --git a/INSTALL b/INSTALL
index 1beaf83..9f7e73d 100644
--- a/INSTALL
+++ b/INSTALL
@@ -1,4 +1,4 @@
-# $Id: INSTALL,v 1.47 2015/03/16 16:36:10 gilles Exp gilles $
+# $Id: INSTALL,v 1.48 2015/07/18 20:25:03 gilles Exp gilles $
#
# This is the main INSTALL file for imapsync.
# imapsync : IMAP sync and migrate tool.
@@ -110,15 +110,18 @@ http://imapsync.lamiral.info/INSTALL.d/INSTALL.Mandriva.txt
Purchase imapsync at
http://imapsync.lamiral.info/
-You'll have access to a compressed tarball called imapsync-x.xxx.tgz
-where x.xxx is the version number. Untar the tarball where
+or get it anywhere.
+
+You have access to a compressed tarball called imapsync-1.xxx.tgz
+where 1.xxx is the version number. Untar the tarball where
you want:
- tar xzvf imapsync-x.xxx.tgz
+ cd
+ tar xzvf imapsync-1.xxx.tgz
-Go into the directory imapsync-x.xxx
+Go into the directory imapsync-1.xxx
- cd imapsync-x.xxx
+ cd imapsync-1.xxx
You can easily detect any missing Perl modules via the
script prerequisites_imapsync located in the INSTALL.d directory:
diff --git a/INSTALL.d/INSTALL.CPanel.txt b/INSTALL.d/INSTALL.CPanel.txt
index fb0e4bd..870cf64 100644
--- a/INSTALL.d/INSTALL.CPanel.txt
+++ b/INSTALL.d/INSTALL.CPanel.txt
@@ -1,3 +1,6 @@
+#!/bin/cat
+# $Id: INSTALL.CPanel.txt,v 1.4 2015/09/19 08:55:25 gilles Exp gilles $
+
=================================
= Installing imapsync on CPanel =
=================================
diff --git a/INSTALL.d/INSTALL.Centos.txt b/INSTALL.d/INSTALL.Centos.txt
index 00ef7bf..9445c20 100644
--- a/INSTALL.d/INSTALL.Centos.txt
+++ b/INSTALL.d/INSTALL.Centos.txt
@@ -1,3 +1,5 @@
+#!/bin/cat
+# $Id: INSTALL.Centos.txt,v 1.4 2015/09/19 08:55:25 gilles Exp gilles $
=================================
= Installing imapsync on CentOS =
@@ -22,14 +24,19 @@ A good test that shows also the basic example:
imapsync
+A live test:
+
+ imapsync --testslive
+
+Unit tests:
+
+ imapsync --tests
==============
== Centos 6 ==
==============
-This section has not been tested with latest imapsync releases (2014 and after)
-so it can fail. In case it happens, just write me at gilles.lamiral@laposte.net
-and we will fix it together.
+This section has been tested with imapsync release 1.644
First, install access to the Epel repository
@@ -37,15 +44,24 @@ First, install access to the Epel repository
rpm -Uvh epel-release-6-8.noarch.rpm
Then install all other packages via yum:
-
- yum install \
-perl-Mail-IMAPClient \
-"perl(Term::ReadKey)" \
-"perl(Authen::NTLM)" \
-perl-Data-Uniqid \
-perl-File-Copy-Recursive \
-perl-IO-Tee \
-perl-Unicode-String
+
+ yum install \
+ perl-Digest-HMAC \
+ perl-NTLM \
+ perl-Compress-Zlib \
+ perl-Data-Uniqid \
+ perl-Digest-HMAC \
+ perl-File-Copy-Recursive \
+ perl-IO-Socket-SSL \
+ perl-IO-Socket-INET6 \
+ perl-IO-Tee \
+ perl-Mail-IMAPClient \
+ perl-Parse-RecDescent \
+ perl-TermReadKey \
+ perl-Test-Simple \
+ perl-Test-Pod \
+ perl-Unicode-String \
+ perl-URI
diff --git a/INSTALL.d/INSTALL.Darwin.txt b/INSTALL.d/INSTALL.Darwin.txt
index a2b6dca..bae24a0 100644
--- a/INSTALL.d/INSTALL.Darwin.txt
+++ b/INSTALL.d/INSTALL.Darwin.txt
@@ -1,76 +1,73 @@
+#!/bin/cat
+# $Id: INSTALL.Darwin.txt,v 1.10 2015/09/19 08:55:25 gilles Exp gilles $
-# $Id: INSTALL.Darwin.txt,v 1.6 2015/03/16 16:29:27 gilles Exp gilles $
+===================================================
+= Installing imapsync binary on Darwin / Mac OS X =
+===================================================
-============================================
-= Installing imapsync on Darwin / Mac OS X =
-============================================
-
-First let's configure the cpan command in order it modify only a
-very local installation, local to a user, the user you're logged in.
+There is a standalone imapsync binary for Mac OS X called imapsync_bin_Darwin,
+available in the compressed tarball called imapsync-1.xxx.tgz
+where 1.xxx is the version number. I suppose this tarball is put
+under your $HOME directory, let say /Users/gilles/, but you can
+put it anywhere.
Open a terminal: /Applications/Utilities/Terminal double-click on Terminal.
-In order to do a local install, we have to take a fresh start.
-In this terminal, type the following (or better copy-paste this line and press RETURN):
- rm -f .cpan/CPAN/MyConfig.pm
- cpan
+Untar the tarball where you want:
-cpan should ask for an automatic configuration, say yes.
-Example of output:
+ cd
+ tar xzvf /Users/gilles/imapsync-1.xxx.tgz
-------------------------------------------------------------------------------
-Would you like to configure as much as possible automatically? [yes]
-...
-What approach do you want? (Choose 'local::lib', 'sudo' or 'manual')
- [local::lib]
-------------------------------------------------------------------------------
-
+Go into the directory imapsync-1.xxx
-At the end of the run, cpan might propose to add some lines in your .bashrc file.
-Say yes. The output on the screen is something like the following:
+ cd imapsync-1.xxx
-------------------------------------------------------------------------------
-...
-local::lib is installed. You must now add the following environment variables
-to your shell configuration files (or registry, if you are on Windows) and
-then restart your command line shell and CPAN before installing modules:
-PERL_MB_OPT="--install_base \"/Users/gilles/perl5\""; export PERL_MB_OPT;
-PERL_MM_OPT="INSTALL_BASE=/Users/gilles/perl5"; export PERL_MM_OPT;
+First let's have a simple run to see if imapsync_bin_Darwin works.
+You should see some help about options and an example at the end
+of this run:
-Would you like me to append that to /home/Users/.bashrc now? [yes]
-commit: wrote '/Users/gilles/.cpan/CPAN/MyConfig.pm'
-...
-------------------------------------------------------------------------------
+ ./imapsync_bin_Darwin
-You have to source (the command to source is "." ) your .bashrc and run the "cpan -i" command:
+To go further, perform a complete test with two
+real IMAP server accounts:
+
+ ./imapsync_bin_Darwin --testslive
- . .bashrc
+If this sync works fine then imapsync_bin_Darwin is ready for any
+imap account synchronization.
-The next time you use cpan command, it will install Perl modules locally,
-where you have permission to create files and directories, something like
-the path /Users/gilles/perl5/ (where gilles is replaced by your login name).
-Next, let's get a script that will check your Perl installation.
-Open a terminal: /Applications/Utilities/Terminal double-click on Terminal.
-In this terminal, type the following (or better copy-paste this line and press RETURN):
+===================================================
+= Installing imapsync script on Darwin / Mac OS X =
+===================================================
- curl -L http://imapsync.lamiral.info/INSTALL.d/prerequisites_imapsync > prerequisites_imapsync
-Now you should have a script named "prerequisites_imapsync" in the current directory.
-Let's execute it with a shell, type:
+wget --no-check-certificate -O- http://cpanmin.us | perl - -l ~/perl5 App::cpanminus local::lib
+eval `perl -I ~/perl5/lib/perl5 -Mlocal::lib`
+perl -I ~/perl5/lib/perl5 -Mlocal::lib
- sh prerequisites_imapsync
+echo 'eval `perl -I ~/perl5/lib/perl5 -Mlocal::lib`' >> ~/.profile
+echo 'export MANPATH=$HOME/perl5/man:$MANPATH' >> ~/.profile
+cat ~/.profile
+cpanm CPAN
-When "sh prerequisites_imapsync" command is ended it will propose you
-to execute a "cpan -i ..." command to install the missing Perl modules.
-The "..." in "cpan -i ..." have to be replaced by the list proposed
-in the last output line of a "sh prerequisites_imapsync" run.
-For example it can be:
+curl -L http://imapsync.lamiral.info/INSTALL.d/prerequisites_imapsync > prerequisites_imapsync
+sh prerequisites_imapsync
- cpan -i Authen::NTLM Data::Uniqid File::Copy::Recursive IO::Tee Mail::IMAPClient Unicode::String
+cpanm Authen::NTLM
+cpanm File::Copy::Recursive IO::Tee
+cpanm Mail::IMAPClient
+cpanm Unicode::String
-Once you've run the "cpan -i" command, you can rerun "sh prerequisites_imapsync"
+wget -c http://imapsync.lamiral.info/imapsync
+./imapsync
+perl ./imapsync
+perl ./imapsync --modules
+cpanm Data::Uniqid
+cpanm JSON::WebToken
+
+You can rerun "sh prerequisites_imapsync"
to verify everything is ok:
sh prerequisites_imapsync
@@ -80,6 +77,20 @@ When everything is ok the script execution ends with this sentence
Now imapsync should work on your system.
+=================================================
+= Building imapsync binary on Darwin / Mac OS X =
+=================================================
+
+cpanm Module::ScanDeps
+cpanm Module::ScanDeps
+cpanm PAR::Packer
+
+pp -o imapsync.bin imapsync
+
+./imapsync.bin
+./imapsync.bin --testslive
+./imapsync.bin --tests
+./imapsync.bin --module
diff --git a/INSTALL.d/INSTALL.Debian.txt b/INSTALL.d/INSTALL.Debian.txt
index 1137002..4d1967c 100644
--- a/INSTALL.d/INSTALL.Debian.txt
+++ b/INSTALL.d/INSTALL.Debian.txt
@@ -1,3 +1,5 @@
+#!/bin/cat
+# $Id: INSTALL.Debian.txt,v 1.5 2015/09/19 08:55:25 gilles Exp gilles $
========================================
= Installing imapsync on Debian 6 or 7 =
@@ -71,6 +73,10 @@ liburi-perl
perl -MCPAN -e "install Data::Uniqid"
perl -MCPAN -e "install Authen::NTLM"
+ perl -MCPAN -e "install Mail::IMAPClient"
+
+Latest command is because the Perl module Mail::IMAPClient
+is too old on Debian 6 (it's release "buggy" 3.25).
Now a good dependencies test that shows also the basic example:
diff --git a/INSTALL.d/INSTALL.FreeBSD.txt b/INSTALL.d/INSTALL.FreeBSD.txt
index 990b8db..2920100 100644
--- a/INSTALL.d/INSTALL.FreeBSD.txt
+++ b/INSTALL.d/INSTALL.FreeBSD.txt
@@ -1,7 +1,9 @@
+#!/bin/cat
+# $Id: INSTALL.FreeBSD.txt,v 1.6 2015/09/19 08:55:25 gilles Exp gilles $
+
==================================
= Installing imapsync on FreeBSD =
==================================
-$Id: INSTALL.FreeBSD.txt,v 1.3 2015/03/16 16:32:06 gilles Exp gilles $
Thanks to Kurt Jaeger pi@FreeBSD.org a imapsync package is available in FreeBSD
http://portsmon.freebsd.org/portoverview.py?category=mail&portname=imapsync
@@ -14,4 +16,4 @@ or if you're already root on the console:
pkg install imapsync
Tested 7 March 2015 on FreeBSD 10.1-RELEASE
-
\ No newline at end of file
+
diff --git a/INSTALL.d/INSTALL.Mandriva.txt b/INSTALL.d/INSTALL.Mandriva.txt
index ab34e7d..315c5d8 100644
--- a/INSTALL.d/INSTALL.Mandriva.txt
+++ b/INSTALL.d/INSTALL.Mandriva.txt
@@ -1,3 +1,5 @@
+#!/bin/cat
+# $Id: INSTALL.Mandriva.txt,v 1.4 2015/09/19 08:55:25 gilles Exp gilles $
=====================================
== Installing imapsync on Mandriva ==
diff --git a/INSTALL.d/INSTALL.Ubuntu.txt b/INSTALL.d/INSTALL.Ubuntu.txt
index 9a7d3ef..6e2bd1e 100644
--- a/INSTALL.d/INSTALL.Ubuntu.txt
+++ b/INSTALL.d/INSTALL.Ubuntu.txt
@@ -1,3 +1,5 @@
+#!/bin/cat
+# $Id: INSTALL.Ubuntu.txt,v 1.4 2015/09/19 08:55:25 gilles Exp gilles $
=================================
= Installing imapsync on Ubuntu =
diff --git a/LICENSE b/LICENSE
index 4dde4a0..846c367 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,5 +1,5 @@
NO LIMIT PUBLIC LICENSE
- Version 0, June 2012
+ Version 0/0, June 2012
Gilles LAMIRAL
La Billais
@@ -10,6 +10,6 @@ France
Terms and conditions for copying, distribution, modification
or anything else.
- 0 No limit to do anything with this work and this license.
+ 0 No limits to do anything with this work and this license.
1 GOTO 0
diff --git a/Makefile b/Makefile
index 76925bc..75ad822 100644
--- a/Makefile
+++ b/Makefile
@@ -1,5 +1,5 @@
-# $Id: Makefile,v 1.189 2015/07/17 17:36:56 gilles Exp gilles $
+# $Id: Makefile,v 1.209 2015/12/03 03:25:22 gilles Exp gilles $
.PHONY: help usage all
@@ -21,10 +21,14 @@ usage:
@echo "make W/test3.bat # run W/test3.bat on win32"
@echo "make W/test_reg.bat # run W/test_reg.bat on win32"
@echo "make W/test_exe_2.bat # run W/test_exe_2.bat on win32"
- @echo "make prereq_win32 # run W/install_modules.bat on win32"
+ @echo "make examples/sync_loop_windows.bat # run examples/sync_loop_windows.bat on win32"
+
+ @echo "make win32_prereq # run W/install_modules.bat on win32"
+ @echo "make win32_update_ssl # run W/install_module_ssl.bat on win32"
@echo "make all "
@echo "make upload_tests # upload tests.sh"
@echo "make upload_index"
+ @echo "make upload_FAQ # upload FAQs and documentation"
@echo "make valid_index # check index.shtml for good syntax"
@echo "make upload_ks"
@echo "make imapsync.exe"
@@ -45,7 +49,7 @@ VERSION=$(shell perl -I$(IMAPClient) ./imapsync --version 2>/dev/null || cat VER
VERSION_EXE=$(shell cat ./VERSION_EXE)
HELLO=$(shell date;uname -a)
-IMAPClient_3xx=./W/Mail-IMAPClient-3.35/lib
+IMAPClient_3xx=./W/Mail-IMAPClient-3.37/lib
IMAPClient=$(IMAPClient_3xx)
HOSTNAME = $(shell hostname -s)
@@ -62,7 +66,7 @@ hello:
@echo "$(BIN_NAME)"
-all: ChangeLog README VERSION OPTIONS W/imapsync.1 prereq perlcritic bin mac imapsync.exe VERSION_EXE
+all: ChangeLog README VERSION OPTIONS W/imapsync.1 biz prereq allcritic bin mac imapsync.exe VERSION_EXE
testp :
sh INSTALL.d/prerequisites_imapsync
@@ -135,16 +139,18 @@ install: testp W/imapsync.1
ci: cidone
cidone:
- rcsdiff RCS/*
- cd W && rcsdiff RCS/*
- cd S && rcsdiff RCS/*
- cd examples && rcsdiff RCS/*
+ rcsdiff RCS/*
+ rcsdiff W/*.bat W/*.out W/*.txt W/*.htaccess W/*.shtml W/*.t2t
+ rcsdiff S/*.txt S/*.shtml
+ rcsdiff INSTALL.d/*.txt INSTALL.d/prerequisites_imapsync
+ rcsdiff FAQ.d/*txt
+ rcsdiff examples/*.sh examples/*.bat examples/*.txt
###############
# Local goals
###############
-.PHONY: prereq test tests testp testf test3xx testv3 perlcritic
+.PHONY: prereq test tests testp testf test3xx testv3 perlcritic allcritic
prereq: W/prereq.scandeps
@@ -154,16 +160,26 @@ W/prereq.scandeps: INSTALL.d/prerequisites_imapsync imapsync
-perlcritic: W/perlcritic_3.out W/perlcritic_2.out
+perlcritic: W/perlcritic_3.out W/perlcritic_2.out
+
+allcritic: W/perlcritic_4.out W/perlcritic_3.out W/perlcritic_2.out W/perlcritic_1.out
W/perlcritic_1.out: imapsync
perlcritic -1 imapsync > W/perlcritic_1.out || :
+ echo | ci -l W/perlcritic_1.out
W/perlcritic_2.out: imapsync
perlcritic -2 imapsync > W/perlcritic_2.out || :
+ echo | ci -l W/perlcritic_2.out
W/perlcritic_3.out: imapsync
perlcritic -3 imapsync > W/perlcritic_3.out || :
+ echo | ci -l W/perlcritic_3.out
+
+W/perlcritic_4.out: imapsync
+ perlcritic -4 imapsync > W/perlcritic_4.out || :
+ echo | ci -l W/perlcritic_4.out
+
test_quick : test_quick_3xx
@@ -208,13 +224,18 @@ W/test_tests.bat:
scp imapsync W/test_tests.bat Admin@c:'C:/msys/1.0/home/Admin/imapsync/'
ssh Admin@c 'C:/msys/1.0/home/Admin/imapsync/test_tests.bat'
-.PHONY: W/*.bat
+.PHONY: W/*.bat examples/*
+examples/sync_loop_windows.bat:
+ unix2dos examples/sync_loop_windows.bat
+ scp imapsync examples/file.txt examples/sync_loop_windows.bat Admin@c:'C:/msys/1.0/home/Admin/imapsync/'
+ ssh Admin@c 'C:/msys/1.0/home/Admin/imapsync/sync_loop_windows.bat --nodry --dry --nodry'
+# ssh Admin@c 'C:/msys/1.0/home/Admin/imapsync/sync_loop_windows.bat '
W/test2.bat:
unix2dos W/test2.bat
- scp imapsync examples/file.txt W/test2.bat Admin@c:'C:/msys/1.0/home/Admin/imapsync/'
+ scp imapsync W/test2.bat Admin@c:'C:/msys/1.0/home/Admin/imapsync/'
ssh Admin@c 'C:/msys/1.0/home/Admin/imapsync/test2.bat'
W/test3.bat:
@@ -240,23 +261,32 @@ W/test3_gmail.bat:
test_imapsync_exe:
unix2dos W/test_exe.bat
scp W/test_exe.bat Admin@c:'C:/msys/1.0/home/Admin/imapsync/'
- time ssh Admin@c 'C:/msys/1.0/home/Admin/imapsync/test_exe.bat'
+ ssh Admin@c 'C:/msys/1.0/home/Admin/imapsync/test_exe.bat'
-prereq_win32:
+win32_prereq:
unix2dos W/install_modules.bat
scp W/install_modules.bat Admin@c:'C:/msys/1.0/home/Admin/imapsync/'
+ ssh Admin@c 'C:/msys/1.0/home/Admin/imapsync/install_modules.bat'
+win32_update_ssl:
+ scp W/install_module_ssl.bat Admin@c:'C:/msys/1.0/home/Admin/imapsync/'
+ ssh Admin@c 'C:/msys/1.0/home/Admin/imapsync/install_module_ssl.bat'
+
+W/install_module_one.bat:
+ unix2dos W/install_module_one.bat
+ scp W/install_module_one.bat Admin@c:'C:/msys/1.0/home/Admin/imapsync/'
+ ssh Admin@c 'C:/msys/1.0/home/Admin/imapsync/install_module_one.bat'
imapsync.exe: imapsync
rcsdiff imapsync
ssh Admin@c 'perl -V'
(date "+%s"| tr "\n" " "; echo -n "BEGIN " $(VERSION) ": "; date) >> W/.BUILD_EXE_TIME
- unix2dos W/*.bat examples/*.bat
+ unix2dos W/build_exe.bat W/test_exe.bat W/install_modules.bat
scp W/install_modules.bat Admin@c:'C:/msys/1.0/home/Admin/imapsync/'
- # ssh Admin@c 'C:/msys/1.0/home/Admin/imapsync/install_modules.bat'
scp imapsync W/build_exe.bat W/test_exe.bat Admin@c:'C:/msys/1.0/home/Admin/imapsync/'
ssh Admin@c 'C:/msys/1.0/home/Admin/imapsync/build_exe.bat'
ssh Admin@c 'C:/msys/1.0/home/Admin/imapsync/test_exe.bat'
+ rm -f imapsync.exe
scp Admin@c:'C:/msys/1.0/home/Admin/imapsync/imapsync.exe' .
(date "+%s"| tr "\n" " "; echo -n "END " $(VERSION) ": "; date) >> W/.BUILD_EXE_TIME
@@ -265,6 +295,7 @@ exe: imapsync W/build_exe.bat dosify_bat
scp imapsync W/build_exe.bat Admin@c:'C:/msys/1.0/home/Admin/imapsync/'
ssh Admin@c 'C:/msys/1.0/home/Admin/imapsync/build_exe.bat'
ssh Admin@c 'C:/msys/1.0/home/Admin/imapsync/imapsync.exe --modules_version'
+ rm -f imapsync.exe
scp Admin@c:'C:/msys/1.0/home/Admin/imapsync/imapsync.exe' .
(date "+%s"| tr "\n" " "; echo -n "END " $(VERSION) ": "; date) >> W/.BUILD_EXE_TIME
@@ -370,7 +401,13 @@ README_dist.txt: dist_dir
sh W/tools/gen_README_dist > $(DIST_PATH)/README_dist.txt
unix2dos $(DIST_PATH)/README_dist.txt
-.PHONY: publish upload_ks ks valid_index
+.PHONY: publish upload_ks ks valid_index biz
+
+biz: S/imapsync_sold_by_country.txt
+
+S/imapsync_sold_by_country.txt: imapsync
+ cd S/ && /g/bin/imapsync_by_country && echo | ci -l imapsync_sold_by_country.txt
+
ks:
rsync -avHz --delete --exclude imapsync.exe \
@@ -387,19 +424,9 @@ upload_tests: tests.sh
gilles@ks.lamiral.info:public_html/imapsync/
-#upload_ks: ci tarball
-upload_ks: ci tarball
- rsync -aHv $(PUBLIC) ../imapsync_website/
- rsync -aHv $(PUBLIC_W) ../imapsync_website/W/
- rsync -aHv --delete ./W/images/ ../imapsync_website/W/images/
- rsync -aHv --delete ./W/ks.htaccess ../imapsync_website/.htaccess
- rsync -aHv --delete ./dist/ ../imapsync_website/dist/
- rsync -aHv --delete ./examples/ ../imapsync_website/examples/
- rsync -aHv --delete ./INSTALL.d/ ../imapsync_website/INSTALL.d/
- rsync -aHvz --delete ../imapsync_website/ root@ks.lamiral.info:/var/www/imapsync/
-publish: dist upload_ks ksa
+publish: dist upload_ks ksa
echo Now ou can do make ml
PUBLIC = ./ChangeLog ./NOLIMIT ./LICENSE ./CREDITS ./FAQ \
@@ -408,7 +435,7 @@ PUBLIC = ./ChangeLog ./NOLIMIT ./LICENSE ./CREDITS ./FAQ \
./README ./OPTIONS ./TODO ./TUTORIAL.html ./GOOD_PRACTICES.html
PUBLIC_W = ./W/style.css ./W/tw-hash.html \
-./W/TIME \
+./W/TIME.txt \
./W/paypal.shtml ./W/paypal_return.shtml
@@ -445,11 +472,11 @@ checklinkext: S/news.shtml S/external.shtml S/imapservers.shtml S/template.shtm
validate --verbose index.shtml S/*.shtml
touch .valid.index.shtml
-.PHONY: upload_index
+.PHONY: upload_index upload_FAQ
upload_index: .valid.index.shtml
- rcsdiff index.shtml S/*.shtml FAQ FAQ.d/*.txt INSTALL LICENSE CREDITS TODO W/*.bat examples/*.bat index.shtml INSTALL.d/prerequisites_imapsync imapsync
- rsync -avH index.shtml FAQ INSTALL OPTIONS NOLIMIT LICENSE CREDITS TODO TUTORIAL.html GOOD_PRACTICES.html imapsync imapsync.exe $(BIN_NAME) imapsync_Darwin_$(VERSION) ../imapsync_website/
+ rcsdiff index.shtml S/*.shtml FAQ FAQ.d/*.txt INSTALL LICENSE CREDITS TODO W/*.bat examples/*.bat index.shtml INSTALL.d/*.txt imapsync
+ rsync -avH index.shtml FAQ INSTALL OPTIONS NOLIMIT LICENSE CREDITS TODO TUTORIAL.html GOOD_PRACTICES.html imapsync imapsync.exe $(BIN_NAME) imapsync_bin_Darwin ../imapsync_website/
rsync -avH $(PUBLIC_W) ../imapsync_website/W/
rsync -avH S/ ../imapsync_website/S/
rsync -avH W/images/ ../imapsync_website/W/images/
@@ -458,3 +485,23 @@ upload_index: .valid.index.shtml
rsync -aHv --delete ./FAQ.d/ ../imapsync_website/FAQ.d/
rsync -aHvz --delete ../imapsync_website/ root@ks.lamiral.info:/var/www/imapsync/
+
+upload_FAQ:
+ rcsdiff FAQ FAQ.d/*.txt INSTALL LICENSE CREDITS TODO INSTALL.d/*.txt
+ rsync -avH FAQ INSTALL OPTIONS CREDITS TODO TUTORIAL.html GOOD_PRACTICES.html ../imapsync_website/
+ rsync -aHv --delete ./INSTALL.d/ ../imapsync_website/INSTALL.d/
+ rsync -aHv --delete ./FAQ.d/ ../imapsync_website/FAQ.d/
+ rsync -aHvz --delete ../imapsync_website/ root@ks.lamiral.info:/var/www/imapsync/
+
+
+upload_ks: ci tarball
+ rsync -aHv $(PUBLIC) ../imapsync_website/
+ rsync -aHv $(PUBLIC_W) ../imapsync_website/W/
+ rsync -aHv --delete ./W/images/ ../imapsync_website/W/images/
+ rsync -aHv --delete ./W/ks.htaccess ../imapsync_website/.htaccess
+ rsync -avH ./S/ ../imapsync_website/S/
+ rsync -aHv --delete ./dist/ ../imapsync_website/dist/
+ rsync -aHv --delete ./examples/ ../imapsync_website/examples/
+ rsync -aHv --delete ./INSTALL.d/ ../imapsync_website/INSTALL.d/
+ rsync -aHv --delete ./FAQ.d/ ../imapsync_website/FAQ.d/
+ rsync -aHvz --delete ../imapsync_website/ root@ks.lamiral.info:/var/www/imapsync/
diff --git a/NOLIMIT b/NOLIMIT
index 4dde4a0..846c367 100644
--- a/NOLIMIT
+++ b/NOLIMIT
@@ -1,5 +1,5 @@
NO LIMIT PUBLIC LICENSE
- Version 0, June 2012
+ Version 0/0, June 2012
Gilles LAMIRAL
La Billais
@@ -10,6 +10,6 @@ France
Terms and conditions for copying, distribution, modification
or anything else.
- 0 No limit to do anything with this work and this license.
+ 0 No limits to do anything with this work and this license.
1 GOTO 0
diff --git a/OPTIONS b/OPTIONS
index 00138ad..b352bf9 100644
--- a/OPTIONS
+++ b/OPTIONS
@@ -2,242 +2,252 @@
usage: ./imapsync [options]
Several options are mandatory.
+str means string
+int means integer
+reg means regular expression
+cmd means command
---dry : Makes imapsync doing nothing, just print what would
- be done without --dry.
+--dry : Makes imapsync doing nothing, just print what would
+ be done without --dry.
---host1 : Source or "from" imap server. Mandatory.
---port1 : Port to connect on host1. Default is 143, 993 if --ssl1
---user1 : User to login on host1. Mandatory.
---showpasswords : Shows passwords on output instead of "MASKED".
- Useful to restart a complete run by just reading the log.
---password1 : Password for the user1.
---host2 : "destination" imap server. Mandatory.
---port2 : Port to connect on host2. Default is 143, 993 if --ssl2
---user2 : User to login on host2. Mandatory.
---password2 : Password for the user2.
+--host1 str : Source or "from" imap server. Mandatory.
+--port1 int : Port to connect on host1. Default is 143, 993 if --ssl1
+--user1 str : User to login on host1. Mandatory.
+--showpasswords : Shows passwords on output instead of "MASKED".
+ Useful to restart a complete run by just reading the log.
+--password1 str : Password for the user1.
+--host2 str : "destination" imap server. Mandatory.
+--port2 int : Port to connect on host2. Default is 143, 993 if --ssl2
+--user2 str : User to login on host2. Mandatory.
+--password2 str : Password for the user2.
---passfile1 : Password file for the user1. It must contain the
- password on the first line. This option avoids to show
- the password on the command line like --password1 does.
---passfile2 : Password file for the user2. Contains the password.
+--passfile1 str : Password file for the user1. It must contain the
+ password on the first line. This option avoids to show
+ the password on the command line like --password1 does.
+--passfile2 str : Password file for the user2. Contains the password.
---ssl1 : Use a SSL connection on host1.
---ssl2 : Use a SSL connection on host2.
---tls1 : Use a TLS connection on host1.
---tls2 : Use a TLS connection on host2.
---timeout : Connections timeout in seconds. Default is 120.
- 0 means no timeout.
+--ssl1 : Use a SSL connection on host1.
+--ssl2 : Use a SSL connection on host2.
+--tls1 : Use a TLS connection on host1.
+--tls2 : Use a TLS connection on host2.
+--timeout int : Connections timeout in seconds. Default is 120.
+ 0 means no timeout.
---authmech1 : Auth mechanism to use with host1:
- PLAIN, LOGIN, CRAM-MD5 etc. Use UPPERCASE.
---authmech2 : Auth mechanism to use with host2. See --authmech1
+--authmech1 str : Auth mechanism to use with host1:
+ PLAIN, LOGIN, CRAM-MD5 etc. Use UPPERCASE.
+--authmech2 str : Auth mechanism to use with host2. See --authmech1
---authuser1 : User to auth with on host1 (admin user).
- Avoid using --authmech1 SOMETHING with --authuser1.
---authuser2 : User to auth with on host2 (admin user).
---proxyauth1 : Use proxyauth on host1. Requires --authuser1.
- Required by Sun/iPlanet/Netscape IMAP servers to
- be able to use an administrative user.
---proxyauth2 : Use proxyauth on host2. Requires --authuser2.
+--authuser1 str : User to auth with on host1 (admin user).
+ Avoid using --authmech1 SOMETHING with --authuser1.
+--authuser2 str : User to auth with on host2 (admin user).
+--proxyauth1 : Use proxyauth on host1. Requires --authuser1.
+ Required by Sun/iPlanet/Netscape IMAP servers to
+ be able to use an administrative user.
+--proxyauth2 : Use proxyauth on host2. Requires --authuser2.
---authmd51 : Use MD5 authentification for host1.
---authmd52 : Use MD5 authentification for host2.
---domain1 : Domain on host1 (NTLM authentication).
---domain2 : Domain on host2 (NTLM authentication).
+--authmd51 : Use MD5 authentification for host1.
+--authmd52 : Use MD5 authentification for host2.
+--domain1 str : Domain on host1 (NTLM authentication).
+--domain2 str : Domain on host2 (NTLM authentication).
---folder : Sync this folder.
---folder : and this one, etc.
---folderrec : Sync this folder recursively.
---folderrec : and this one, etc.
+--folder str : Sync this folder.
+--folder str : and this one, etc.
+--folderrec str : Sync this folder recursively.
+--folderrec str : and this one, etc.
---folderfirst : Sync this folder first. --folderfirst "Work"
---folderfirst : then this one, etc.
---folderlast : Sync this folder last. --folderlast "[Gmail]/All Mail"
---folderlast : then this one, etc.
+--folderfirst str : Sync this folder first. --folderfirst "Work"
+--folderfirst str : then this one, etc.
+--folderlast str : Sync this folder last. --folderlast "[Gmail]/All Mail"
+--folderlast str : then this one, etc.
---nomixfolders : Do not merge folders when host1 is case sensitive
- while host2 is not (like Exchange). Only the first
- similar folder is synced (ex: Sent SENT sent -> Sent).
+--nomixfolders : Do not merge folders when host1 is case sensitive
+ while host2 is not (like Exchange). Only the first
+ similar folder is synced (ex: Sent SENT sent -> Sent).
---skipemptyfolders : Empty host1 folders are not created on host2.
+--skipemptyfolders : Empty host1 folders are not created on host2.
---include : Sync folders matching this regular expression
---include : or this one, etc.
- in case both --include --exclude options are
- use, include is done before.
---exclude : Skips folders matching this regular expression
- Several folders to avoid:
- --exclude 'fold1|fold2|f3' skips fold1, fold2 and f3.
---exclude : or this one, etc.
+--f1f2 str1=str2 : Force folder str1 to be synced to str2.
+--include reg : Sync folders matching this regular expression
+--include reg : or this one, etc.
+ in case both --include --exclude options are
+ use, include is done before.
+--exclude reg : Skips folders matching this regular expression
+ Several folders to avoid:
+ --exclude 'fold1|fold2|f3' skips fold1, fold2 and f3.
+--exclude reg : or this one, etc.
---subfolder2 : Move whole host1 folders hierarchy under this
- host2 folder .
- It does it by adding two --regextrans2 options before
- all others. Add --debug to see what's really going on.
+--subfolder2 str : Move whole host1 folders hierarchy under this
+ host2 folder str .
+ It does it by adding two --regextrans2 options before
+ all others. Add --debug to see what's really going on.
---regextrans2 : Apply the whole regex to each destination folders.
---regextrans2 : and this one. etc.
- When you play with the --regextrans2 option, first
- add also the safe options --dry --justfolders
- Then, when happy, remove --dry, remove --justfolders.
- Have in mind that --regextrans2 is applied after prefix
- and separator inversion.
+--regextrans2 reg : Apply the whole regex to each destination folders.
+--regextrans2 reg : and this one. etc.
+ When you play with the --regextrans2 option, first
+ add also the safe options --dry --justfolders
+ Then, when happy, remove --dry, remove --justfolders.
+ Have in mind that --regextrans2 is applied after prefix
+ and separator inversion.
---tmpdir : Where to store temporary files and subdirectories.
- Will be created if it doesn't exist.
- Default is system specific, Unix is /tmp but
- it's often small and deleted at reboot.
- --tmpdir /var/tmp should be better.
---pidfile : The file where imapsync pid is written.
---pidfilelocking : Abort if pidfile already exists. Usefull to avoid
- concurrent transfers on the same mailbox.
+--tmpdir str : Where to store temporary files and subdirectories.
+ Will be created if it doesn't exist.
+ Default is system specific, Unix is /tmp but
+ it's often small and deleted at reboot.
+ --tmpdir /var/tmp should be better.
+--pidfile str : The file where imapsync pid is written.
+--pidfilelocking : Abort if pidfile already exists. Usefull to avoid
+ concurrent transfers on the same mailbox.
---nolog : Turn off logging on file
---logfile : Change the default logfile pathname and filename.
+--nolog : Turn off logging on file
+--logfile str : Change the default log filename (can be dirname/filename).
+--logdir str : Change the default log directory. Default is LOG_imapsync
---prefix1 : Remove prefix to all destination folders
- (usually INBOX. or INBOX/ or an empty string "")
- you have to use --prefix1 if host1 imap server
- does not have NAMESPACE capability, so imapsync
- suggests to use it. All other cases are bad.
---prefix2 : Add prefix to all host2 folders. See --prefix1
---sep1 : Host1 separator in case NAMESPACE is not supported.
---sep2 : Host2 separator in case NAMESPACE is not supported.
+--prefix1 str : Remove prefix to all destination folders
+ (usually INBOX. or INBOX/ or an empty string "")
+ you have to use --prefix1 if host1 imap server
+ does not have NAMESPACE capability, so imapsync
+ suggests to use it. All other cases are bad.
+--prefix2 str : Add prefix to all host2 folders. See --prefix1
+--sep1 str : Host1 separator in case NAMESPACE is not supported.
+--sep2 str : Host2 separator in case NAMESPACE is not supported.
---skipmess : Skips messages maching the regex.
- Example: 'm/[\x80-ff]/' # to avoid 8bits messages.
- --skipmess is applied before --regexmess
---skipmess : or this one, etc.
+--skipmess reg : Skips messages maching the regex.
+ Example: 'm/[\x80-ff]/' # to avoid 8bits messages.
+ --skipmess is applied before --regexmess
+--skipmess reg : or this one, etc.
---pipemess : Apply this command to each message content before
- the copy.
---pipemess : and this one, etc.
+--pipemess cmd : Apply this cmd command to each message content
+ before the copy.
+--pipemess cmd : and this one, etc.
---disarmreadreceipts : Disarms read receipts (host2 Exchange issue)
+--disarmreadreceipts : Disarms read receipts (host2 Exchange issue)
---regexmess : Apply the whole regex to each message before transfer.
- Example: 's/\000/ /g' # to replace null by space.
---regexmess : and this one, etc.
+--regexmess reg : Apply the whole regex to each message before transfer.
+ Example: 's/\000/ /g' # to replace null by space.
+--regexmess reg : and this one, etc.
---regexflag : Apply the whole regex to each flags list.
- Example: 's/"Junk"//g' # to remove "Junk" flag.
---regexflag : and this one, etc.
+--regexflag reg : Apply the whole regex to each flags list.
+ Example: 's/"Junk"//g' # to remove "Junk" flag.
+--regexflag reg : and this one, etc.
---delete : Deletes messages on host1 server after a successful
- transfer. Option --delete has the following behavior:
- it marks messages as deleted with the IMAP flag
- \Deleted, then messages are really deleted with an
- EXPUNGE IMAP command.
+--delete : Deletes messages on host1 server after a successful
+ transfer. Option --delete has the following behavior:
+ it marks messages as deleted with the IMAP flag
+ \Deleted, then messages are really deleted with an
+ EXPUNGE IMAP command.
---delete2 : Delete messages in host2 that are not in
- host1 server. Useful for backup or pre-sync.
---delete2duplicates : Delete messages in host2 that are duplicates.
- Works only without --useuid since duplicates are
- detected with an header part of each message.
+--delete2 : Delete messages in host2 that are not in
+ host1 server. Useful for backup or pre-sync.
+--delete2duplicates : Delete messages in host2 that are duplicates.
+ Works only without --useuid since duplicates are
+ detected with an header part of each message.
---delete2folders : Delete folders in host2 that are not in host1 server.
- For safety, first try it like this (it is safe):
- --delete2folders --dry --justfolders --nofoldersizes
---delete2foldersonly : Deleted only folders matching regex.
- Example: --delete2foldersonly "/^Junk$|^INBOX.Junk$/"
---delete2foldersbutnot : Do not delete folders matching regex.
- Example: --delete2foldersbutnot "/Tasks$|Contacts$|Foo$/"
---noexpunge : Do not expunge messages on host1.
- Expunge really deletes messages marked deleted.
- Expunge is made at the beginning, on host1 only.
- Newly transferred messages are also expunged if
- option --delete is given.
- No expunge is done on host2 account (unless --expunge2)
---expunge1 : Expunge messages on host1 after messages transfer.
---expunge2 : Expunge messages on host2 after messages transfer.
---uidexpunge2 : uidexpunge messages on the host2 account
- that are not on the host1 account, requires --delete2
---nomixfolders : Avoid merging folders that are considered different on
- host1 but the same on destination host2 because of
- case sensitivities and insensitivities.
+--delete2folders : Delete folders in host2 that are not in host1 server.
+ For safety, first try it like this (it is safe):
+ --delete2folders --dry --justfolders --nofoldersizes
+--delete2foldersonly reg : Deleted only folders matching regex.
+ Example: --delete2foldersonly "/^Junk$|^INBOX.Junk$/"
+--delete2foldersbutnot reg : Do not delete folders matching regex.
+ Example: --delete2foldersbutnot "/Tasks$|Contacts$|Foo$/"
+--noexpunge : Do not expunge messages on host1.
+ Expunge really deletes messages marked deleted.
+ Expunge is made at the beginning, on host1 only.
+ Newly transferred messages are also expunged if
+ option --delete is given.
+ No expunge is done on host2 account (unless --expunge2)
+--expunge1 : Expunge messages on host1 after messages transfer.
+--expunge2 : Expunge messages on host2 after messages transfer.
+--uidexpunge2 : uidexpunge messages on the host2 account
+ that are not on the host1 account, requires --delete2
+--nomixfolders : Avoid merging folders that are considered different on
+ host1 but the same on destination host2 because of
+ case sensitivities and insensitivities.
---syncinternaldates : Sets the internal dates on host2 same as host1.
- Turned on by default. Internal date is the date
- a message arrived on a host (mtime).
---idatefromheader : Sets the internal dates on host2 same as the
- "Date:" headers.
+--syncinternaldates : Sets the internal dates on host2 same as host1.
+ Turned on by default. Internal date is the date
+ a message arrived on a host (mtime).
+--idatefromheader : Sets the internal dates on host2 same as the
+ "Date:" headers.
---maxsize : Skip messages larger (or equal) than bytes
---minsize : Skip messages smaller (or equal) than bytes
---maxage : Skip messages older than days.
- final stats (skipped) don't count older messages
- see also --minage
---minage : Skip messages newer than days.
- final stats (skipped) don't count newer messages
- You can do (+ are the messages selected):
- past|----maxage+++++++++++++++>now
- past|+++++++++++++++minage---->now
- past|----maxage+++++minage---->now (intersection)
- past|++++minage-----maxage++++>now (union)
+--maxsize int : Skip messages larger (or equal) than int bytes
+--minsize int : Skip messages smaller (or equal) than int bytes
+--maxage int : Skip messages older than int days.
+ final stats (skipped) don't count older messages
+ see also --minage
+--minage int : Skip messages newer than int days.
+ final stats (skipped) don't count newer messages
+ You can do (+ are the messages selected):
+ past|----maxage+++++++++++++++>now
+ past|+++++++++++++++minage---->now
+ past|----maxage+++++minage---->now (intersection)
+ past|++++minage-----maxage++++>now (union)
---search : Selects only messages returned by this IMAP SEARCH
- command. Applied on both sides.
---search1 : Same as --search for selecting host1 messages only.
---search2 : Same as --search for selecting host2 messages only.
- --search CRIT equals --search1 CRIT --search2 CRIT
+--search str : Selects only messages returned by this IMAP SEARCH
+ command. Applied on both sides.
+--search1 str : Same as --search for selecting host1 messages only.
+--search2 str : Same as --search for selecting host2 messages only.
+ --search CRIT equals --search1 CRIT --search2 CRIT
---exitwhenover : Stop syncing when total bytes transferred reached.
- Gmail per day allows 2500000000 down 500000000 upload.
+--exitwhenover int : Stop syncing when total bytes transferred reached.
+ Gmail per day allows
+ 2500000000 = 2.5 GB downloaded from Gmail as host2
+ 500000000 = 500 MB uploaded to Gmail as host1.
---maxlinelength : skip messages with a line length longer than bytes.
- RFC 2822 says it must be no more than 1000 bytes.
+--maxlinelength int : skip messages with a line length longer than int bytes.
+ RFC 2822 says it must be no more than 1000 bytes.
---useheader : Use this header to compare messages on both sides.
- Ex: Message-ID or Subject or Date.
---useheader and this one, etc.
+--useheader str : Use this header to compare messages on both sides.
+ Ex: Message-ID or Subject or Date.
+--useheader str and this one, etc.
---subscribed : Transfers subscribed folders.
---subscribe : Subscribe to the folders transferred on the
- host2 that are subscribed on host1. On by default.
---subscribeall : Subscribe to the folders transferred on the
- host2 even if they are not subscribed on host1.
+--subscribed : Transfers subscribed folders.
+--subscribe : Subscribe to the folders transferred on the
+ host2 that are subscribed on host1. On by default.
+--subscribeall : Subscribe to the folders transferred on the
+ host2 even if they are not subscribed on host1.
---nofoldersizes : Do not calculate the size of each folder in bytes
- and message counts. Default is to calculate them.
---nofoldersizesatend : Do not calculate the size of each folder in bytes
- and message counts at the end. Default is on.
---justfoldersizes : Exit after having printed the folder sizes.
+--nofoldersizes : Do not calculate the size of each folder in bytes
+ and message counts. Default is to calculate them.
+--nofoldersizesatend: Do not calculate the size of each folder in bytes
+ and message counts at the end. Default is on.
+--justfoldersizes : Exit after having printed the folder sizes.
---syncacls : Synchronises acls (Access Control Lists).
---nosyncacls : Does not synchronize acls. This is the default.
- Acls in IMAP are not standardized, be careful.
+--syncacls : Synchronises acls (Access Control Lists).
+--nosyncacls : Does not synchronize acls. This is the default.
+ Acls in IMAP are not standardized, be careful.
---usecache : Use cache to speedup.
---nousecache : Do not use cache. Caveat: --useuid --nousecache creates
- duplicates on multiple runs.
---useuid : Use uid instead of header as a criterium to recognize
- messages. Option --usecache is then implied unless
- --nousecache is used.
+--usecache : Use cache to speedup.
+--nousecache : Do not use cache. Caveat: --useuid --nousecache creates
+ duplicates on multiple runs.
+--useuid : Use uid instead of header as a criterium to recognize
+ messages. Option --usecache is then implied unless
+ --nousecache is used.
---debug : Debug mode.
---debugcontent : Debug content of the messages transfered.
---debugflags : Debug flags.
---debugimap1 : IMAP debug mode for host1. imap debug is very verbose.
---debugimap2 : IMAP debug mode for host2.
---debugimap : IMAP debug mode for host1 and host2.
---debugmemory : Debug mode showing memory consumption after each copy.
+--debug : Debug mode.
+--debugfolders : Debug mode for the folders part only.
+--debugcontent : Debug content of the messages transfered. Huge ouput.
+--debugflags : Debug mode for flags.
+--debugimap1 : IMAP debug mode for host1. Very verbose.
+--debugimap2 : IMAP debug mode for host2. Very verbose.
+--debugimap : IMAP debug mode for host1 and host2.
+--debugmemory : Debug mode showing memory consumption after each copy.
---tests : Run non-regression tests.
---testslive : Run a live test with test1.lamiral.info imap server.
- Useful to check the basics. Needs internet connexion.
+--tests : Run non-regression tests.
+--testslive : Run a live test with test1.lamiral.info imap server.
+ Useful to check the basics. Needs internet connexion.
---version : Print software version.
---noreleasecheck : Do not check for new imapsync release (a http request).
---releasecheck : Check for new imapsync release (a http request).
---justconnect : Just connect to both servers and print useful
- information. Need only --host1 and --host2 options.
---justlogin : Just login to both host1 and host2 with users
- credentials, then exit.
---justfolders : Do only things about folders (ignore messages).
+--version : Print only software version.
+--noreleasecheck : Do not check for new imapsync release (a http request).
+--releasecheck : Check for new imapsync release (a http request).
+--noid : Do not send/receive ID command to imap servers.
+--justconnect : Just connect to both servers and print useful
+ information. Need only --host1 and --host2 options.
+--justlogin : Just login to both host1 and host2 with users
+ credentials, then exit.
+--justfolders : Do only things about folders (ignore messages).
---help : print this help.
+--help : print this help.
Example: to synchronize imap account "test1" on "test1.lamiral.info"
to imap account "test2" on "test2.lamiral.info"
@@ -248,9 +258,9 @@ Example: to synchronize imap account "test1" on "test1.lamiral.info"
--host1 test1.lamiral.info --user1 test1 --password1 secret1 \
--host2 test2.lamiral.info --user2 test2 --password2 secret2
-Here is a [linux] system (Linux petite 3.2.0-84-generic #121-Ubuntu SMP Tue May 5 18:55:46 UTC 2015 i686)
-With perl 5.14.2 Mail::IMAPClient 3.35
-$Id: imapsync,v 1.644 2015/07/17 01:22:52 gilles Exp gilles $
+Here is a [linux] system (Linux petite 3.2.0-91-generic #129-Ubuntu SMP Wed Sep 9 10:56:56 UTC 2015 i686)
+With perl 5.14.2 Mail::IMAPClient 3.37
+$Id: imapsync,v 1.670 2015/12/03 02:36:41 gilles Exp gilles $
This current imapsync is up to date
Homepage: http://imapsync.lamiral.info/
diff --git a/README b/README
index f5ed952..3f010f2 100644
--- a/README
+++ b/README
@@ -1,10 +1,10 @@
NAME
imapsync - IMAP synchronisation, sync, copy or migration tool.
Synchronises mailboxes between two imap servers. Good at IMAP migration.
- More than 52 different IMAP server softwares supported with success, few
+ More than 66 different IMAP server softwares supported with success, few
failures.
- $Revision: 1.644 $
+ $Revision: 1.670 $
SYNOPSIS
To synchronize imap account "foo" on "imap.truc.org" to imap account
@@ -60,36 +60,36 @@ USAGE
The option list:
imapsync [--host1 server1] [--port1 ]
- [--user1 ] [--passfile1 ]
+ [--user1 str ] [--passfile1 str ]
[--host2 server2] [--port2 ]
- [--user2 ] [--passfile2 ]
+ [--user2 str ] [--passfile2 str ]
[--ssl1] [--ssl2]
[--tls1] [--tls2]
- [--authmech1 ] [--authmech2 ]
+ [--authmech1 str ] [--authmech2 str ]
[--proxyauth1] [--proxyauth2]
[--domain1] [--domain2]
[--authmd51] [--authmd52]
- [--folder --folder ...]
- [--folderrec --folderrec ...]
- [--include ] [--exclude ]
- [--prefix2 ] [--prefix1 ]
- [--regextrans2 --regextrans2 ...]
+ [--folder str --folder str ...]
+ [--folderrec str --folderrec str ...]
+ [--include reg ] [--exclude reg ]
+ [--prefix2 str ] [--prefix1 str ]
+ [--regextrans2 reg --regextrans2 reg ...]
[--sep1 ]
[--sep2 ]
[--justfolders] [--justfoldersizes] [--justconnect] [--justbanner]
[--syncinternaldates]
[--idatefromheader]
[--syncacls]
- [--regexmess ] [--regexmess ]
- [--skipmess ] [--skipmess ]
- [--maxsize ]
- [--minsize ]
- [--maxage ]
- [--minage ]
- [--search ]
- [--search1 ]
- [--search2 ]
- [--useheader ] [--useheader ]
+ [--regexmess reg ] [--regexmess reg ]
+ [--skipmess reg ] [--skipmess reg ]
+ [--maxsize int ]
+ [--minsize int ]
+ [--maxage int ]
+ [--minage int ]
+ [--search str ]
+ [--search1 str ]
+ [--search2 str ]
+ [--useheader str ] [--useheader str ]
[--nouid1] [--nouid2]
[--usecache]
[--noskipsize]
@@ -101,7 +101,7 @@ USAGE
[--nofoldersizes] [--nofoldersizesatend]
[--dry]
[--debug] [--debugimap][--debugimap1][--debugimap2] [--debugcontent]
- [--timeout ]
+ [--timeout int ]
[--noreleasecheck]
[--releasecheck]
[--pidfile ] [--pidfilelocking]
@@ -387,5 +387,5 @@ SIMILAR SOFTWARES
Feedback (good or bad) will often be welcome.
- $Id: imapsync,v 1.644 2015/07/17 01:22:52 gilles Exp gilles $
+ $Id: imapsync,v 1.670 2015/12/03 02:36:41 gilles Exp gilles $
diff --git a/S/external.shtml b/S/external.shtml
index 3475910..0097578 100755
--- a/S/external.shtml
+++ b/S/external.shtml
@@ -5,9 +5,9 @@
Imapsync similar softwares and external services
-
-
-
+
+
+
@@ -63,7 +63,7 @@ Prices are given par mailbox and may be outdated (December 2011).
@@ -98,7 +98,7 @@ alt="Viewable With Any Browser" />
This document last modified on
-($Id: external.shtml,v 1.4 2015/04/01 00:00:50 gilles Exp gilles $)
+($Id: external.shtml,v 1.5 2015/10/08 01:05:25 gilles Exp gilles $) Top of the page
diff --git a/S/imapservers.shtml b/S/imapservers.shtml
index 8b5306b..21841d4 100755
--- a/S/imapservers.shtml
+++ b/S/imapservers.shtml
@@ -29,7 +29,7 @@
Let's start with the long reported success stories list:
-63 different imap server softwares supported!
+66 different imap server softwares supported!
[host1] means "source server" and [host2] means "destination server":
Let's finish with reported failure stories over the past.
Maybe new imapsync releases can run successfully with them.
@@ -202,7 +202,7 @@ alt="Viewable With Any Browser" />
This document last modified on
-($Id: imapservers.shtml,v 1.6 2015/06/23 10:45:34 gilles Exp gilles $)
+($Id: imapservers.shtml,v 1.8 2015/11/04 18:21:08 gilles Exp gilles $) Top of the page
ID feature is on by default if supported by the IMAP servers,
+ use --noid to turn it off.
+
ID Infos returned by the imap servers are shown.
+
Infos sent to the servers are name=imapsync, version=`imapsync --version`, os=$OSNAME`,
+ vendor='Gilles LAMIRAL' and date=`rcs date of release`.
+
For github or other distributors you can hack this part
+ by searching $imapsync_id_github
+
+
+
+
Enhancement: Added --logdir path to change the default log directory.
+ Default is LOG_imapsync/
+
+
+
+
+
Usability: Added folders counting in outputs.
+
Usability: Better output in the login part
+
Usability: Guess prefixes and separators instead of forcing the user to find them.
+
Usability: Output, added Host1: or Host2 at the beginning of lines.
+
Bug fix: SSL_VERIFY_NONE in --ssl and --tls modes
+
Bug fix: Fixed xoauth2 calls. Now XOAUTH2 Works on Windows --authmech1 XOAUTH2
+ with openssl installed.
+ See FAQ.d/FAQ.XOAUTH2.txt.
+
Bug fix: Fixed IO::Socket::SSL constants issue with latest releases
+
Bug fix: Changed "Host1: checking all wanted folders exist" not efficient algorithm in order
+ to allow efficiently a 2.4 million folders account. Yes, some accounts have this.
+
+
Refactoring: Started to use global $sync-> in order to reduce number of parameters in routines.
+
Refactoring: Some perlcritic fixes.
+
+
+
+
1.644 Mac OS X standalone binary provided!
+
Enhancement: Mac OS X standalone binary called imapsync_bin_Darwin
+
+
Enhancement: Added option --subfolder2 SUB Move whole host1 folders hierarchy under folder SUB.
+
Enhancement: Added --fetch_hash_set "1:*" to permit Mail2World success.
+Need a patched Mail::IMAPClient 3.35 in sub fetch_hash()
+
+
Usability: No folders sizes if --justfolders, unless really wanted.
+
Usability: No warning about messages when --dry --justfolders are used together.
+
+
Bug fix: Added NOOP in --dry mode during fake APPEND in order to avoid timeouts
+
+
+
1.636
-
Enhancement: Added errors dump listing at the end, before last folder sizes or the statistics. Turned on by default. Use --noerrorsdump to avoid it.
-
Enhancement: Added --maxlinelengthcmd that will be called upon when a line over --maxlinelength is detected.
-
Enhancement: Exchange maxlinelength issue fixed with --maxlinelengthcmd 'reformime -r7' on Linux. Install maildrop package to get reformime command
-
Enhancement: Added --testslive. "imapsync --testslive" performs a live test on real accounts (I own).
-
Enhancement: Added --pipemess in order to pass all message to an external filter tool like "reformime -r7".
+
Enhancement: Added errors dump listing at the end, before last folder sizes or the statistics. Turned on by default. Use --noerrorsdump to avoid it.
+
Enhancement: Added --maxlinelengthcmd that will be called upon when a line over --maxlinelength value is detected.
+
Enhancement: Exchange maxlinelength issue fixed with --maxlinelengthcmd 'reformime -r7' on Linux.
+ Install maildrop package to get reformime command
+
Enhancement: Added --testslive. Running imapsync --testslive performs a live test on real accounts (I own).
+
Enhancement: Added --pipemess in order to pass all message to an external filter tool like reformime -r7.
Enhancement: Added xoauth2 support, available on Unix with underlying openssl. Thanks to Joaquin Lopez.
-
Enhancement: Added --skipmess to skip messages matching a regex.
-Example --skipmess 'm/[\x80-ff]/' to slip messages with non-7bit characters ( ie a byte somewhere begins with 1 )
+
Enhancement: Added --skipmess regex to skip messages matching a regex.
+Example --skipmess 'm/[\x80-ff]/' to slip messages with non-7bit characters ( ie a byte somewhere begins with 1 )
Usability: Better output of folders excluded by --exclude and folders included by --include
Usability: Added inline help in many places. What you can do with switches to change imapsync behaviour, contextually. Learn imapsync the easy way.
-
Bug fix: imapsync --tests should work under any circumstance now, any Unix, Windows, exe or bin or script. 561 non-regression tests
-
Bug fix: --folderfirst and --folderlast generated an error when their value folder does not exist. Existence is checked.
-
Bug fix: --disarmreadreceipts used to change Disposition-Notification-To in the body when not available in the header. Now never changes the body in all cases.
-
Bug fix: Change default useheader values. Now it is really like --useheader "Message-Id" --useheader "Received".
-HMailServer replies two lines with --useheader "Message-Id" --useheader "Message-ID" in older releases.
+
Bug fix: imapsync --tests should work under any circumstance now, any Unix, Windows, exe or bin or script. 561 non-regression tests
+
Bug fix: Options --folderfirst and --folderlast generated an error when their value folder does not exist. Existence is checked.
+
Bug fix: Option --disarmreadreceipts used to change Disposition-Notification-To in the body when not available in the header.
+ Now never changes the body in all cases.
+
Bug fix: Change default useheader values. Now it is really like --useheader "Message-Id" --useheader "Received".
+HMailServer replies two lines with --useheader "Message-Id" --useheader "Message-ID" in older imapsync releases.
-
Bug fix: in imap_utf7_decode() + must not be escaped. Was a bug with Cyrillic characters
+
Bug fix: in imap_utf7_decode() + character must not be escaped. Was a bug with Cyrillic characters
Refactoring: Started to split the FAQ file in several parts in FAQ.d/*
@@ -296,7 +370,7 @@ alt="Viewable With Any Browser" />
This document last modified on
-($Id: news.shtml,v 1.2 2015/03/31 23:59:58 gilles Exp gilles $)
+($Id: news.shtml,v 1.7 2015/12/03 02:55:37 gilles Exp gilles $) Top of the page
diff --git a/S/template.shtml b/S/template.shtml
index bc56290..a917e39 100755
--- a/S/template.shtml
+++ b/S/template.shtml
@@ -59,7 +59,7 @@ alt="Viewable With Any Browser" />
This document last modified on
-($Id: template.shtml,v 1.2 2015/03/29 17:24:47 gilles Exp gilles $)
+($Id: template.shtml,v 1.3 2015/11/05 17:38:18 gilles Exp gilles $) Top of the page
diff --git a/TODO b/TODO
index 5d20957..6800686 100644
--- a/TODO
+++ b/TODO
@@ -1,5 +1,5 @@
#!/bin/cat
-# $Id: TODO,v 1.140 2015/07/17 17:36:22 gilles Exp gilles $
+# $Id: TODO,v 1.144 2015/12/03 02:03:06 gilles Exp gilles $
TODO file for imapsync
----------------------
@@ -19,11 +19,19 @@ MB
GB
TB
+2015_11_24 Jens Herrmann
+Add --logdir to allow imapsync choosing the filename while allowing
+user to choose the dirname part.
2015_06_02 Karen F Bath.
Add skipped messages in the final dump.
-I would like to request if you could add additional errors to the bottom, as we find that things like MaxLineLength and maxsize limit are classed as skipped messages and in my opinion are errors; as the email message is not transferred but this is not logged at the bottom.
-We have our own scan script which we run on all log files at the end and copy the users logs into subfolders that have issues. Ive attached a list of things we search for.
+I would like to request if you could add additional errors to the bottom,
+as we find that things like MaxLineLength and maxsize limit are classed
+as skipped messages and in my opinion are errors; as the email message
+is not transferred but this is not logged at the bottom.
+We have our own scan script which we run on all log files at the end
+and copy the users logs into subfolders that have issues.
+I've attached a list of things we search for.
"Error", "Output"
NO Mailbox already exists, "Folder"
@@ -53,7 +61,7 @@ It would be great to be able to print the email subject, in order to debug or to
2015_04_25
Add duplicates test option.
-
+
2015_03_24
Add --sslargs with usage like:
imapsync ... --sslargs 'SSL_version=' --sslargs 'SSL_use_cert=1' \
@@ -97,8 +105,6 @@ when login fails with a "* BYE Temp error" from server.
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 with --usecache
Fix inode crunching with --usecache
Think about Digest::SHA or Digest::SHA::PurePerl.
@@ -201,6 +207,16 @@ http://asg.web.cmu.edu/cyrus/download/imapd/altnamespace.html
Now the TODO done! (or not)
===========================================================================
+DONE. 2015_08_10.
+Guess separators and prefixes when NAMESPACE is not available,
+instead of forcing the user to guess and set them.
+
+DONE 2015_08_03. WANTED 2015_07_21
+Fix W/learn/imap_utf7_encode
+--regextrans2 "s,El&AOk-ments,&AMk-l&AOk-ments,"
+
+DONE. Add a FAQ entry about long path over than 260 character on Win32.
+
DONE. Build and distribute a standalone Darwin Mac OS X binary.
It's called imapsync_bin_Darwin
@@ -607,7 +623,7 @@ To sync a complete account in a subfolder called FOO:
DONE. Make the --justconnect a real "just connect" connection,
not a auth connection like it is now.
-DONE. Add --prefix1 option. Don't know what is the need exactly.
+DONE. Add --prefix1 option.
The need is to remove this prefix when building target folder names.
DONE. Read the IMAP RFC http://www.rfc-editor.org/rfc/rfc2342.txt
diff --git a/VERSION b/VERSION
index 6f8061d..67d1db3 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-1.644
+1.670
diff --git a/VERSION_EXE b/VERSION_EXE
index 6f8061d..67d1db3 100644
--- a/VERSION_EXE
+++ b/VERSION_EXE
@@ -1 +1 @@
-1.644
+1.670
diff --git a/W/.BUILD_EXE_TIME b/W/.BUILD_EXE_TIME
index 20eccf0..cb61377 100644
--- a/W/.BUILD_EXE_TIME
+++ b/W/.BUILD_EXE_TIME
@@ -326,3 +326,37 @@
1435280203 END 1.643 : vendredi 26 juin 2015, 02:56:43 (UTC+0200)
1437158716 BEGIN 1.644 : vendredi 17 juillet 2015, 20:45:16 (UTC+0200)
1437160124 END 1.644 : vendredi 17 juillet 2015, 21:08:44 (UTC+0200)
+1439777074 BEGIN 1.650 : lundi 17 août 2015, 04:04:34 (UTC+0200)
+1439778213 END 1.650 : lundi 17 août 2015, 04:23:33 (UTC+0200)
+1440289827 BEGIN 1.651 : dimanche 23 août 2015, 02:30:27 (UTC+0200)
+1440291228 END 1.651 : dimanche 23 août 2015, 02:53:48 (UTC+0200)
+1441934795 BEGIN 1.654 : vendredi 11 septembre 2015, 03:26:35 (UTC+0200)
+1441940822 BEGIN 1.655 : vendredi 11 septembre 2015, 05:07:02 (UTC+0200)
+1441941869 END 1.655 : vendredi 11 septembre 2015, 05:24:29 (UTC+0200)
+1447192716 BEGIN 1.665 : mardi 10 novembre 2015, 22:58:36 (UTC+0100)
+1447193035 END 1.665 : mardi 10 novembre 2015, 23:03:55 (UTC+0100)
+1447201375 BEGIN 1.665 : mercredi 11 novembre 2015, 01:22:55 (UTC+0100)
+1447201490 END 1.665 : mercredi 11 novembre 2015, 01:24:50 (UTC+0100)
+1447201666 BEGIN 1.665 : mercredi 11 novembre 2015, 01:27:46 (UTC+0100)
+1447202045 BEGIN 1.665 : mercredi 11 novembre 2015, 01:34:05 (UTC+0100)
+1447202227 END 1.665 : mercredi 11 novembre 2015, 01:37:07 (UTC+0100)
+1447205467 BEGIN 1.665 : mercredi 11 novembre 2015, 02:31:07 (UTC+0100)
+1447205527 END 1.665 : mercredi 11 novembre 2015, 02:32:07 (UTC+0100)
+1447205754 BEGIN 1.665 : mercredi 11 novembre 2015, 02:35:54 (UTC+0100)
+1447205813 END 1.665 : mercredi 11 novembre 2015, 02:36:53 (UTC+0100)
+1447205877 BEGIN 1.665 : mercredi 11 novembre 2015, 02:37:57 (UTC+0100)
+1447206591 BEGIN 1.665 : mercredi 11 novembre 2015, 02:49:51 (UTC+0100)
+1447206779 END 1.665 : mercredi 11 novembre 2015, 02:52:59 (UTC+0100)
+1447206877 BEGIN 1.665 : mercredi 11 novembre 2015, 02:54:37 (UTC+0100)
+1447207318 BEGIN 1.665 : mercredi 11 novembre 2015, 03:01:58 (UTC+0100)
+1447207507 END 1.665 : mercredi 11 novembre 2015, 03:05:07 (UTC+0100)
+1447208020 BEGIN 1.665 : mercredi 11 novembre 2015, 03:13:40 (UTC+0100)
+1447208213 END 1.665 : mercredi 11 novembre 2015, 03:16:53 (UTC+0100)
+1447209722 BEGIN 1.665 : mercredi 11 novembre 2015, 03:42:03 (UTC+0100)
+1447209976 END 1.665 : mercredi 11 novembre 2015, 03:46:16 (UTC+0100)
+1448298296 BEGIN 1.666 : lundi 23 novembre 2015, 18:04:56 (UTC+0100)
+1448298474 END 1.666 : lundi 23 novembre 2015, 18:07:54 (UTC+0100)
+1448851660 BEGIN 1.667 : lundi 30 novembre 2015, 03:47:40 (UTC+0100)
+1448852283 END 1.667 : lundi 30 novembre 2015, 03:58:03 (UTC+0100)
+1449111689 BEGIN 1.670 : jeudi 3 décembre 2015, 04:01:29 (UTC+0100)
+1449112253 END 1.670 : jeudi 3 décembre 2015, 04:10:53 (UTC+0100)
diff --git a/W/CONCEPTION b/W/CONCEPTION.txt
similarity index 100%
rename from W/CONCEPTION
rename to W/CONCEPTION.txt
diff --git a/W/LOG_imapsync/2015_10_22_15_58_28.txt b/W/LOG_imapsync/2015_10_22_15_58_28.txt
new file mode 100644
index 0000000..0ec1457
--- /dev/null
+++ b/W/LOG_imapsync/2015_10_22_15_58_28.txt
@@ -0,0 +1,33 @@
+Transfer started at Thu Oct 22 15:58:28 2015
+PID is 4432
+Log file is LOG_imapsync/2015_10_22_15_58_28.txt ( to change it, use --logfile filepath ; or use --nolog to turn off logging )
+$RCSfile: imapsync,v $ $Revision: 1.663 $ $Date: 2015/10/03 23:59:27 $
+Here is a [linux] system (Linux petite 3.2.0-90-generic #128-Ubuntu SMP Fri Aug 14 21:44:10 UTC 2015 i686)
+With perl 5.14.2 Mail::IMAPClient 3.37
+Command line used:
+../imapsync --modu
+Temp directory is /tmp ( to change it use --tmpdir dirpath )
+PID file is /tmp/imapsync.pid ( to change it use --pidfile filepath ; to avoid it use --pidfile "" )
+Modules version list:
+Mail::IMAPClient 3.37
+IO::Socket 1.32
+IO::Socket::IP ?
+IO::Socket::INET 1.31
+IO::Socket::SSL 1.53
+Net::SSLeay 1.42
+Compress::Zlib 2.048
+Digest::MD5 2.51
+Digest::HMAC_MD5 1.01
+Digest::HMAC_SHA1 1.03
+Term::ReadKey 2.30
+File::Spec 3.33
+Time::HiRes 1.972101
+Unicode::String 2.09
+IO::Tee 0.64
+File::Copy::Recursive 0.38
+Authen::NTLM 1.09
+URI::Escape 3.31
+Data::Uniqid 0.12
+JSON::WebToken 0.10
+( use --no-modules_version to turn off printing this Perl modules list )
+--host1 option is mandatory, for help run ../imapsync --help
diff --git a/W/Mail-IMAPClient-3.37.tar.gz b/W/Mail-IMAPClient-3.37.tar.gz
new file mode 100644
index 0000000000000000000000000000000000000000..57134240e18167b9edb5cd834d1217b72dcd944d
GIT binary patch
literal 188964
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