mirror of
https://github.com/imapsync/imapsync.git
synced 2024-11-16 15:52:47 +01:00
1.945
This commit is contained in:
parent
0797e48248
commit
275436c5a0
157
ChangeLog
157
ChangeLog
@ -1,17 +1,164 @@
|
||||
|
||||
RCS file: RCS/imapsync,v
|
||||
Working file: imapsync
|
||||
head: 1.921
|
||||
head: 1.945
|
||||
branch:
|
||||
locks: strict
|
||||
gilles: 1.921
|
||||
gilles: 1.945
|
||||
access list:
|
||||
symbolic names:
|
||||
keyword substitution: kv
|
||||
total revisions: 921; selected revisions: 921
|
||||
total revisions: 945; selected revisions: 945
|
||||
description:
|
||||
----------------------------
|
||||
revision 1.921 locked by: gilles;
|
||||
revision 1.945 locked by: gilles;
|
||||
date: 2019/06/26 19:30:56; author: gilles; state: Exp; lines: +151 -94
|
||||
Proofread the documentation part, what will go to README.
|
||||
The pod at the beginning.
|
||||
----------------------------
|
||||
revision 1.944
|
||||
date: 2019/06/25 16:44:08; author: gilles; state: Exp; lines: +8 -8
|
||||
Bugfix. Readonly syntax. "Readonly my %EXIT_TXT => ("
|
||||
----------------------------
|
||||
revision 1.943
|
||||
date: 2019/06/25 08:34:51; author: gilles; state: Exp; lines: +47 -30
|
||||
Usability. Added the error message text after "Exiting with return value xx". Example: Exiting with return value 16 (EXIT_AUTHENTICATION_FAILURE)
|
||||
Usability. Added what function is called when installing a signal. Example: "kill -QUIT 19839 # special behavior: call to sub catch_exit"
|
||||
----------------------------
|
||||
revision 1.942
|
||||
date: 2019/06/24 20:43:43; author: gilles; state: Exp; lines: +51 -37
|
||||
Bugfix. USR1 signal for toggle_sleep call was never installed.
|
||||
Usability. Now --justfolders will activate --foldersizesatend
|
||||
Enhancement. Added PROCESS_ID when "Tail -f finished."
|
||||
Bugfix. The number of messages deleted was not accurate at all.
|
||||
Usability. masked the warning "no header by parse_headers so taking whole header with BODY.PEEK[HEADER]" to --debug mode.
|
||||
Usability. Moved the warning "no header found so adding our own" to --debug mode.
|
||||
Tests. Added ETA simulation with --simulong (for the progress info on /X)
|
||||
Bugfix. Change the longest line in --exchange2 and --office from 10500 to 10239. (\n inserted for those long lines)
|
||||
Enhancement. --maxage and --minage can take float as value in order to filter with less than a day. (Need --noabletosearch also).
|
||||
----------------------------
|
||||
revision 1.941
|
||||
date: 2019/06/04 22:55:24; author: gilles; state: Exp; lines: +54 -19
|
||||
Usability. Now "imapsync --host1 ks" or "imapsync --host2" is ok and do like a --justconnect on servers. Useful to cjeck rapidely a imap server.
|
||||
----------------------------
|
||||
revision 1.940
|
||||
date: 2019/06/04 06:29:31; author: gilles; state: Exp; lines: +14 -9
|
||||
Added 'junk', 'Junk E-Mail', 'Junk Email' as possible_special of \Junk
|
||||
Added 'Deleted Messages' as possible_special of \Trash
|
||||
----------------------------
|
||||
revision 1.939
|
||||
date: 2019/05/27 21:58:33; author: gilles; state: Exp; lines: +10 -9
|
||||
Back to a test Mail::IMAPClient 3.40 failed but Mail::IMAPClient 3.42 succeed.
|
||||
----------------------------
|
||||
revision 1.938
|
||||
date: 2019/05/27 18:45:06; author: gilles; state: Exp; lines: +111 -33
|
||||
CGI context. --addheader is on by default.
|
||||
Added option --appendlimit xxxx in order to override the value got by APPENDLIMIT in CAPABILITY.
|
||||
Added option --truncmess to allow transfer of too big messages. When you think it's better to have a truncated message than no message at all.
|
||||
1453 regression tests.
|
||||
----------------------------
|
||||
revision 1.937
|
||||
date: 2019/05/01 22:14:00; author: gilles; state: Exp; lines: +328 -326
|
||||
CGI context. Only Message-Id to identify messages, instead of Message-Id Received.
|
||||
Fixed perl critic about blanks.
|
||||
Fixed tests comments
|
||||
----------------------------
|
||||
revision 1.936
|
||||
date: 2019/04/29 05:26:19; author: gilles; state: Exp; lines: +26 -23
|
||||
Bugfix. Do not tail when abort.
|
||||
Usability. --testslive values can be overwritten like --testslive --user1 empty
|
||||
Same thing for --testslive6
|
||||
----------------------------
|
||||
revision 1.935
|
||||
date: 2019/04/28 02:10:24; author: gilles; state: Exp; lines: +293 -44
|
||||
Added File::Tail dependency.
|
||||
Added --tail option. Will do like a tail -f on the logfile of another imapsync with the same pidfile.
|
||||
Good in CGI context. Maybe...
|
||||
We'll see. It was one of my first whishes for cgi behaviour
|
||||
1441 unit tests.
|
||||
----------------------------
|
||||
revision 1.934
|
||||
date: 2019/04/26 08:23:24; author: gilles; state: Exp; lines: +134 -52
|
||||
Added following options available in cgi context:
|
||||
--subfolder1
|
||||
--subfolder2
|
||||
--justfolders
|
||||
--justfoldersizes
|
||||
--delete1
|
||||
--delete2
|
||||
|
||||
CGI context. Added the equivalent command line parameters like:
|
||||
Command line used, run by /usr/bin/perl:
|
||||
/usr/lib/cgi-bin/imapsync --host1 test1.lamiral.info
|
||||
Usability. Turns off --automap when --subfolder1 or --subfolder2 is used.
|
||||
----------------------------
|
||||
revision 1.933
|
||||
date: 2019/04/23 11:42:42; author: gilles; state: Exp; lines: +47 -98
|
||||
CGI context. Added default like --maxsize 1_000_000_000 (Out of memory prevention?)
|
||||
Usability. maxsize is the minimum of --maxsize and APPENDLIMIT=xxx or each one if the other no exists.
|
||||
----------------------------
|
||||
revision 1.932
|
||||
date: 2019/04/13 22:09:04; author: gilles; state: Exp; lines: +93 -24
|
||||
Added --sanitize to remove egding blanks on host1 user1 password1 etc.
|
||||
--sanitize on by default. Use --noanitize to avoid it
|
||||
----------------------------
|
||||
revision 1.931
|
||||
date: 2019/04/13 16:10:24; author: gilles; state: Exp; lines: +109 -22
|
||||
Added test tests_check_binary_embed_all_dyn_libs to detect non embedded dynamic libraries in binaries Darwin and Win32
|
||||
----------------------------
|
||||
revision 1.930
|
||||
date: 2019/04/11 22:32:38; author: gilles; state: Exp; lines: +467 -211
|
||||
All exits are now done with a specific return code related to the error causing the exit.
|
||||
Removed sub die_clean()
|
||||
die_clean() calls replaced by exit_clean() calls
|
||||
----------------------------
|
||||
revision 1.929
|
||||
date: 2019/04/08 09:14:13; author: gilles; state: Exp; lines: +425 -300
|
||||
Bug fix. With --gmail1 or --gmail2 do not sync [Gmail]/All Mail if it is not requested.
|
||||
Bug fix. When asked to terminate by a signal, kill myself by the signal instead of an exit call.
|
||||
Applied Martin Cracauer's advice on https://www.cons.org/cracauer/sigint.html
|
||||
"Proper handling of SIGINT/SIGQUIT"
|
||||
I hope it fixes the not always working double-ctrl-c to end the sync.
|
||||
See bug report https://github.com/imapsync/imapsync/issues/142
|
||||
----------------------------
|
||||
revision 1.928
|
||||
date: 2019/03/28 11:12:44; author: gilles; state: Exp; lines: +648 -317
|
||||
Added --subfolder1 Foo/Bar option in order to restore a backup made with --subfolder2 Foo/Bar
|
||||
--folderrec Foo/Bar is imply by --subfolder1 Foo/Bar because it's the most common purpose.
|
||||
Deglobalized $debug @regextrans2 $sep1 $sep2 $fixslash2
|
||||
Added --resynclabels to resync the Gmail labels X-GM-LABELS
|
||||
Bugfix. --synclabels now create sublabels with --subfolder2
|
||||
Bugfix. --subfolder2 Pf2/Sub2 and --subfolder2 Sub2 perform the same when Pf2 is the --prefix2
|
||||
1336 non-regression tests
|
||||
----------------------------
|
||||
revision 1.927
|
||||
date: 2019/03/22 14:45:55; author: gilles; state: Exp; lines: +9 -8
|
||||
Active --resynclabels when --gmail1 --gmail2
|
||||
----------------------------
|
||||
revision 1.926
|
||||
date: 2019/03/22 14:06:38; author: gilles; state: Exp; lines: +283 -88
|
||||
Call abort() before simulong() to be able to abort a long simulong.
|
||||
Bugfix. --synclabels --subfolder2 create sublabels only and not a mixture.
|
||||
Enhancement. Added --resynclabels
|
||||
1286 non-regression tests
|
||||
----------------------------
|
||||
revision 1.925
|
||||
date: 2019/03/03 12:25:02; author: gilles; state: Exp; lines: +8 -8
|
||||
1268 tests
|
||||
----------------------------
|
||||
revision 1.924
|
||||
date: 2019/03/03 12:22:37; author: gilles; state: Exp; lines: +50 -27
|
||||
Tolerate more load. Double the threshold. accept load at 2 per core instead of 1 per core
|
||||
----------------------------
|
||||
revision 1.923
|
||||
date: 2019/03/03 12:00:05; author: gilles; state: Exp; lines: +29 -20
|
||||
Moved cgiload( $sync ) in order to log exites on heavy load
|
||||
----------------------------
|
||||
revision 1.922
|
||||
date: 2019/02/26 13:03:58; author: gilles; state: Exp; lines: +43 -35
|
||||
Fixed tests to pass under the docker image
|
||||
----------------------------
|
||||
revision 1.921
|
||||
date: 2019/02/18 10:21:03; author: gilles; state: Exp; lines: +10 -8
|
||||
Bugfix. Errors of APPEND were not counted as missing messages on host2!
|
||||
----------------------------
|
||||
@ -192,7 +339,7 @@ Default $sync->{ sigignore } to empty list.
|
||||
----------------------------
|
||||
revision 1.886
|
||||
date: 2018/08/06 15:02:51; author: gilles; state: Exp; lines: +28 -11
|
||||
Added mygetppid because USR1 no available on Windows.
|
||||
Added mygetppid because getppid is not available on Windows.
|
||||
Removed --nosubscribed since it is not coded and useless anyway.
|
||||
----------------------------
|
||||
revision 1.885
|
||||
|
@ -1,5 +1,5 @@
|
||||
#!/bin/cat
|
||||
$Id: FAQ.Admin_Authentication.txt,v 1.6 2018/09/09 10:58:16 gilles Exp gilles $
|
||||
$Id: FAQ.Admin_Authentication.txt,v 1.9 2019/06/26 22:16:43 gilles Exp gilles $
|
||||
|
||||
This documentation is also available online at
|
||||
https://imapsync.lamiral.info/FAQ.d/
|
||||
@ -11,30 +11,43 @@ https://imapsync.lamiral.info/FAQ.d/FAQ.Admin_Authentication.txt
|
||||
=======================================================================
|
||||
|
||||
It can be useful to authenticate without knowing each user password.
|
||||
|
||||
Using an admin account to authenticate is not a standard feature
|
||||
supported by all imap servers. Sometimes it is implemented via --authuser1
|
||||
sometimes not. It depends on the server software and its configuration.
|
||||
You have to figure out what is the imap software server,
|
||||
find out if it supports an admin account and how,
|
||||
if an admin account is actually configured and
|
||||
finally check an authentication via this admin account for
|
||||
a standard user.
|
||||
sometimes not. It depends on the imap software server and its configuration.
|
||||
|
||||
Known imap server software supporting imap admin authentication:
|
||||
You have to follow this road:
|
||||
* Determine what is the imap software server
|
||||
* Find out wether it supports an admin account or not
|
||||
* If no, leave this reading, take an handkerchief and cry
|
||||
* If yes, search how the imap software server supports
|
||||
an admin account (see below)
|
||||
* Figure out wether an admin account is actually configured or not,
|
||||
* If not then configure it,
|
||||
* Finally, check an imapsync authentication via this admin account for
|
||||
a standard user, option --justlogin is nice for doing this.
|
||||
* Use it for all users.
|
||||
* Next, read their email messages, enter their personnal life etc.
|
||||
I'm kidding.
|
||||
|
||||
* Exchange 2003/2007/2010/2013. See the file FAQ.Exchange.txt
|
||||
* Office365. See the file FAQ.Exchange.txt
|
||||
* Gmail. See the file FAQ.XOAUTH2.txt
|
||||
* Dovecot. See the file FAQ.Dovecot.txt
|
||||
* Zimbra. See the file FAQ.Zimbra.txt
|
||||
* UW-imap. See the file FAQ.General.txt
|
||||
Good luck!
|
||||
|
||||
Known imap software servers supporting imap admin authentication:
|
||||
|
||||
* Exchange 2003/2007/2010/2013/2016. See the file FAQ.Exchange.txt
|
||||
* Office365. See the file FAQ.Exchange.txt
|
||||
* Gmail. See the file FAQ.XOAUTH2.txt
|
||||
* Dovecot. See the file FAQ.Dovecot.txt
|
||||
* Zimbra. See the file FAQ.Zimbra.txt
|
||||
* Kerio See the file FAQ.Kerio.txt
|
||||
* UW-imap. See the file FAQ.General.txt
|
||||
* Cyrus-imap. See the file FAQ.General.txt
|
||||
* Sun Java Enterprise System/SunOne/iPlanet. See the file FAQ.General.txt
|
||||
|
||||
Known imap server software NOT supporting imap admin authentication:
|
||||
Known imap software servers NOT supporting imap admin authentication:
|
||||
|
||||
* Domino Lotus Notes.
|
||||
* SmartCloud Notes.
|
||||
* Domino Lotus Notes. See FAQ.Handkerchief.txt
|
||||
* SmartCloud Notes. Same joke.
|
||||
|
||||
=======================================================================
|
||||
=======================================================================
|
||||
|
@ -1,5 +1,5 @@
|
||||
#!/bin/cat
|
||||
$Id: FAQ.Archiving.txt,v 1.13 2018/12/09 21:26:25 gilles Exp gilles $
|
||||
$Id: FAQ.Archiving.txt,v 1.14 2019/03/22 11:50:36 gilles Exp gilles $
|
||||
|
||||
This documentation is also available online at
|
||||
https://imapsync.lamiral.info/FAQ.d/
|
||||
@ -24,6 +24,8 @@ Q. Can imapsync be used to maintain a local offline copy of a
|
||||
ideally without requiring a second IMAP host?
|
||||
|
||||
|
||||
|
||||
https://imapsync.lamiral.info/FAQ.d/FAQ.Archiving.txt
|
||||
=======================================================================
|
||||
Q. Can I archive different accounts on the same destination account,
|
||||
each account on a separate folder?
|
||||
@ -37,15 +39,16 @@ R. Yes. Use --subfolder2
|
||||
|
||||
Example:
|
||||
|
||||
imapsync ... --user1 foo --subfolder2 foo
|
||||
imapsync ... --user1 Foo --subfolder2 FooArch
|
||||
|
||||
imapsync ... --user1 bar --subfolder2 bar
|
||||
imapsync ... --user1 Bar --subfolder2 BarArch
|
||||
|
||||
In case you need a strict sync, add --delete2 --delete2foldersonly "foo"
|
||||
(or "bar"), il will delete on account2 what is not on account1 but only
|
||||
in the right place, ie, the subfolder "foo".
|
||||
In case you need a strict sync, add --delete2 --delete2foldersonly "FooArch"
|
||||
(or "BarArch" for the second example); it will delete on account2
|
||||
what is not on account1 but only in the right place, ie, the subfolder "foo".
|
||||
Example:
|
||||
|
||||
imapsync ... --user1 foo --subfolder2 foo --delete2 --delete2foldersonly "foo"
|
||||
imapsync ... --user1 Foo --subfolder2 FooArch --delete2 --delete2foldersonly "FooArch"
|
||||
|
||||
=======================================================================
|
||||
Q. How to move emails from one IMAP folder to another either on the
|
||||
|
@ -1,5 +1,5 @@
|
||||
#!/bin/cat
|
||||
$Id: FAQ.Contacts_Calendars.txt,v 1.11 2018/09/26 22:25:32 gilles Exp gilles $
|
||||
$Id: FAQ.Contacts_Calendars.txt,v 1.12 2019/04/30 13:04:18 gilles Exp gilles $
|
||||
|
||||
This documentation is also available online at
|
||||
https://imapsync.lamiral.info/FAQ.d/
|
||||
@ -26,21 +26,25 @@ R. No, Imapsync can't migrate Contacts and Calendars.
|
||||
events via IMAP. In other words, messages synced by imapsync from
|
||||
Calendars or Contacts folders are not used by email servers to set
|
||||
or get the contacts or calendars.
|
||||
No way via IMAP, no way via imapsync.
|
||||
So it's a good idea to avoid syncing contacts and calendars.
|
||||
But see the question below
|
||||
No way via IMAP, no way via imapsync.
|
||||
|
||||
So it's a good idea to avoid syncing contacts and calendars when
|
||||
using imapsync. See below
|
||||
"How can I avoid copying Calendar or Contacts folders?"
|
||||
|
||||
But see also the question at the end of this document
|
||||
"How can I copy or synchronize Calendars or Contacts?".
|
||||
|
||||
=======================================================================
|
||||
Q. Can I copy or sync Chat messages with imapsync?
|
||||
|
||||
R. No, Imapsync can't migrate Chat messages (those in GSuite for example)
|
||||
R. No, Imapsync can't migrate Chat messages (those in GSuite for example).
|
||||
The explanation is the same as with Calendars or Contacts.
|
||||
|
||||
=======================================================================
|
||||
Q. How can I avoid copying Calendar or Contacts folders?
|
||||
|
||||
R1. You can avoid synchronizing Calendar or Contacts folders with
|
||||
R. You can avoid synchronizing Calendar or Contacts folders with
|
||||
the --exclude option. First you have to search what is their
|
||||
exact name. The folders listing printed by imapsync at the
|
||||
beginning of a run will surely help to find their names.
|
||||
@ -48,6 +52,25 @@ R1. You can avoid synchronizing Calendar or Contacts folders with
|
||||
|
||||
imapsync ... --exclude "Calendar" --exclude "Contacts"
|
||||
|
||||
Be aware that this syntax will exclude all folders that have
|
||||
Calendar or Contacts in their names, as a substring,
|
||||
like "MyCalendarZ" or "TheContactsImDoneWith".
|
||||
Also, case matters: "calendar" does not match "Calendar".
|
||||
|
||||
To stritly avoid only "Calendar" or "Contacts" use
|
||||
the following
|
||||
|
||||
On windows:
|
||||
|
||||
imapsync ... --exclude "^Calendar$" --exclude "^Contacts$"
|
||||
|
||||
On Unix:
|
||||
|
||||
imapsync ... --exclude '^Calendar$' --exclude '^Contacts$'
|
||||
or
|
||||
imapsync ... --exclude "^Calendar\$" --exclude "^Contacts\$"
|
||||
|
||||
|
||||
=======================================================================
|
||||
Q. How can I copy or synchronize Calendars or Contacts?
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
#!/bin/cat
|
||||
$Id: FAQ.Dates.txt,v 1.9 2018/11/04 09:27:17 gilles Exp gilles $
|
||||
$Id: FAQ.Dates.txt,v 1.10 2019/05/27 14:26:39 gilles Exp gilles $
|
||||
|
||||
This documentation is also available online at
|
||||
https://imapsync.lamiral.info/FAQ.d/
|
||||
@ -34,15 +34,17 @@ but not with:
|
||||
- Zimbra
|
||||
- Gmail
|
||||
|
||||
A first thing to keep in mind.
|
||||
Imapsync does not touch any byte of messages unless told to
|
||||
do so by special options like --regexmess or --pipemess.
|
||||
Messages on both parts should be exactly identical because
|
||||
imapsync does a verbatim sync of all messages.
|
||||
First, a thing to keep in mind.
|
||||
|
||||
Imapsync does not touch any byte of messages unless told to do so by
|
||||
special options like --regexmess or --pipemess. Messages on both
|
||||
parts should be exactly identical because imapsync does a verbatim
|
||||
sync of all messages, by default.
|
||||
|
||||
Now I explain the whole picture about dates of messages.
|
||||
|
||||
There are several different dates attached to any message.
|
||||
|
||||
First, there is the "Date:" header, which belongs to the message itself.
|
||||
You can see this "Date:" header line by asking "View->Message Source"
|
||||
in most email client software (Ctrl-u in Thunderbird).
|
||||
@ -52,37 +54,40 @@ MUA can be Outlook, Thunderbird, a webmail or Mutt etc.
|
||||
The "Date:" header is usually the date the message was written
|
||||
or sent the first time, at the writer side.
|
||||
This "Date:" header line is never changed by any transfer or copy.
|
||||
If an email reader uses the "Date:" header for displaying the date of a
|
||||
message then no problem should arise.
|
||||
|
||||
Another date is the internal date. In IMAP, the internal date is handled
|
||||
by the imap server and normally it corresponds to the arrival date in the mailbox.
|
||||
This date is not part of the email message itself, it's a metadata kept
|
||||
by the imap server.
|
||||
The IMAP protocol allows the internal date to be set by a email client
|
||||
If an email reader uses the "Date:" header for displaying the date of
|
||||
a message then no problem should arise.
|
||||
|
||||
Another date is the "internal date". In IMAP, the internal date is
|
||||
handled by the imap server and normally it corresponds to the arrival
|
||||
date in the mailbox. This date is not part of the email message
|
||||
itself, it is a metadata kept by the imap server.
|
||||
|
||||
The IMAP protocol allows the internal date to be set by an email client
|
||||
when a message is delivered by the imap APPEND command.
|
||||
Imapsync synchronizes these internal dates, by default, so internal dates
|
||||
on host2 should then be the same as the internal dates on host1.
|
||||
If an email reader uses the internal date for displaying the date of a
|
||||
message then the sync date problem only occurs when the host2 server software
|
||||
ignores the internal date given by imapsync during the APPEND imap
|
||||
command. It happens with some imap servers.
|
||||
|
||||
There are also the "Received:" header lines. Each time a message travels
|
||||
a SMTP server, this one adds a "Received:" header line. Sometimes
|
||||
some email clients use the last "Received:" header date as the date of the
|
||||
message. And some IMAP servers software add a "Received:" line after
|
||||
and imap transfer. If those both conditions are met then the date
|
||||
displayed become the transfer date even if imapsync
|
||||
If an email reader uses the internal date for displaying the date of a
|
||||
message then the sync date problem only occurs when the host2 imap
|
||||
server ignores the internal date given by imapsync during the APPEND
|
||||
imap command. It happens with some imap servers. Bad luck.
|
||||
|
||||
There are also the "Received:" header lines. Each time a message
|
||||
travels a SMTP server, this one adds a "Received:" header
|
||||
line. Sometimes some email clients use the last "Received:" header
|
||||
date as the date of the message. And some IMAP servers software add a
|
||||
"Received:" line after and imap transfer. If those both conditions are
|
||||
met then the date displayed become the transfer date even if imapsync
|
||||
has done its best to keep all the dates synchronized. Bad luck.
|
||||
|
||||
|
||||
Solutions:
|
||||
a) Use another email client or configure it in order that it sorts messages
|
||||
by sent dates, the "Date:" header line.
|
||||
by sent dates, the "Date:" header line.
|
||||
|
||||
b) Use a imap server that respects the imap RFC and accepts
|
||||
the internal date set by imapsync.
|
||||
the internal date set by imapsync.
|
||||
|
||||
c) Try to understand why the email client software shows another date
|
||||
than the "Date:" header line.
|
||||
|
54
FAQ.d/FAQ.David_Tobit.txt
Normal file
54
FAQ.d/FAQ.David_Tobit.txt
Normal file
@ -0,0 +1,54 @@
|
||||
#!/bin/cat
|
||||
$Id: FAQ.David_Tobit.txt,v 1.4 2019/03/28 17:58:53 gilles Exp gilles $
|
||||
|
||||
This documentation is also available online at
|
||||
https://imapsync.lamiral.info/FAQ.d/
|
||||
https://imapsync.lamiral.info/FAQ.d/FAQ.David_Tobit.txt
|
||||
|
||||
|
||||
=======================================================================
|
||||
Imapsync tips for David Tobit imap server
|
||||
=======================================================================
|
||||
|
||||
|
||||
|
||||
=======================================================================
|
||||
Q. Migrating to David Tobit V12
|
||||
(Banner: "* OK IMAP4rev1 David.fx Mail Access Server MA-12.00a (0271)")
|
||||
|
||||
imapsync ... --sep2 / --create_folder_old
|
||||
|
||||
Thanks to Ludwig Behm
|
||||
|
||||
=======================================================================
|
||||
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
|
||||
(Banner: "* 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
|
||||
(Banner: "* OK IMAP4rev1 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/msg00583.html
|
||||
http://www.linux-france.org/prj/imapsync_list/threads.html#00583
|
||||
patch saved in ./patches/imapsync-1.337_tobit_V6.patch
|
||||
|
||||
=======================================================================
|
@ -1,5 +1,5 @@
|
||||
#!/bin/cat
|
||||
$Id: FAQ.Duplicates.txt,v 1.18 2019/02/14 17:22:10 gilles Exp gilles $
|
||||
$Id: FAQ.Duplicates.txt,v 1.20 2019/05/17 10:10:30 gilles Exp gilles $
|
||||
|
||||
This documentation is also available online at
|
||||
https://imapsync.lamiral.info/FAQ.d/
|
||||
@ -13,8 +13,9 @@ https://imapsync.lamiral.info/FAQ.d/FAQ.Duplicates.txt
|
||||
Q. How can I know if imapsync will generate duplicates on a second run?
|
||||
|
||||
R. To see if imapsync will generate duplicates on a second run, start
|
||||
a second run with --dry option added. imapsync will then show if it
|
||||
would mistakenly copy messages again, but without really copying them
|
||||
a second run with --dry option added. With --dry, imapsync will
|
||||
show whether it would mistakenly copy messages again, but without
|
||||
really copying them:
|
||||
|
||||
imapsync ... --dry
|
||||
|
||||
@ -35,7 +36,7 @@ Q: Multiple copies, duplicates, when I run imapsync twice ore more.
|
||||
|
||||
R0. First, some explanations to understand the issue.
|
||||
Normally and by default, imapsync doesn't generate duplicates.
|
||||
So if it does generate duplicates it means a problem occurs
|
||||
So, if it does generate duplicates it means a problem occurs
|
||||
with message identification. It happens sometimes with IMAP
|
||||
servers changing the "Message-Id" header line or one or more
|
||||
of the "Received:" header lines in the header part of messages.
|
||||
@ -66,7 +67,7 @@ don't go on, it means imapsync is still suffering to
|
||||
identify messages.
|
||||
|
||||
If you end with many messages skipped then it's very
|
||||
good and now you can safely resync the mailboxe
|
||||
good and now you can safely resync the mailbox
|
||||
and get rid of the dupplicates messages on host2 with:
|
||||
|
||||
imapsync ... --useheader "Message-Id" --delete2duplicates
|
||||
@ -80,7 +81,7 @@ to identify and compare messages in folders.
|
||||
Instead of some headers, --useuid tell imapsync to use
|
||||
the imap UIDs given by imap servers on both sides.
|
||||
To avoid duplicates on next runs, imapsync uses a local cache
|
||||
where it keeps UIDs already transfered.
|
||||
where it keeps UIDs already transferred.
|
||||
|
||||
imapsync ... --useuid
|
||||
|
||||
@ -95,11 +96,12 @@ A solution? Two solutions.
|
||||
The easiest is --delete2 if you are permitted to use it.
|
||||
Option --delete2 removes messages on host2
|
||||
that are not on host1. So, with --delete2 you go for resyncing all
|
||||
messages again but all previously transferred messages are deleted,
|
||||
but also messages previously there without imapsync.
|
||||
So --useuid --delete2 is easy to remove duplicates but not for
|
||||
all contexts. The host2 account must be considered as a strict
|
||||
replication of the host1 account, ie, not active.
|
||||
messages again. All previously transferred messages are deleted,
|
||||
but also messages previously there without imapsync.
|
||||
So --useuid --delete2 is an easy way to remove duplicates but it
|
||||
is not suitable in all contexts. The good context is that the host2
|
||||
account must be considered as a strict replication of the host1
|
||||
account, ie, host2 not active yet.
|
||||
|
||||
A second solution, better if R3 works (see R3 below), is to build
|
||||
the cache before using --useuid
|
||||
@ -191,8 +193,11 @@ R2. With option --useuid imapsync doesn't use headers to identify
|
||||
=======================================================================
|
||||
Q. How can I remove duplicates in a lone account?
|
||||
|
||||
R. Just run imapsync on the same account with option --delete2duplicates,
|
||||
ie, with host1 == host2, user1 == user2, password1 == password2
|
||||
R. In order to remove duplicates in a lone account, just run imapsync
|
||||
on the same account as source and destination, plus the
|
||||
option --delete2duplicates, ie, with
|
||||
host1 == host2, user1 == user2, password1 == password2
|
||||
|
||||
|
||||
=======================================================================
|
||||
=======================================================================
|
||||
|
@ -1,9 +1,10 @@
|
||||
#!/bin/cat
|
||||
$Id: FAQ.Emptying.txt,v 1.6 2018/05/24 11:34:30 gilles Exp gilles $
|
||||
$Id: FAQ.Emptying.txt,v 1.8 2019/04/30 12:52:10 gilles Exp gilles $
|
||||
|
||||
This documentation is also available online at
|
||||
https://imapsync.lamiral.info/FAQ.d/
|
||||
https://imapsync.lamiral.info/FAQ.d/
|
||||
|
||||
https://imapsync.lamiral.info/FAQ.d/FAQ.Emptying.txt
|
||||
|
||||
=======================================================================
|
||||
Imapsync tip to empty an account.
|
||||
@ -12,27 +13,28 @@ https://imapsync.lamiral.info/FAQ.d/
|
||||
=======================================================================
|
||||
Q. How to delete all emails of all folders of an account with imapsync?
|
||||
|
||||
R. Use the same account on both sides with option --delete
|
||||
R. Use the same account on both sides with option --delete1
|
||||
--noexpungeaftereach
|
||||
|
||||
Option --noexpungeaftereach is just to speed up the deletion.
|
||||
Option --noexpungeaftereach is just to speed up the deletions.
|
||||
|
||||
Example:
|
||||
Example (real example):
|
||||
|
||||
./imapsync \
|
||||
--host1 test.lamiral.info --user1 test --password1 secret \
|
||||
--host2 test.lamiral.info --user2 test --password2 secret \
|
||||
--delete --noexpungeaftereach
|
||||
--host1 test.lamiral.info --user1 empty --password1 secret \
|
||||
--host2 test.lamiral.info --user2 empty --password2 secret \
|
||||
--delete1 --noexpungeaftereach
|
||||
|
||||
=======================================================================
|
||||
Q. How to delete all folders of an account with imapsync?
|
||||
|
||||
R. Use an already empty account as source and sync this account
|
||||
to the account you want to clear, with --delete2folders
|
||||
R. Use the same account on both sides with the options
|
||||
--delete1 --noexpungeaftereach --delete1emptyfolders
|
||||
|
||||
./imapsync ... --delete1 --noexpungeaftereach --delete1emptyfolders
|
||||
|
||||
Example:
|
||||
It won't delete the folder INBOX since INBOX is mandatory in imap.
|
||||
|
||||
./imapsync ... --delete2folders --foldersizes
|
||||
|
||||
=======================================================================
|
||||
=======================================================================
|
||||
|
@ -1,5 +1,5 @@
|
||||
|
||||
$Id: FAQ.Exchange.txt,v 1.49 2018/12/03 23:09:28 gilles Exp gilles $
|
||||
$Id: FAQ.Exchange.txt,v 1.50 2019/04/02 09:29:38 gilles Exp gilles $
|
||||
|
||||
This documentation is also available online at
|
||||
https://imapsync.lamiral.info/FAQ.d/
|
||||
@ -455,6 +455,15 @@ encountered so you might also see "BYE Connection closed" errors from
|
||||
Exchange, which means Exchange leaves the session and say goodbye,
|
||||
come back later. Rerun a sync then.
|
||||
|
||||
If on Linux, there is a good Python script in the tarball that can
|
||||
fix several things that Exchange or O365 have issues with.
|
||||
|
||||
Use it like this:
|
||||
|
||||
./imapsync ... --pipemess W/tools/fix_email_for_exchange.py
|
||||
|
||||
It often does some miracles on messages.
|
||||
|
||||
=======================================================================
|
||||
Q. From XXX to Exchange 2010 or 2013 or Office365 the flag Flagged does
|
||||
not seem to be well synced. What can I do?
|
||||
|
@ -1,5 +1,5 @@
|
||||
#!/bin/cat
|
||||
$Id: FAQ.Flags.txt,v 1.20 2019/02/14 16:01:41 gilles Exp gilles $
|
||||
$Id: FAQ.Flags.txt,v 1.21 2019/03/08 19:04:32 gilles Exp gilles $
|
||||
|
||||
This documentation is also available online at
|
||||
https://imapsync.lamiral.info/FAQ.d/
|
||||
@ -149,22 +149,22 @@ Add the \Seen flag to all messages like this:
|
||||
|
||||
On Winwows:
|
||||
|
||||
imapsync.exe ... --regexflag "s,^((?!\\Seen)).*$,$1 \\Seen,"
|
||||
imapsync.exe ... --regexflag "s,\\Seen,," --regexflag "s,,\\Seen ,"
|
||||
|
||||
On Unix:
|
||||
|
||||
imapsync ... --regexflag 's,\\Seen,,' --regexflag 's,,\\Seen ,'
|
||||
|
||||
R2. You can also filter with --search1 UNSEEN and use only one
|
||||
of the regexes:
|
||||
|
||||
On Unix:
|
||||
|
||||
imapsync ... --regexflag 's,^((?!\\Seen)).*$,$1 \\Seen,'
|
||||
|
||||
R2. You can also filter with --search1 UNSEEN and use a simpler
|
||||
regex:
|
||||
imapsync ... --search1 UNSEEN --regexflag 's,,\\Seen ,'
|
||||
|
||||
On Winwows:
|
||||
|
||||
imapsync.exe ... --search1 UNSEEN --regexflag "s/(.*)/$1 \\Seen/"
|
||||
|
||||
On Unix:
|
||||
|
||||
imapsync ... --search1 UNSEEN --regexflag 's/(.*)/$1 \\Seen/'
|
||||
imapsync.exe ... --search1 UNSEEN --regexflag "s,,\\Seen ,"
|
||||
|
||||
R3. Fix it on the server Exchange:
|
||||
Google translate:
|
||||
|
@ -1,5 +1,5 @@
|
||||
#!/bin/cat
|
||||
$Id: FAQ.Folders_Mapping.txt,v 1.17 2018/11/20 10:26:18 gilles Exp gilles $
|
||||
$Id: FAQ.Folders_Mapping.txt,v 1.19 2019/03/04 21:21:18 gilles Exp gilles $
|
||||
|
||||
This documentation is also available online at
|
||||
https://imapsync.lamiral.info/FAQ.d/
|
||||
@ -39,16 +39,17 @@ Things to know and understand before playing with --regextrans2
|
||||
*) --regextrans2 is used to transform folders names.
|
||||
|
||||
*) --regextrans2 applies after the default
|
||||
inversion prefix1 <-> prefix2 and sep1 <-> sep2
|
||||
So when elaborating the regex you should focus on
|
||||
inversion prefix1 <-> prefix2 and sep1 <-> sep2.
|
||||
So, when elaborating the regex you should focus on
|
||||
the right part of the default mapping printed by
|
||||
imapsync, the part showing the host2 folder name.
|
||||
The section to look at is within the folder loop:
|
||||
The section to look at is either the folder size section
|
||||
or within the folder loop located "Here" between the lines
|
||||
++++ Looping on each folder
|
||||
Here
|
||||
++++ End looping on each folder
|
||||
|
||||
*) Several --regextrans2 is possible, they will be applied in the order
|
||||
|
||||
*) Several --regextrans2 are possible, they will be applied in the order
|
||||
of the command line, each one on the result of the previous one.
|
||||
|
||||
*) --regextrans2 uses Perl regex mechanism so it may be hard to master
|
||||
@ -61,18 +62,19 @@ Here
|
||||
|
||||
On Linux/Unix use single quotes ' around the regex string, it is
|
||||
easier to get what we want with single quotes since the shell
|
||||
won't change the inner string. Like --regextrans2 'myregex'
|
||||
won't change the inner string. Use --regextrans2 'myregex'
|
||||
|
||||
*) Good method to elaborate any --regextrans2 string
|
||||
|
||||
First, elaborate the --regextrans2 string with --dry --justfolders options.
|
||||
|
||||
imapsync ... --dry --justfolders
|
||||
imapsync ... --dry --justfolders
|
||||
|
||||
With --dry imapsync shows the transformations it will do without
|
||||
really doing them, --dry is the "do nothing" mode.
|
||||
With --justfolders imapsync will work only with folders,
|
||||
messages won't be taken into account, so it will be fast.
|
||||
messages won't be taken into account, so it will be fast
|
||||
and focused on the folders names.
|
||||
|
||||
When the output shows what you expect imapsync to do with folders
|
||||
names, you can remove the --dry option. Keep the --justfolders
|
||||
@ -106,50 +108,13 @@ Examples:
|
||||
|
||||
2b) To sync a complete account in a subfolder called FOO
|
||||
|
||||
Since imapsync release 1.641 simply use
|
||||
With imapsync release 1.641 and former, simply use
|
||||
|
||||
imapsync ... --subfolder2 FOO
|
||||
|
||||
Next examples are subfolder solutions for any release.
|
||||
Examples to this subfolder problem for any release
|
||||
can be seen below, in another Q/R section.
|
||||
|
||||
a) Separator is dot character "." and "INBOX" prefixes every folder
|
||||
|
||||
On Linux/Unix:
|
||||
|
||||
--regextrans2 's,^INBOX(.*),INBOX.FOO$1,'
|
||||
|
||||
On Windows:
|
||||
|
||||
--regextrans2 "s,^INBOX(.*),INBOX.FOO$1,"
|
||||
|
||||
or:
|
||||
|
||||
b) Separator is the slash character "/" and there is no prefix
|
||||
|
||||
On Linux/Unix:
|
||||
|
||||
--regextrans2 's,(.*),FOO/$1,'
|
||||
|
||||
On Windows:
|
||||
|
||||
--regextrans2 "s,(.*),FOO/$1,"
|
||||
|
||||
or:
|
||||
|
||||
c) Any separator, any prefix solution, FOO is the subfolder:
|
||||
|
||||
It is a complicated line because every case is taken into account.
|
||||
Type it in one line (or with the \ at the end of first line on Unix shells.
|
||||
|
||||
On Linux/Unix:
|
||||
|
||||
--regextrans2 's,${h2_prefix}(.*),${h2_prefix}FOO${h2_sep}$1,' \
|
||||
--regextrans2 's,^INBOX$,${h2_prefix}FOO${h2_sep}INBOX,'
|
||||
|
||||
On Windows:
|
||||
|
||||
--regextrans2 "s,${h2_prefix}(.*),${h2_prefix}FOO${h2_sep}$1," ^
|
||||
--regextrans2 "s,^INBOX$,${h2_prefix}FOO${h2_sep}INBOX,"
|
||||
|
||||
3) to substitute all characters dot "." by underscores "_"
|
||||
--regextrans2 "s,\.,_,g"
|
||||
@ -164,8 +129,7 @@ On Windows:
|
||||
|
||||
--regextrans2 s,\^",_,g
|
||||
|
||||
3c) to substitute all characters *%. by underscores _
|
||||
You can increase the *%. list by any unwanted character.
|
||||
3c) to substitute all characters * % . and # by underscores _
|
||||
|
||||
On Linux/Unix:
|
||||
|
||||
@ -175,11 +139,13 @@ On Windows:
|
||||
|
||||
--regextrans2 "tr,*%.#,_,"
|
||||
|
||||
You can increase the *%.# list by any unwanted character,
|
||||
plus, the order doesn't count. See 3d) for &
|
||||
|
||||
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]
|
||||
[mail/Test] -> [INBOX/Test]
|
||||
@ -214,39 +180,26 @@ to folder INBOX only on host2:
|
||||
4) Remove --justfolders
|
||||
|
||||
|
||||
======================================================================
|
||||
Q. I have moved from Braunschweig to Graz, so I would like to have my
|
||||
whole Braunschweig mail sorted into a sub-folder INBOX.Braunschweig
|
||||
of my new mail account.
|
||||
|
||||
R.
|
||||
1) First try (safe mode):
|
||||
|
||||
imapsync \
|
||||
...
|
||||
--regextrans2 "s/INBOX(.*)/INBOX.Braunschweig\$1/" \
|
||||
--dry --justfolders
|
||||
|
||||
On Windows, in the previous example containing \$1 you have to
|
||||
replace the two \$1 by $1 (remove the \ before $).
|
||||
|
||||
|
||||
2) See if the output says everything you want imapsync to do,
|
||||
--dry option is safe and does nothing real.
|
||||
|
||||
3) Remove --dry
|
||||
Check the imap folder tree on the target side
|
||||
|
||||
4) Remove --justfolders
|
||||
|
||||
=======================================================================
|
||||
Q. I would like to move emails from InBox to a sub-folder called,
|
||||
say "2010-INBOX" based on the date (Like all emails received in the
|
||||
Year 2010 should be moved to the folder called "2010-INBOX").
|
||||
say "2010-INBOX" based on the date. Like all emails received in the
|
||||
year 2010 should be moved to the folder called "2010-INBOX".
|
||||
|
||||
R. 2 ways :
|
||||
|
||||
a) Manually:
|
||||
a) With imapsync:
|
||||
-----------------
|
||||
|
||||
imapsync ... \
|
||||
--search "SENTSINCE 1-Jan-2010 SENTBEFORE 31-Dec-2010"
|
||||
--f1f2 "INBOX=2010-INBOX" \
|
||||
--folder INBOX
|
||||
|
||||
See also the FAQ FAQ.Messages_Selection.txt
|
||||
https://imapsync.lamiral.info/FAQ.d/FAQ.Messages_Selection.txt
|
||||
to get more examples about how to select messages.
|
||||
|
||||
b) Manually:
|
||||
------------
|
||||
|
||||
1) You create a folder INBOX.2010-INBOX
|
||||
@ -257,13 +210,58 @@ a) Manually:
|
||||
|
||||
3) Cut/paste in INBOX.2010-INBOX
|
||||
|
||||
b) With imapsync:
|
||||
-----------------
|
||||
|
||||
imapsync ... \
|
||||
--search 'SENTSINCE 1-Jan-2010 SENTBEFORE 31-Dec-2010'
|
||||
--regextrans2 's/^INBOX$/INBOX.2010-INBOX/' \
|
||||
--folder INBOX
|
||||
|
||||
=======================================================================
|
||||
Q. How to sync a complete account in a subfolder called FOO,
|
||||
the hard way.
|
||||
|
||||
R0. See the easy above using --subfolder2
|
||||
|
||||
R1. Several ways to do it.
|
||||
|
||||
a) Separator is dot character "." and "INBOX" prefixes every folder
|
||||
|
||||
On Linux/Unix:
|
||||
|
||||
--regextrans2 's,^INBOX(.*),INBOX.FOO$1,'
|
||||
|
||||
On Windows:
|
||||
|
||||
--regextrans2 "s,^INBOX(.*),INBOX.FOO$1,"
|
||||
|
||||
or:
|
||||
|
||||
b) Separator is the slash character "/" and there is no prefix
|
||||
|
||||
On Linux/Unix:
|
||||
|
||||
--regextrans2 's,(.*),FOO/$1,'
|
||||
|
||||
or with doublequotes
|
||||
|
||||
--regextrans2 "s,(.*),FOO/\$1,"
|
||||
|
||||
On Windows:
|
||||
|
||||
--regextrans2 "s,(.*),FOO/$1,"
|
||||
|
||||
or:
|
||||
|
||||
c) Any separator, any prefix solution, FOO is the subfolder:
|
||||
|
||||
It is a complicated line because every case is taken into account.
|
||||
Type it in one line (or with the \ at the end of first line on Unix shells.
|
||||
|
||||
On Linux/Unix:
|
||||
|
||||
--regextrans2 's,${h2_prefix}(.*),${h2_prefix}FOO${h2_sep}$1,' \
|
||||
--regextrans2 's,^INBOX$,${h2_prefix}FOO${h2_sep}INBOX,'
|
||||
|
||||
On Windows:
|
||||
|
||||
--regextrans2 "s,${h2_prefix}(.*),${h2_prefix}FOO${h2_sep}$1," ^
|
||||
--regextrans2 "s,^INBOX$,${h2_prefix}FOO${h2_sep}INBOX,"
|
||||
|
||||
|
||||
=======================================================================
|
||||
=======================================================================
|
||||
|
@ -1,5 +1,5 @@
|
||||
#!/bin/cat
|
||||
$Id: FAQ.Gmail.txt,v 1.51 2019/02/18 09:49:14 gilles Exp gilles $
|
||||
$Id: FAQ.Gmail.txt,v 1.58 2019/04/25 10:41:12 gilles Exp gilles $
|
||||
|
||||
This document is also available online at
|
||||
https://imapsync.lamiral.info/FAQ.d/
|
||||
@ -67,6 +67,14 @@ it has to be allowed in the Gmail configuration part:
|
||||
-> IMAP Access
|
||||
-> Enable IMAP
|
||||
|
||||
Also:
|
||||
|
||||
-> Verify 2-step verification is OFF
|
||||
https://myaccount.google.com/security?hl=en&pli=1&nlr=1#signin
|
||||
-> Turn ON "Access for less secure apps"
|
||||
https://www.google.com/settings/security/lesssecureapps
|
||||
https://support.google.com/accounts/answer/6010255?hl=en
|
||||
|
||||
=======================================================================
|
||||
Q. Even after several syncs the number of messages differs
|
||||
largely between imapsync and the Gmail web interface.
|
||||
@ -89,10 +97,10 @@ R. Basically it takes X days to transfer X GB per account.
|
||||
From the previous link:
|
||||
|
||||
* it's 2X days to upload X GB to Gmail, it's why I suggest to add
|
||||
--maxbytespersecond 10000
|
||||
--maxbytespersecond 10000 --maxbytesafter 1_000_000_000
|
||||
for uploading messages to Gmail
|
||||
* it's X/2 days to download X BG from Gmail, it's why I suggest to add
|
||||
--maxbytespersecond 20000
|
||||
--maxbytespersecond 20000 --maxbytesafter 1_000_000_000
|
||||
for downloading messages from Gmail
|
||||
|
||||
That's theoretical values that always work in practice. Try
|
||||
@ -192,9 +200,9 @@ imapsync --host1 mail.oldhost.com \
|
||||
--password1 password \
|
||||
--user2 my_email@gmail.com \
|
||||
--password2 password \
|
||||
--gmail2 --maxsize 35_651_584
|
||||
--gmail2
|
||||
|
||||
Or, replacing what does --gmail2 (values are from imapsync 1.882):
|
||||
Or, replacing what does --gmail2 (values are from imapsync 1.921):
|
||||
|
||||
imapsync --host1 mail.oldhost.com \
|
||||
--user1 my_email@oldhost.com \
|
||||
@ -209,9 +217,27 @@ imapsync --host1 mail.oldhost.com \
|
||||
--automap \
|
||||
--expunge1 \
|
||||
--addheader \
|
||||
--exclude "\[Gmail\]$" \
|
||||
--regextrans2 "s/[ ]+/_/g" \
|
||||
--regextrans2 "s/['\^\"\\\\]/_/g"
|
||||
--exclude "\[Gmail\]$" \
|
||||
--regextrans2 "s/['\^\"\\\\]/_/g" \
|
||||
--regextrans2 "s/[ ]+/_/g"
|
||||
|
||||
|
||||
Starting from imapsync 1.926 the last --regextrans2 replacing
|
||||
all blanks, which was:
|
||||
|
||||
--regextrans2 "s/[ ]+/_/g"
|
||||
|
||||
became
|
||||
|
||||
on Winwows, like:
|
||||
|
||||
imapsync.exe ... --regexflag "s,\\Seen,," --regexflag "s,,\\Seen ,"
|
||||
|
||||
on Linux, like:
|
||||
|
||||
imapsync ... --regexflag 's,\\Seen,,' --regexflag 's,,\\Seen ,'
|
||||
|
||||
|
||||
|
||||
With --gmail2 you can override the parameters
|
||||
that are activated by them, for example:
|
||||
@ -438,9 +464,10 @@ R. No.
|
||||
using the IMAP protocol.
|
||||
|
||||
=======================================================================
|
||||
Q. Can I safely use --useuid for Gmail transfers?
|
||||
Q. Can I safely use --useuid or --usecache for Gmail transfers?
|
||||
|
||||
R. Yes, but I suggest to not use --useuid for Gmail transfers.
|
||||
R. Yes, but I suggest to not use --useuid nor --usecache
|
||||
for Gmail transfers.
|
||||
|
||||
Using UIDs is useless with Gmail in the case of global duplicates
|
||||
(duplicates across different folders). Gmail always accept a global
|
||||
@ -546,7 +573,6 @@ 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
|
||||
|
||||
http://biasecurities.com/2009/02/migrate-email-from-gmail-to-google-apps/
|
||||
http://www.thamtech.com/blog/2008/03/29/gmail-to-google-apps-email-migration/
|
||||
|
40
FAQ.d/FAQ.Kerio.txt
Normal file
40
FAQ.d/FAQ.Kerio.txt
Normal file
@ -0,0 +1,40 @@
|
||||
#!/bin/cat
|
||||
$Id: FAQ.Kerio.txt,v 1.1 2019/06/26 22:14:50 gilles Exp gilles $
|
||||
|
||||
This document is also available online at
|
||||
https://imapsync.lamiral.info/FAQ.d/
|
||||
https://imapsync.lamiral.info/FAQ.d/FAQ.Kerio.txt
|
||||
|
||||
=======================================================================
|
||||
Imapsync tips for Kerio accounts.
|
||||
=======================================================================
|
||||
|
||||
|
||||
|
||||
|
||||
=======================================================================
|
||||
Q. How to migrate from Kerio Connect to XXX
|
||||
|
||||
R. No special options required.
|
||||
See also:
|
||||
http://www.linux-france.org/prj/imapsync_list/msg01756.html
|
||||
http://web.archive.org/web/20140224041102/https://www.safetynet-it.com/it-support/mac-kerio-server-to-microsoft-exchange-2010-migration-1/
|
||||
http://web.archive.org/web/20121125074756/http://www.safetynet-it.com/it-support/mac-kerio-server-to-microsoft-exchange-2010-migration-2/
|
||||
|
||||
=======================================================================
|
||||
Q. How to use Kerio master authentication with imapsync?
|
||||
|
||||
R. Example:
|
||||
|
||||
Kerio at host1
|
||||
|
||||
imapsync ... --user1 USERNAME --password1 MASTERPASSWORD --authmech1 X-MASTERAUTH
|
||||
|
||||
Kerio at host2
|
||||
|
||||
imapsync ... --user2 USERNAME --password2 MASTERPASSWORD --authmech2 X-MASTERAUTH
|
||||
|
||||
See also:
|
||||
https://github.com/imapsync/imapsync/pull/53
|
||||
|
||||
=======================================================================
|
@ -1,5 +1,5 @@
|
||||
#!/bin/cat
|
||||
$Id: FAQ.Massive.txt,v 1.24 2018/12/30 21:28:03 gilles Exp gilles $
|
||||
$Id: FAQ.Massive.txt,v 1.29 2019/06/18 16:38:06 gilles Exp gilles $
|
||||
|
||||
This document is also available online at
|
||||
https://imapsync.lamiral.info/FAQ.d/
|
||||
@ -29,18 +29,46 @@ Q. I run multiple imapsync applications at the same time then get a
|
||||
IMAP account in parallel?
|
||||
|
||||
=======================================================================
|
||||
Q. How long will take the whole migration?
|
||||
Q. How long will take the whole migration?
|
||||
|
||||
R. Consider the mean imapsync transfer rate to be around 340 Kbytes/s,
|
||||
ie, 2.8 Mbps, no matter the local link bandwidth.
|
||||
It's a mean, measured upon various different syncs, coming from
|
||||
the online interface /X.
|
||||
|
||||
With 1 TB to transfer and one sync at a time it will end in 35 days.
|
||||
At 10 transfers at a time, 1 TB will take 3.5 days.
|
||||
Double the time because best scenario never happens.
|
||||
Triple because, well, real world is like that.
|
||||
R1. First you have to consider several periods. There is the global
|
||||
period, from when the migration process is decided to the final end
|
||||
where all mailboxes are migrated. This global period can be divided
|
||||
into three smaller periods.
|
||||
|
||||
The first period is the analyse period: you play with the tools
|
||||
available, you estimate the volume to be transferred, the number of
|
||||
accounts, you measure how long it takes for one account under
|
||||
your context.
|
||||
|
||||
The second period is the presync period. The users are still using
|
||||
the old accounts but nothing prevents you from starting to sync
|
||||
the old accounts, as they are, to the new accounts.
|
||||
With tons of gigabytes to transfer, this period may be the longest one.
|
||||
There is nothing more to launch the presyncs and watch until
|
||||
the round is finished.
|
||||
|
||||
The last period is the final sync period where only the last
|
||||
changes of the mailboxes need to be synced in order to switch
|
||||
the users to their new mailboxes.
|
||||
|
||||
R2. To estimate the presync period, consider the mean imapsync transfer
|
||||
rate to be around 340 Kbytes/s, ie, 2.8 Mbps, no matter the local
|
||||
link bandwidth.
|
||||
It's a mean, measured upon various different syncs, coming from
|
||||
the online interface /X.
|
||||
|
||||
At 340 Kbytes/s,
|
||||
1 TB to transfer and one sync at a time will end in 35 days (1024^3/340/3600/24).
|
||||
At 10 transfers at a time, 1 TB will take 3.5 days.
|
||||
At 100 transfers at a time, 1 TB will take 8 hours.
|
||||
Double the time because the best scenario never happens.
|
||||
Triple the time because, well, real world is like that.
|
||||
|
||||
R3. To estimate the last period, just rerun a complete presync,
|
||||
ie, resync all the mailboxes, the final sync should take
|
||||
the same amount of time.
|
||||
|
||||
=======================================================================
|
||||
Q. I need to migrate hundred accounts, how can I do?
|
||||
|
||||
@ -119,43 +147,43 @@ of sync_loop_windows.bat
|
||||
Q. I have to migrate 500k users using 400 TB of disk space.
|
||||
How do I proceed? How about speed?
|
||||
|
||||
R. Solution to this issue is two words: parallelism and measurements.
|
||||
R. A good solution to this issue is two words: parallelism and measurements.
|
||||
|
||||
Since all mailboxes are functionnaly independent, they can be processed
|
||||
independently, here comes parallelism, lunching several imapsync
|
||||
independently, here comes the parallelism, ie, lunching several imapsync
|
||||
processes in parallel.
|
||||
|
||||
Meanwhile, mailboxes usually belong to the same server and syncs
|
||||
Meanwhile, mailboxes usually belong to the same server and the syncs
|
||||
share the same imapsync host via the same bandwidth, here come
|
||||
some limitations and bottlenecks.
|
||||
|
||||
How many syncs can we run in parallel? here comes measurements.
|
||||
How many syncs can we run in parallel in your context?
|
||||
Here comes some measurements.
|
||||
|
||||
1) Measure the total transfer rate by adding each one printed in each run.
|
||||
Since adding this way is not so easy, just look at the overall
|
||||
network rate of the imapsync host.
|
||||
|
||||
On Linux and FreeBSD, nload is a good candidate to measure this overall
|
||||
network rate, every 6 seconds (-t 6000), on eth0 or em0 interface,
|
||||
values in Kbytes (-u K):
|
||||
network rate. For example, to measure the rate every 6 seconds (-t 6000),
|
||||
on eth0 or em0 interface, with values in Kbytes (-u K), use:
|
||||
|
||||
nload -t 6000 eth0 -u K # Linux
|
||||
nload -t 6000 em0 -u K # FreeBSD
|
||||
|
||||
During nload, press the h to see the display commands available,
|
||||
every single feature is useful! Press h again and try each one.
|
||||
|
||||
On Linux only, another very good network tool is dstat:
|
||||
|
||||
dstat -n -N eth0 6 # Linux only (in 2018)
|
||||
|
||||
A excellent tool for this purpose is iftop, the following
|
||||
command will monitor imap and imaps connexions
|
||||
Another excellent tool to measure the network trafic is iftop.
|
||||
The following command will monitor imap and imaps connexions
|
||||
on interfce eth0, only them, and sum them up:
|
||||
|
||||
iftop -i eth0 -f 'port imap or port imaps' -B # Linux
|
||||
iftop -i em0 -f 'port imap or port imaps' -B # FreeBSD
|
||||
|
||||
During iftop, press the h to see the display commands available,
|
||||
every single feature is useful! Press h again and try each one.
|
||||
|
||||
|
||||
On Windows 8.1 Windows 10 Windows 2012 R2 Windows 2016,
|
||||
@ -232,9 +260,11 @@ Possible bottlenecks:
|
||||
|
||||
|
||||
- RAM memory.
|
||||
On all sides, monitor that your systems don't swap on disk,
|
||||
because swapping memory on disks decreases performance by
|
||||
a factor of 20, at least.
|
||||
On all sides, monitor that your systems don't swap its
|
||||
running processes on disk, because swapping running processes
|
||||
on disks decreases performance by a factor of 20, at least.
|
||||
It's not because the swap memory is used that your
|
||||
system swaps processes on disk.
|
||||
|
||||
- CPU.
|
||||
100% CPU during a whole transfer means the system is busy.
|
||||
@ -245,8 +275,9 @@ Possible bottlenecks:
|
||||
Other possible bottlenecks:
|
||||
- Number of hosts available to run imapsync processes.
|
||||
- Imapsync itself.
|
||||
- Errors management.
|
||||
- Management of errors.
|
||||
- MX domains, DNS.
|
||||
- Incompetence.
|
||||
- Money.
|
||||
- Time.
|
||||
- Bad luck.
|
||||
@ -263,7 +294,7 @@ Q. Any performance issue?
|
||||
You have to try and check the transfer rates, sum them up to
|
||||
have a uniq numeric criteria.
|
||||
There is always a limit, depending on remote imap servers
|
||||
and the one running imapsync;
|
||||
and the one running imapsync.
|
||||
CPU, memory, Inputs/Outputs are the classical bottlenecks,
|
||||
the worst bottleneck is the winner that sets the limit.
|
||||
|
||||
|
51
FAQ.d/FAQ.Messages_Too_Big.txt
Normal file
51
FAQ.d/FAQ.Messages_Too_Big.txt
Normal file
@ -0,0 +1,51 @@
|
||||
#!/bin/cat
|
||||
$Id: FAQ.Messages_Too_Big.txt,v 1.3 2019/06/18 16:37:39 gilles Exp gilles $
|
||||
|
||||
This document is also available online at
|
||||
https://imapsync.lamiral.info/FAQ.d/
|
||||
https://imapsync.lamiral.info/FAQ.d/FAQ.Messages_Too_Big.txt
|
||||
|
||||
=======================================================================
|
||||
Dealing with too big messages with Imapsync.
|
||||
=======================================================================
|
||||
|
||||
Questions answered in this FAQ are:
|
||||
|
||||
Q. What can I do to transfer messages bigger than what allows the
|
||||
imap destination server?
|
||||
|
||||
R1. A solution is to truncate the message to the maximum size allowed
|
||||
before copying it to host2. That's a little dirty but it's ok
|
||||
if you prefer having a truncated message than no message
|
||||
at all. The attachments after the truncation won't be available
|
||||
but everything before should be ok. It may also depends
|
||||
on the software tool reading the email message.
|
||||
|
||||
For example,
|
||||
Gmail currently limits messages to 35651584 bytes (May 2019),
|
||||
|
||||
Starting with imapsync release 1.938 option --truncmess xxxx truncates
|
||||
messages bigger than the given size xxxx.
|
||||
|
||||
imapsync --truncmess 35651584 --appendlimit 1000000000000
|
||||
|
||||
Prior to imapsync release 1.938, instead of --truncmess:
|
||||
|
||||
On Linux, use:
|
||||
|
||||
imapsync ... --pipemess 'perl -0ne "print substr \$_,0,35651584" '
|
||||
|
||||
On windows, use:
|
||||
|
||||
I'm not sure of (not tested yet):
|
||||
|
||||
imapsync ... --pipemess "perl -0ne 'print substr $_,0,35651584' "
|
||||
|
||||
|
||||
R2. A not so dirty solution would be to transform the message and
|
||||
include links to the big attachments, instead of the attachments.
|
||||
Well, not done yet and too much complicted compared to the simple
|
||||
solution which is to allow big messages on the destination account.
|
||||
|
||||
=======================================================================
|
||||
=======================================================================
|
@ -1,5 +1,5 @@
|
||||
#!/bin/cat
|
||||
$Id: FAQ.Migration_Plan.txt,v 1.5 2019/01/11 13:13:55 gilles Exp gilles $
|
||||
$Id: FAQ.Migration_Plan.txt,v 1.6 2019/04/10 12:05:31 gilles Exp gilles $
|
||||
|
||||
This document is also available online at
|
||||
https://imapsync.lamiral.info/FAQ.d/
|
||||
@ -85,7 +85,7 @@ Classical scenario, credentials triplets are different on both sides
|
||||
* In case there are still messages arriving at the old imap server
|
||||
host1, you can perform more postsyncs, ie, syncs every day
|
||||
with the options:
|
||||
--maxage 1 --delete1 --folder INBOX.
|
||||
--maxage 1 --delete1 --folder INBOX
|
||||
|
||||
|
||||
=====================================================================
|
||||
|
@ -1,5 +1,5 @@
|
||||
#!/bin/cat
|
||||
$Id: FAQ.Passwords_on_Unix.txt,v 1.3 2019/01/10 13:27:28 gilles Exp gilles $
|
||||
$Id: FAQ.Passwords_on_Unix.txt,v 1.6 2019/04/02 17:19:21 gilles Exp gilles $
|
||||
|
||||
This document is also available online at
|
||||
https://imapsync.lamiral.info/FAQ.d/
|
||||
@ -12,19 +12,29 @@ https://imapsync.lamiral.info/FAQ.d/FAQ.Passwords_on_Unix.txt
|
||||
|
||||
|
||||
=======================================================================
|
||||
Q. On Unix, some passwords contain some *(),;& characters. Login fails.
|
||||
Q. On Unix, some passwords contain some weird *(),;&~ characters.
|
||||
Login fails.
|
||||
|
||||
R1. Enclose the password within single-quotes in the imapsync
|
||||
command line:
|
||||
|
||||
imapsync ... --password1 'passw*(),;&rd'
|
||||
imapsync ... --password1 'passw*(),;&rd~'
|
||||
|
||||
R2. If R1 fails, with very old imapsync or old Mail::IMAPClient Perl module,
|
||||
try also using double-quotes within single-quotes. It will enclose
|
||||
the password within double-quotes in the imap LOGIN command:
|
||||
|
||||
imapsync ... --password1 '"passw*(),;&rd"'
|
||||
imapsync ... --password1 '"passw*(),;&rd~"'
|
||||
|
||||
Old Mail::IMAPClient 3.37 is a bad horse having this issue solved
|
||||
by this double-quotes trick.
|
||||
fixed in 3.38 https://metacpan.org/changes/distribution/Mail-IMAPClient
|
||||
version 3.38: Tue Feb 9 02:48:21 UTC 2016
|
||||
- rt.cpan.org#110273: failure to quote password values
|
||||
(regression introduced in 3.36 via fix for rt.cpan.org#100601)
|
||||
|
||||
R3. Change the password to keep only f...ing normal characters.
|
||||
Make it long and random if strong security is your concern
|
||||
|
||||
=======================================================================
|
||||
=======================================================================
|
||||
|
@ -1,5 +1,5 @@
|
||||
#!/bin/cat
|
||||
$Id: FAQ.Release_Checklist.txt,v 1.10 2019/02/14 15:52:44 gilles Exp gilles $
|
||||
$Id: FAQ.Release_Checklist.txt,v 1.11 2019/05/27 14:26:57 gilles Exp gilles $
|
||||
|
||||
This documentation is also available online at
|
||||
https://imapsync.lamiral.info/FAQ.d/
|
||||
@ -24,6 +24,10 @@ Checklist before release a new release:
|
||||
|
||||
- Review the general FAQ.d/FAQ.General.txt
|
||||
|
||||
- /X verify direct cgi
|
||||
- /X verify under noscript with firefox
|
||||
- /X verify under private with chrome
|
||||
|
||||
- make dist
|
||||
- make publish
|
||||
- verify VERSION is uploaded
|
||||
|
@ -1,5 +1,5 @@
|
||||
#!/bin/cat
|
||||
$Id: FAQ.SSL_errors.txt,v 1.6 2018/05/24 11:34:30 gilles Exp gilles $
|
||||
$Id: FAQ.SSL_errors.txt,v 1.7 2019/04/05 20:04:38 gilles Exp gilles $
|
||||
|
||||
This document is also available online at
|
||||
https://imapsync.lamiral.info/FAQ.d/
|
||||
@ -67,14 +67,60 @@ R5. Set up a ssltunnel proxy to the host.
|
||||
Q. SSL connect attempt failed SSL
|
||||
routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure
|
||||
|
||||
R. Use:
|
||||
R1. Use:
|
||||
|
||||
imapsync ... --sslargs1 'SSL_cipher_list=DEFAULT'
|
||||
or
|
||||
imapsync ... --sslargs2 'SSL_cipher_list=DEFAULT'
|
||||
|
||||
depending on where the error occurs, host1 or host2 or both.
|
||||
|
||||
|
||||
R2. If it doesn't work, I let you try other things,
|
||||
I quote the § "SSL_version" section of
|
||||
https://metacpan.org/pod/IO::Socket::SSL (Module version: 2.066)
|
||||
|
||||
imapsync ... --sslargs1 SSL_version=SSLv2
|
||||
imapsync ... --sslargs1 SSL_version=TLSv1_2
|
||||
|
||||
SSLv2 and TLSv12 are just examples depending on your context
|
||||
(--ssl1 or --tls1, and also the imap server encryption scheme)
|
||||
|
||||
Feedback on what worked for you (and possibly hy) is welcome!
|
||||
|
||||
https://metacpan.org/pod/IO::Socket::SSL
|
||||
...
|
||||
SSL_version
|
||||
|
||||
Sets the version of the SSL protocol used to transmit data.
|
||||
'SSLv23' uses a handshake compatible with SSL2.0, SSL3.0 and TLS1.x,
|
||||
while 'SSLv2', 'SSLv3', 'TLSv1', 'TLSv1_1', 'TLSv1_2', or 'TLSv1_3'
|
||||
restrict handshake and protocol to the specified version.
|
||||
All values are case-insensitive. Instead of 'TLSv1_1', 'TLSv1_2', and 'TLSv1_3'
|
||||
one can also use 'TLSv11', 'TLSv12', and 'TLSv13'.
|
||||
|
||||
Support for 'TLSv1_1', 'TLSv1_2', and 'TLSv1_3'
|
||||
requires recent versions of Net::SSLeay and openssl.
|
||||
|
||||
Independent from the handshake format you can limit to set of
|
||||
accepted SSL versions by adding !version separated by ':'.
|
||||
The default SSL_version is 'SSLv23:!SSLv3:!SSLv2' which means,
|
||||
that the handshake format is compatible to SSL2.0 and higher,
|
||||
but that the successful handshake is limited to TLS1.0 and higher,
|
||||
that is no SSL2.0 or SSL3.0 because both of these versions have
|
||||
serious security issues and should not be used anymore.
|
||||
|
||||
You can also use !TLSv1_1 and !TLSv1_2 to
|
||||
disable TLS versions 1.1 and 1.2 while still allowing TLS version 1.0.
|
||||
|
||||
Setting the version instead to 'TLSv1' might break interaction
|
||||
with older clients, which need and SSL2.0 compatible handshake.
|
||||
|
||||
On the other side some clients just close the connection
|
||||
when they receive a TLS version 1.1 request.
|
||||
In this case setting the version
|
||||
to 'SSLv23:!SSLv2:!SSLv3:!TLSv1_1:!TLSv1_2' might help.
|
||||
|
||||
|
||||
=======================================================================
|
||||
=======================================================================
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
#!/bin/cat
|
||||
$Id: FAQ.SmarterMail.txt,v 1.12 2018/05/24 11:34:30 gilles Exp gilles $
|
||||
$Id: FAQ.SmarterMail.txt,v 1.13 2019/06/20 10:11:21 gilles Exp gilles $
|
||||
|
||||
This document is also available online at
|
||||
https://imapsync.lamiral.info/FAQ.d/
|
||||
@ -17,21 +17,13 @@ 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 --noabletosearch1 \
|
||||
--regextrans2 "s,Deleted Items,Trash," \
|
||||
--regextrans2 "s,Junk E-Mail,Junk," \
|
||||
--regextrans2 "s,Sent Items,Sent,"
|
||||
--sep1 "/" --prefix1 "" --useheader Message-Id --noabletosearch1
|
||||
|
||||
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 --noabletosearch1 ^
|
||||
--regextrans2 "s,Deleted Items,Trash," ^
|
||||
--regextrans2 "s,Junk E-Mail,Junk," ^
|
||||
--regextrans2 "s,Sent Items,Sent,"
|
||||
--sep1 "/" --prefix1 "" --useheader Message-Id --noabletosearch1
|
||||
|
||||
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
|
||||
|
@ -1,5 +1,5 @@
|
||||
#!/bin/cat
|
||||
$Id: FAQ.Various_Software_Servers.txt,v 1.10 2018/10/24 11:03:57 gilles Exp gilles $
|
||||
$Id: FAQ.Various_Software_Servers.txt,v 1.12 2019/06/26 22:17:03 gilles Exp gilles $
|
||||
|
||||
This document is also available online at
|
||||
https://imapsync.lamiral.info/FAQ.d/
|
||||
@ -13,12 +13,10 @@ https://imapsync.lamiral.info/FAQ.d/FAQ.Various_Server_Softwares.txt
|
||||
|
||||
|
||||
=======================================================================
|
||||
Q. From Zimbra to XXX
|
||||
Q. From or to Zimbra
|
||||
|
||||
imapsync ... \
|
||||
--exclude "Conversation Action Settings" \
|
||||
--exclude "Quick Step Settings" \
|
||||
--exclude "News Feed"
|
||||
R. Read the FAQ.Zimbra.txt
|
||||
https://imapsync.lamiral.info/FAQ.d/FAQ.Zimbra.txt
|
||||
|
||||
=======================================================================
|
||||
Q. From or to HMailServer version 4.4.1.
|
||||
@ -36,16 +34,6 @@ 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. from Microsoft's Exchange 2007 to Google Apps for your Domain
|
||||
(GAFYD)
|
||||
@ -142,37 +130,15 @@ I encounter many errors like this:
|
||||
|
||||
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)")
|
||||
Q. Migrating from or to David Tobit
|
||||
|
||||
First try above V10 solution since improvments have been made
|
||||
to support Tobit.
|
||||
|
||||
R. Use the following options :
|
||||
imapsync ... --prefix1 INBOX. --sep1 / --subscribe --subscribed
|
||||
R. See FAQ.David_Tobit.txt
|
||||
https://imapsync.lamiral.info/FAQ.d/FAQ.David_Tobit.txt
|
||||
|
||||
=======================================================================
|
||||
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?
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
#!/bin/cat
|
||||
$Id: FAQ.Zimbra.txt,v 1.4 2019/01/28 22:39:28 gilles Exp gilles $
|
||||
$Id: FAQ.Zimbra.txt,v 1.6 2019/06/25 00:15:16 gilles Exp gilles $
|
||||
|
||||
This documentation is also available online at
|
||||
https://imapsync.lamiral.info/FAQ.d/
|
||||
@ -16,6 +16,27 @@ It's obsolete and it will give you, and me, more difficulties than
|
||||
doing a standard sync without additional options.
|
||||
|
||||
|
||||
=======================================================================
|
||||
Q. From Zimbra to XXX
|
||||
|
||||
imapsync ... \
|
||||
--exclude "Conversation Action Settings" \
|
||||
--exclude "Quick Step Settings" \
|
||||
--exclude "News Feed"
|
||||
|
||||
=======================================================================
|
||||
Q. Zimbra disconnects without reason
|
||||
Could not select: * BYE ... Zimbra IMAP4rev1 server closing connection
|
||||
|
||||
R. The cause of this problem may be that some users have a subscription
|
||||
of a shared folder from a mailbox locked and so the shared folder.
|
||||
The access problems may happen in a lot of folders,
|
||||
not only the shared/locked one.
|
||||
|
||||
It should work after removing the locked/shared folder.
|
||||
|
||||
Thanks to Danny Herrlitz for this input!
|
||||
|
||||
=======================================================================
|
||||
Q. How to migrate from Zimbra with an admin account?
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
|
||||
# $Id: htaccess.txt,v 1.23 2019/02/16 22:42:25 gilles Exp gilles $
|
||||
# $Id: htaccess.txt,v 1.25 2019/05/17 10:16:00 gilles Exp gilles $
|
||||
|
||||
|
||||
AddDescription "<b>Back</b> to Imapsync main page." ..
|
||||
@ -11,6 +11,7 @@ AddDescription "<b>Big mailboxes</b> tips." FAQ.Big_Mailb
|
||||
AddDescription "<b>Connection issues</b>." FAQ.Connection.txt
|
||||
AddDescription "<b>Contacts & Calendars & Chat issues</b>." FAQ.Contacts_Calendars.txt
|
||||
AddDescription "<b>Dates issues</b>." FAQ.Dates.txt
|
||||
AddDescription "<b>David Tobit</b>." FAQ.David_Tobit.txt
|
||||
AddDescription "<b>Domino</b>." FAQ.Domino.txt
|
||||
AddDescription "<b>Dovecot</b>." FAQ.Dovecot.txt
|
||||
AddDescription "<b>Duplicated</b> messages issues." FAQ.Duplicates.txt
|
||||
@ -33,6 +34,7 @@ AddDescription "<b>Password & special characters on Windows</b>." FAQ.Passwords
|
||||
AddDescription "<b>Password & special characters on Unix</b>." FAQ.Passwords_on_Unix.txt
|
||||
AddDescription "<b>POP3 issues</b>." FAQ.POP3.txt
|
||||
AddDescription "<b>Selecting messages</b>." FAQ.Messages_Selection.txt
|
||||
AddDescription "<b>How to transfer too big messages</b>." FAQ.Messages_Too_Big.txt
|
||||
AddDescription "<b>Oracle-UCS</b>." FAQ.Oracle-UCS.txt
|
||||
AddDescription "<b>Checklist before release a new release</b>." FAQ.Release_Checklist.txt
|
||||
AddDescription "<b>Guidelines to report bugs</b>." FAQ.Reporting_Bugs.txt
|
||||
|
@ -1,6 +1,6 @@
|
||||
## Dockerfile for building a docker imapsync image
|
||||
|
||||
# $Id: Dockerfile,v 1.14 2018/09/16 10:42:11 gilles Exp gilles $
|
||||
# $Id: Dockerfile,v 1.15 2019/02/26 11:39:31 gilles Exp gilles $
|
||||
# I use the following command to build the image:
|
||||
#
|
||||
# docker build -t gilleslamiral/imapsync .
|
||||
@ -20,7 +20,8 @@ LABEL maintainer "gilles@lamiral.info"
|
||||
# Put a copy of the Dockerfile in the image itself
|
||||
# It can help future maintenance, isn't it?
|
||||
|
||||
COPY Dockerfile /
|
||||
# Also put my last imapsync on / for testing purpose
|
||||
COPY Dockerfile imapsync /
|
||||
|
||||
RUN apt-get update \
|
||||
&& apt-get install -y \
|
||||
|
@ -1,5 +1,5 @@
|
||||
#!/bin/cat
|
||||
# $Id: INSTALL.Centos.txt,v 1.10 2019/02/05 18:20:42 gilles Exp gilles $
|
||||
# $Id: INSTALL.Centos.txt,v 1.12 2019/05/02 12:41:07 gilles Exp gilles $
|
||||
|
||||
This documentation is also located online at
|
||||
https://imapsync.lamiral.info/INSTALL.d/
|
||||
@ -65,18 +65,28 @@ Then:
|
||||
perl-Test-Fatal \
|
||||
perl-Test-Mock-Guard \
|
||||
perl-Test-Requires \
|
||||
perl-Test-Deep
|
||||
|
||||
wget https://imapsync.lamiral.info/imapsync
|
||||
perl-Test-Deep \
|
||||
perl-File-Tail
|
||||
|
||||
wget -N https://imapsync.lamiral.info/imapsync
|
||||
chmod +x imapsync
|
||||
./imapsync --testslive
|
||||
|
||||
Now you have the latest imapsync on Centos 7.
|
||||
Now you should shave the latest imapsync locally working on Centos 7.
|
||||
|
||||
If you want to install it and replace the olf one:
|
||||
|
||||
mv /usr/bin/imapsync /usr/bin/imapsync_old
|
||||
cp ./imapsync /usr/bin/imapsync
|
||||
|
||||
imapsync --version
|
||||
|
||||
should give the latest release number instead of 1.727
|
||||
(1.937 at the time of this writing)
|
||||
|
||||
If you want to install an online imapsync service
|
||||
like /X then you also need a recent CGI.pm,
|
||||
add with cpanm:
|
||||
like /X then you also need a recent decent CGI.pm,
|
||||
add it with cpanm:
|
||||
|
||||
cpanm CGI
|
||||
|
||||
@ -134,7 +144,8 @@ Then:
|
||||
perl-Test-Fatal \
|
||||
perl-Test-Mock-Guard \
|
||||
perl-Test-Requires \
|
||||
perl-Test-Deep
|
||||
perl-Test-Deep \
|
||||
perl-File-Tail
|
||||
|
||||
wget https://imapsync.lamiral.info/imapsync
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
#!/bin/cat
|
||||
# $Id: INSTALL.OnlineUI.txt,v 1.29 2019/02/18 09:24:18 gilles Exp gilles $
|
||||
# $Id: INSTALL.OnlineUI.txt,v 1.30 2019/03/06 17:36:50 gilles Exp gilles $
|
||||
|
||||
This documentation is also located online at
|
||||
https://imapsync.lamiral.info/INSTALL.d/
|
||||
@ -73,6 +73,13 @@ Print the CGI.pm release with:
|
||||
|
||||
perl -MCGI -e 'print "$CGI::VERSION\n"'
|
||||
|
||||
If it is under release 4.08 (2014-10-18) then upgrade it with
|
||||
|
||||
cpanm CGI
|
||||
|
||||
It is a good thing to remove the old one if it was installed
|
||||
by a distribution package, I let you this part as an exercise.
|
||||
|
||||
To check and fix the Perl modules dependencies, run:
|
||||
|
||||
cd
|
||||
|
@ -1,8 +1,9 @@
|
||||
#!/bin/sh
|
||||
|
||||
# $Id: prerequisites_imapsync,v 1.29 2018/09/28 14:16:44 gilles Exp gilles $
|
||||
# $Id: prerequisites_imapsync,v 1.32 2019/05/27 18:52:23 gilles Exp gilles $
|
||||
|
||||
MODULES_MANDATORY='
|
||||
File::Tail
|
||||
App::cpanminus
|
||||
Authen::NTLM
|
||||
CGI
|
||||
@ -144,7 +145,12 @@ search_modules_any() {
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
# FreeBSD
|
||||
pkg version > /dev/null 2>&1 && {
|
||||
search_modules_freebsd "$@"
|
||||
return
|
||||
}
|
||||
|
||||
# no yum, no apt-get, no pacman
|
||||
{
|
||||
search_modules_cpanm "$@"
|
||||
@ -202,16 +208,32 @@ search_modules_apt() {
|
||||
echo
|
||||
echo Searching deb packages names
|
||||
for M in "$@" ; do
|
||||
echo "==== Searching deb package name for $M"
|
||||
F=`echo $M|tr -s ":" "/"`.pm
|
||||
echo "==== Searching deb package name for $M with: apt-file search /$F"
|
||||
#echo apt-file search /$F
|
||||
echo
|
||||
apt-file search /$F
|
||||
echo
|
||||
echo "==== Searching deb package name for $M with: apt-cache search $M"
|
||||
#apt-cache search "$M"
|
||||
apt-cache search "$M"
|
||||
echo
|
||||
done
|
||||
}
|
||||
|
||||
search_modules_freebsd()
|
||||
{
|
||||
echo
|
||||
echo Searching pkg FreeBSD names
|
||||
for M in "$@" ; do
|
||||
F=`echo $M|tr -s ":" "-"`
|
||||
echo "==== Searching deb package name for $M with: pkg search p5-$F"
|
||||
echo
|
||||
pkg search "p5-$F"
|
||||
echo
|
||||
done
|
||||
|
||||
}
|
||||
|
||||
list_to_install() {
|
||||
test -n "$LIST_TO_INSTALL" || return 0
|
||||
|
66
Makefile
66
Makefile
@ -1,5 +1,5 @@
|
||||
|
||||
# $Id: Makefile,v 1.290 2019/02/18 12:02:32 gilles Exp gilles $
|
||||
# $Id: Makefile,v 1.301 2019/05/28 14:25:35 gilles Exp gilles $
|
||||
|
||||
.PHONY: help usage all doc
|
||||
|
||||
@ -26,8 +26,9 @@ usage:
|
||||
@echo "make W/test_exe_2.bat # run W/test_exe_2.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 W/install_modules.bat # run W/install_modules.bat on win32"
|
||||
@echo "make W/install_module_one.bat # run W/install_module_one.bat on win32"
|
||||
@echo "make W/install_module_ssl.bat # run W/install_module_ssl.bat on win32"
|
||||
@echo "make all "
|
||||
@echo "make upload_tests # upload tests.sh"
|
||||
@echo "make upload_index"
|
||||
@ -62,7 +63,7 @@ VERSION := $(shell perl ./imapsync --version 2>/dev/null || cat VERSION)
|
||||
VERSION_PREVIOUS := $(shell perl ./$(DIST_PATH)/imapsync --version 2>/dev/null || echo ERROR)
|
||||
VERSION_EXE := $(shell cat ./VERSION_EXE)
|
||||
|
||||
IMAPClient_3xx := ./W/Mail-IMAPClient-3.40/lib
|
||||
IMAPClient_3xx := ./W/Mail-IMAPClient-3.42/lib
|
||||
IMAPClient := $(IMAPClient_3xx)
|
||||
|
||||
|
||||
@ -186,7 +187,16 @@ install: testp W/imapsync.1
|
||||
dev: test crit cover nytprof bin
|
||||
|
||||
docker:
|
||||
ssh ks3 'cd docker/imapsync && . memo'
|
||||
ssh ks3 'cd docker/imapsync && . memo_docker'
|
||||
@echo "make docker_copy_to_ks3 # copy imapsync Dockerfile memo_docker to ks3"
|
||||
@echo "make docker_upload_docker_hub # upload last build to https://hub.docker.com/r/gilleslamiral/imapsync"
|
||||
|
||||
|
||||
docker_copy_to_ks3:
|
||||
rsync -av imapsync INSTALL.d/Dockerfile INSTALL.d/memo_docker ks3:docker/imapsync/
|
||||
|
||||
docker_upload_docker_hub:
|
||||
ssh ks3 'cd docker/imapsync && . memo_docker && imapsync_docker_upload'
|
||||
|
||||
nytprof:
|
||||
sh tests.sh ll_nytprof
|
||||
@ -378,8 +388,6 @@ W/learn_func.bat:
|
||||
ssh Admin@c 'C:/msys/1.0/home/Admin/imapsync/learn_func.bat'
|
||||
./W/check_winerr learn_func.bat
|
||||
|
||||
win32_prereq: W/install_modules.bat
|
||||
|
||||
W/install_modules.bat:
|
||||
unix2dos W/install_modules.bat
|
||||
scp W/install_modules.bat Admin@c:'C:/msys/1.0/home/Admin/imapsync/'
|
||||
@ -387,7 +395,7 @@ W/install_modules.bat:
|
||||
./W/check_winerr install_modules.bat
|
||||
|
||||
|
||||
win32_update_ssl:
|
||||
W/install_module_ssl.bat:
|
||||
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'
|
||||
|
||||
@ -413,6 +421,7 @@ imapsync.exe: imapsync
|
||||
./W/check_winerr test_exe.bat
|
||||
rm -f imapsync.exe
|
||||
scp Admin@c:'C:/msys/1.0/home/Admin/imapsync/imapsync.exe' .
|
||||
chmod a+r+x imapsync.exe
|
||||
(date "+%s"| tr "\n" " "; echo -n "END " $(VERSION) ": "; date) >> W/.BUILD_EXE_TIME
|
||||
|
||||
exe: imapsync
|
||||
@ -423,20 +432,40 @@ exe: imapsync
|
||||
ssh Admin@c 'C:/msys/1.0/home/Admin/imapsync/imapsync.exe --justbanner'
|
||||
rm -f imapsync.exe
|
||||
scp Admin@c:'C:/msys/1.0/home/Admin/imapsync/imapsync.exe' .
|
||||
chmod a+r+x imapsync.exe
|
||||
(date "+%s"| tr "\n" " "; echo -n "END " $(VERSION) ": "; date) >> W/.BUILD_EXE_TIME
|
||||
|
||||
zzz:
|
||||
unix2dos W/build_exe.bat W/install_module_one.bat
|
||||
scp imapsync W/build_exe.bat W/install_module_one.bat pc_HP_DV7_p24:'Desktop/imapsync_build'
|
||||
# ssh 'pc HP DV7'@p24 'Desktop/imapsync_build/build_exe.bat'
|
||||
# ./W/check_win64err build_exe.bat
|
||||
scp imapsync W/build_exe.bat W/install_module_one.bat W/test_exe_testsdebug.bat pc_HP_DV7_p24:'Desktop/imapsync_build'
|
||||
ssh 'pc HP DV7'@p24 'Desktop/imapsync_build/build_exe.bat'
|
||||
./W/check_win64err build_exe.bat
|
||||
|
||||
zzz2:
|
||||
unix2dos W/test_exe_testsdebug.bat W/test_exe_tests.bat
|
||||
scp W/test_exe_testsdebug.bat W/test_exe_tests.bat pc_HP_DV7_p24:'Desktop/imapsync_build'
|
||||
ssh 'pc HP DV7'@p24 'Desktop/imapsync_build/test_exe_testsdebug.bat'
|
||||
./W/check_win64err test_exe_testsdebug.bat
|
||||
ssh 'pc HP DV7'@p24 'Desktop/imapsync_build/test_exe_tests.bat'
|
||||
./W/check_win64err test_exe_tests.bat
|
||||
|
||||
W/test4.bat:
|
||||
unix2dos W/test4.bat
|
||||
scp W/test4.bat pc_HP_DV7_p24:'Desktop/imapsync_build'
|
||||
ssh 'pc HP DV7'@p24 'Desktop/imapsync_build/test4.bat'
|
||||
|
||||
W/test5.bat:
|
||||
unix2dos W/test5.bat
|
||||
scp W/test5.bat pc_HP_DV7_p24:'Desktop/imapsync_build'
|
||||
ssh 'pc HP DV7'@p24 'Desktop/imapsync_build/test5.bat'
|
||||
|
||||
|
||||
imapsync_64bit.exe: imapsync
|
||||
(date "+%s"| tr "\n" " "; echo -n "BEGIN 64bit " $(VERSION) ": "; date) >> W/.BUILD_EXE_TIME
|
||||
ssh 'pc HP DV7'@p24 'perl -V'
|
||||
unix2dos W/build_exe.bat W/test_exe.bat W/install_modules.bat W/install_module_one.bat
|
||||
scp imapsync W/build_exe.bat W/install_modules.bat W/install_module_one.bat \
|
||||
W/test_exe_tests.bat W/test_exe.bat \
|
||||
W/test_exe_tests.bat W/test_exe_testsdebug.bat W/test_exe.bat \
|
||||
pc_HP_DV7_p24:'Desktop/imapsync_build'
|
||||
ssh 'pc HP DV7'@p24 'Desktop/imapsync_build/build_exe.bat'
|
||||
./W/check_win64err build_exe.bat
|
||||
@ -444,6 +473,7 @@ imapsync_64bit.exe: imapsync
|
||||
./W/check_win64err test_exe.bat
|
||||
rm -f imapsync_64bit.exe
|
||||
scp pc_HP_DV7_p24:'Desktop/imapsync_build/imapsync.exe' imapsync_64bit.exe
|
||||
chmod a+r+x imapsync_64bit.exe
|
||||
(date "+%s"| tr "\n" " "; echo -n "END 64bit " $(VERSION) ": "; date) >> W/.BUILD_EXE_TIME
|
||||
|
||||
|
||||
@ -486,6 +516,10 @@ mactestslive:
|
||||
rsync -p -e 'ssh -4 -p 995' imapsync gilleslamira@gate.polarhome.com:
|
||||
ssh -4 -p 995 gilleslamira@gate.polarhome.com '. .bash_profile; perl imapsync --testslive'
|
||||
|
||||
mactestslive6:
|
||||
rsync -p -e 'ssh -4 -p 995' imapsync gilleslamira@gate.polarhome.com:
|
||||
ssh -4 -p 995 gilleslamira@gate.polarhome.com '. .bash_profile; perl imapsync --testslive6'
|
||||
|
||||
|
||||
bin: lin mac win win64
|
||||
|
||||
@ -510,7 +544,6 @@ $(BIN_NAME): imapsync
|
||||
./$(BIN_NAME) --justbanner
|
||||
|
||||
|
||||
|
||||
lfo: upload_lfo
|
||||
|
||||
.PHONY: tarball cidone ci
|
||||
@ -529,6 +562,7 @@ ci: cidone
|
||||
|
||||
cidone:
|
||||
rcsdiff RCS/*
|
||||
rcsdiff X/cgi_memo X/stat_patterns.txt X/imapsync_form.html X/imapsync_form.js X/imapsync_form.css X/noscript.css
|
||||
rcsdiff W/*.bat W/*.sh W/*.txt W/*.txt W/*.htaccess
|
||||
cd W && rcsdiff RCS/*
|
||||
rcsdiff doc/*.t2t
|
||||
@ -537,7 +571,7 @@ cidone:
|
||||
rcsdiff examples/*.sh examples/*.bat examples/*.txt
|
||||
cd examples && rcsdiff RCS/*
|
||||
rcsdiff W/tools/backup_old_dist W/tools/gen_README_dist W/tools/validate_html4 W/tools/validate_xml_html5 W/tools/fix_email_for_exchange.py
|
||||
rcsdiff S/*.txt S/*.shtml S/*.html
|
||||
rcsdiff S/*.txt S/*.shtml S/*.html
|
||||
|
||||
|
||||
dist: cidone test clean all perlcritic dist_prepa dist_zip README_dist
|
||||
@ -616,7 +650,7 @@ ks2tests_root:
|
||||
ssh root@ks.lamiral.info './imapsync --tests'
|
||||
|
||||
i005tests_root:
|
||||
rsync -P imapsync root@i005.lamiral.info:
|
||||
rsync -P imapsync INSTALL.d/prerequisites_imapsync root@i005.lamiral.info:
|
||||
ssh root@i005.lamiral.info './imapsync --tests'
|
||||
|
||||
ks2testslive:
|
||||
@ -703,7 +737,7 @@ ci_imapsync:
|
||||
rcsdiff imapsync
|
||||
|
||||
upload_latest: unitests ci_imapsync bin
|
||||
rsync -a imapsync imapsync_bin_Linux_i686 imapsync_bin_Darwin imapsync.exe ./INSTALL.d/prerequisites_imapsync ../imapsync_website/
|
||||
rsync -a imapsync imapsync_bin_Linux_i686 imapsync_bin_Darwin imapsync.exe imapsync_64bit.exe ./INSTALL.d/prerequisites_imapsync ../imapsync_website/
|
||||
rsync -aHvz --delete ../imapsync_website/ root@ks.lamiral.info:/var/www/imapsync/
|
||||
ssh root@ks.lamiral.info 'apachectl configtest && /etc/init.d/apache2 reload'
|
||||
|
||||
|
336
README
336
README
@ -5,7 +5,7 @@ NAME
|
||||
|
||||
VERSION
|
||||
|
||||
This documentation refers to Imapsync $Revision: 1.921 $
|
||||
This documentation refers to Imapsync $Revision: 1.945 $
|
||||
|
||||
USAGE
|
||||
|
||||
@ -25,44 +25,59 @@ DESCRIPTION
|
||||
another.
|
||||
|
||||
Imapsync command is a tool allowing incremental and recursive imap
|
||||
transfers from one mailbox to another.
|
||||
transfers from one mailbox to another. If you don't understand the
|
||||
previous sentence, it's normal, it's pedantic computer oriented jargon.
|
||||
|
||||
By default all folders are transferred, recursively, meaning the whole
|
||||
folder hierarchy is taken, all messages in them, and all messages flags
|
||||
(\Seen \Answered \Flagged etc.) are synced too.
|
||||
All folders are transferred, recursively, meaning the whole folder
|
||||
hierarchy is taken, all messages in them, and all messages flags (\Seen
|
||||
\Answered \Flagged etc.) are synced too.
|
||||
|
||||
Imapsync reduces the amount of data transferred by not transferring a
|
||||
given message if it resides already on both sides.
|
||||
given message if it already resides on the destination side. Messages
|
||||
that are on the destination side but not on the source side stay as they
|
||||
are (see the --delete2 option to have a strict sync).
|
||||
|
||||
Same specific headers and the transfer is done only once. By default,
|
||||
the identification headers are "Message-Id:" and "Received:" lines but
|
||||
this choice can be changed with the --useheader option.
|
||||
How imapsync knows a message is already on both sides? Same specific
|
||||
headers and the transfer is done only once. By default, the
|
||||
identification headers are "Message-Id:" and "Received:" lines but this
|
||||
choice can be changed with the --useheader option.
|
||||
|
||||
All flags are preserved, unread messages will stay unread, read ones
|
||||
will stay read, deleted will stay deleted.
|
||||
|
||||
You can stop the transfer at any time and restart it later, imapsync
|
||||
works well with bad connections and interruptions, by design.
|
||||
You can abort the transfer at any time and restart it later, imapsync
|
||||
works well with bad connections and interruptions, by design. On a
|
||||
terminal hit Ctr-c twice within two seconds in order to abort the
|
||||
program. Hit Ctr-c just once makes imapsync reconnect to both imap
|
||||
servers.
|
||||
|
||||
You can decide to delete the messages from the source mailbox after a
|
||||
successful transfer, it can be a good feature when migrating live
|
||||
mailboxes since messages will be only on one side.
|
||||
|
||||
In that case, use the --delete1 option. Option --delete1 implies also
|
||||
option --expunge1 so all messages marked deleted on host1 will be really
|
||||
deleted.
|
||||
|
||||
You can also decide to remove empty folders once all of their messages
|
||||
have been transferred. Add --delete1emptyfolders to obtain this
|
||||
behavior.
|
||||
|
||||
A different scenario is synchronizing a mailbox B from another mailbox A
|
||||
in case you just want to keep a "live" copy of A in B.
|
||||
A classical scenario is synchronizing a mailbox B from another mailbox A
|
||||
in case you just want to keep a strict copy of A in B. Strict meaning
|
||||
all messages in A will be in B but no more.
|
||||
|
||||
For this, option --delete2 has to be used, it deletes messages in host2
|
||||
folder B that are not in host1 folder A. If you also need to destroy
|
||||
host2 folders that are not in host1 then use --delete2folders. See also
|
||||
--delete2foldersonly and --delete2foldersbutnot.
|
||||
--delete2foldersonly and --delete2foldersbutnot to set up exceptions on
|
||||
folders to destroy (INBOX will never be destroy, it's a mandatory folder
|
||||
in IMAP).
|
||||
|
||||
A different scenario is to delete the messages from the source mailbox
|
||||
after a successful transfer, it can be a good feature when migrating
|
||||
mailboxes since messages will be only on one side. The source account
|
||||
will only have messages that are not on the destination yet, ie,
|
||||
messages that arrived after a sync or that failed to be copied.
|
||||
|
||||
In that case, use the --delete1 option. Option --delete1 implies also
|
||||
option --expunge1 so all messages marked deleted on host1 will be really
|
||||
deleted. In IMAP protocol deleting a message does not really delete it,
|
||||
it marks it with the flag \Deleted, allowing an undelete. Expunging a
|
||||
folder removes, definitively, all the messages marked as \Deleted in
|
||||
this folder.
|
||||
|
||||
You can also decide to remove empty folders once all of their messages
|
||||
have been transferred. Add --delete1emptyfolders to obtain this
|
||||
behavior.
|
||||
|
||||
Imapsync is not adequate for maintaining two active imap accounts in
|
||||
synchronization when the user plays independently on both sides. Use
|
||||
@ -73,9 +88,9 @@ OPTIONS
|
||||
|
||||
usage: imapsync [options]
|
||||
|
||||
Mandatory options are the six values, three on each sides, needed to log
|
||||
in into the IMAP servers, ie, a host, a username, and a password, two
|
||||
times.
|
||||
Standard options are the six values forming the credentials, three on
|
||||
each sides, needed to log in into the IMAP servers, ie, a host, a
|
||||
username, and a password, two times.
|
||||
|
||||
Conventions used:
|
||||
|
||||
@ -89,26 +104,28 @@ OPTIONS
|
||||
|
||||
OPTIONS/credentials
|
||||
|
||||
--host1 str : Source or "from" imap server. Mandatory.
|
||||
--host1 str : Source or "from" imap server.
|
||||
--port1 int : Port to connect on host1.
|
||||
Optional since default port is 143 or 993 if --ssl1
|
||||
--user1 str : User to login on host1. Mandatory.
|
||||
Optional since default ports are the
|
||||
well known ports 143 or 993.
|
||||
--user1 str : User to login on host1.
|
||||
--password1 str : Password for the user1.
|
||||
|
||||
--host2 str : "destination" imap server. Mandatory.
|
||||
--port2 int : Port to connect on host2.
|
||||
Optional since default port is 143 or 993 if --ssl2
|
||||
--user2 str : User to login on host2. Mandatory.
|
||||
--host2 str : "destination" imap server.
|
||||
--port2 int : Port to connect on host2. Optional
|
||||
--user2 str : User to login on host2.
|
||||
--password2 str : Password for the user2.
|
||||
|
||||
--showpasswords : Shows passwords on output instead of "MASKED".
|
||||
Useful to restart a complete run by just reading the log,
|
||||
or to debug passwords. It's not a secure practice.
|
||||
Useful to restart a complete run by just reading
|
||||
the command line used in the log,
|
||||
or to debug passwords.
|
||||
It's not a secure practice.
|
||||
|
||||
--passfile1 str : Password file for the user1. It must contain the
|
||||
password on the first line. This option avoids to show
|
||||
password on the first line. This option avoids showing
|
||||
the password on the command line like --password1 does.
|
||||
--passfile2 str : Password file for the user2. Contains the password.
|
||||
--passfile2 str : Password file for the user2.
|
||||
|
||||
You can also pass the passwords in the environment variables
|
||||
IMAPSYNC_PASSWORD1 and IMAPSYNC_PASSWORD2
|
||||
@ -174,8 +191,9 @@ OPTIONS
|
||||
|
||||
--nomixfolders : Do not merge folders when host1 is case-sensitive
|
||||
while host2 is not (like Exchange). Only the first
|
||||
similar folder is synced (ex: with Sent SENT sent
|
||||
on host1 only Sent will be synced to host2).
|
||||
similar folder is synced (example: with folders
|
||||
"Sent", "SENT" and "sent"
|
||||
on host1 only "Sent" will be synced to host2).
|
||||
|
||||
--skipemptyfolders : Empty host1 folders are not created on host2.
|
||||
|
||||
@ -196,9 +214,20 @@ OPTIONS
|
||||
|
||||
--subfolder2 str : Syncs the whole host1 folders hierarchy under the
|
||||
host2 folder named str.
|
||||
(It does it internally by adding two
|
||||
It does it internally by adding three
|
||||
--regextrans2 options before all others.
|
||||
Add --debug to see what's really going on.)
|
||||
Add --debug to see what's really going on.
|
||||
|
||||
--subfolder1 str : Syncs the host1 folders hierarchy under str
|
||||
to the root hierarchy of host2.
|
||||
It's the couterpart of a sync done by --subfolder2
|
||||
when doing it in the reverse order.
|
||||
Backup/Restore scenario:
|
||||
Use --subfolder2 str for a backup to the folder str
|
||||
on host2. Then use --subfolder1 str for restoring
|
||||
from the folder str, after inverting
|
||||
host1/host2 user1/user2 values.
|
||||
|
||||
|
||||
--subscribed : Transfers subscribed folders.
|
||||
--subscribe : Subscribe to the folders transferred on the
|
||||
@ -207,21 +236,29 @@ OPTIONS
|
||||
host2 even if they are not subscribed on host1.
|
||||
|
||||
--prefix1 str : Remove prefix str to all destination folders,
|
||||
usually INBOX. or INBOX/ or an empty string "".
|
||||
usually "INBOX." or "INBOX/" or an empty string "".
|
||||
imapsync guesses the prefix if host1 imap server
|
||||
does not have NAMESPACE capability. This option
|
||||
does not have NAMESPACE capability. So this option
|
||||
should not be used, most of the time.
|
||||
--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.
|
||||
|
||||
--sep1 str : Host1 separator. This option should not be used,
|
||||
most of the time.
|
||||
Imapsync gets the separator from the server itself,
|
||||
by using NAMESPACE, or it tries to guess it
|
||||
from the folders listing (it counts
|
||||
characters / . \\ \ in folder names and choose the
|
||||
more frequent, or finally / if nothing is found.
|
||||
--sep2 str : Host2 separator.
|
||||
|
||||
--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. For examples see
|
||||
Have in mind that --regextrans2 is applied after
|
||||
the automatic prefix and separator inversion.
|
||||
For examples see:
|
||||
https://imapsync.lamiral.info/FAQ.d/FAQ.Folders_Mapping.txt
|
||||
|
||||
OPTIONS/folders sizes
|
||||
@ -260,7 +297,14 @@ OPTIONS
|
||||
|
||||
--pipemess cmd : Apply this cmd command to each message content
|
||||
before the copy.
|
||||
--pipemess cmd : and this one, etc.
|
||||
--pipemess cmd : and this one, etc.
|
||||
With several --pipemess, the output of each cmd
|
||||
command (STDOUT) is given to the input (STDIN)
|
||||
of the next command.
|
||||
For example,
|
||||
--pipemess cmd1 --pipemess cmd2 --pipemess cmd3
|
||||
is like a Unix pipe:
|
||||
"cat message | cmd1 | cmd2 | cmd3"
|
||||
|
||||
--disarmreadreceipts : Disarms read receipts (host2 Exchange issue)
|
||||
|
||||
@ -270,6 +314,9 @@ OPTIONS
|
||||
|
||||
OPTIONS/flags
|
||||
|
||||
If you encounter flag problems see also:
|
||||
https://imapsync.lamiral.info/FAQ.d/FAQ.Flags.txt
|
||||
|
||||
--regexflag reg : Apply the whole regex to each flags list.
|
||||
Example: 's/"Junk"//g' # to remove "Junk" flag.
|
||||
--regexflag reg : then this one, etc.
|
||||
@ -288,19 +335,26 @@ OPTIONS
|
||||
\Deleted, then messages are really deleted with an
|
||||
EXPUNGE IMAP command. If expunging after each message
|
||||
slows down too much the sync then use
|
||||
--noexpungeaftereach to speed up.
|
||||
--noexpungeaftereach to speed up, expunging will then be
|
||||
done only twice per folder, one at the beginning and
|
||||
one at the end of a folder sync.
|
||||
|
||||
--expunge1 : Expunge messages on host1 just before syncing a folder.
|
||||
Expunge is done per folder.
|
||||
Expunge aims is to really delete messages marked deleted.
|
||||
An expunge is also done after each message copied
|
||||
if option --delete1 is set.
|
||||
if option --delete1 is set (unless --noexpungeaftereach).
|
||||
|
||||
--noexpunge1 : Do not expunge messages on host1.
|
||||
|
||||
--delete1emptyfolders : Deletes empty folders on host1, INBOX excepted.
|
||||
Useful with --delete1 since what remains on host1
|
||||
is only what failed to be synced.
|
||||
|
||||
--delete2 : Delete messages in host2 that are not in
|
||||
host1 server. Useful for backup or pre-sync.
|
||||
--delete2 implies --uidexpunge2
|
||||
|
||||
--delete2duplicates : Delete messages in host2 that are duplicates.
|
||||
Works only without --useuid since duplicates are
|
||||
detected with an header part of each message.
|
||||
@ -308,30 +362,33 @@ OPTIONS
|
||||
--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$/"
|
||||
|
||||
--expunge2 : Expunge messages on host2 after messages transfer.
|
||||
--uidexpunge2 : uidexpunge messages on the host2 account
|
||||
that are not on the host1 account, requires --delete2
|
||||
--noexpunge2 : Do not expunge messages on host2.
|
||||
--nouidexpunge2 : Do not uidexpunge messages on the host2 account
|
||||
that are not on the host1 account.
|
||||
|
||||
OPTIONS/dates
|
||||
|
||||
If you encounter problems with dates, see also:
|
||||
https://imapsync.lamiral.info/FAQ.d/FAQ.Dates.txt
|
||||
|
||||
--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).
|
||||
a message arrived on a host (Unix mtime).
|
||||
--idatefromheader : Sets the internal dates on host2 same as the
|
||||
"Date:" headers.
|
||||
If you encounter problems with dates see also
|
||||
https://imapsync.lamiral.info/FAQ.d/FAQ.Dates.txt
|
||||
ones in "Date:" headers.
|
||||
|
||||
OPTIONS/message selection
|
||||
|
||||
--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.
|
||||
--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.
|
||||
@ -362,7 +419,7 @@ OPTIONS
|
||||
--usecache : Use cache to speed up the sync.
|
||||
--nousecache : Do not use cache. Caveat: --useuid --nousecache creates
|
||||
duplicates on multiple runs.
|
||||
--useuid : Use UIDs instead of headers as a criterium to recognize
|
||||
--useuid : Use UIDs instead of headers as a criterion to recognize
|
||||
messages. Option --usecache is then implied unless
|
||||
--nousecache is used.
|
||||
|
||||
@ -370,8 +427,11 @@ OPTIONS
|
||||
|
||||
--syncacls : Synchronizes acls (Access Control Lists).
|
||||
--nosyncacls : Does not synchronize acls. This is the default.
|
||||
Acls in IMAP are not standardized, be careful.
|
||||
--addheader : When a message has no headers to be identified,
|
||||
Acls in IMAP are not standardized, be careful
|
||||
since one acl code on one side may signify something
|
||||
else on the other one.
|
||||
|
||||
--addheader : When a message has no headers to be identified,
|
||||
--addheader adds a "Message-Id" header,
|
||||
like "Message-Id: 12345@imapsync", where 12345
|
||||
is the imap UID of the message on the host1 folder.
|
||||
@ -423,16 +483,25 @@ OPTIONS
|
||||
--abort : terminates a previous call still running.
|
||||
It uses the pidfile to know what process to abort.
|
||||
|
||||
--exitwhenover int : Stop syncing when total bytes transferred reached.
|
||||
--exitwhenover int : Stop syncing and exits when int total bytes
|
||||
transferred is reached.
|
||||
|
||||
--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).
|
||||
--noreleasecheck : Do not check for new imapsync release
|
||||
--releasecheck : Check for new imapsync release.
|
||||
it's an http request to
|
||||
http://imapsync.lamiral.info/prj/imapsync/VERSION
|
||||
|
||||
--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.
|
||||
Obsolete since "imapsync --host1 imaphost" alone
|
||||
implies --justconnect
|
||||
|
||||
--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.
|
||||
@ -449,18 +518,21 @@ OPTIONS
|
||||
SECURITY
|
||||
|
||||
You can use --passfile1 instead of --password1 to give the password
|
||||
since it is safer. With --password1 option, any user on your host can
|
||||
see the password by using the 'ps auxwwww' command. Using a variable
|
||||
(like $PASSWORD1) is also dangerous because of the 'ps auxwwwwe'
|
||||
command. So, saving the password in a well protected file (600 or
|
||||
rw-------) is the best solution.
|
||||
since it is safer. With --password1 option, on Linux, any user on your
|
||||
host can see the password by using the 'ps auxwwww' command. Using a
|
||||
variable (like IMAPSYNC_PASSWORD1) is also dangerous because of the 'ps
|
||||
auxwwwwe' command. So, saving the password in a well protected file (600
|
||||
or rw-------) is the best solution.
|
||||
|
||||
Imapsync activates ssl or tls encryption by default, if possible. What
|
||||
detailed behavior is under this "if possible"? Imapsync activates ssl if
|
||||
the well known port imaps port (993) is open on the imap servers. If the
|
||||
imaps port is closed then it open a normal (clear) connection on port
|
||||
143 but it looks for TLS support in the CAPABILITY list of the servers.
|
||||
If TLS is supported then imapsync goes to encryption.
|
||||
Imapsync activates ssl or tls encryption by default, if possible.
|
||||
|
||||
What detailed behavior is under this "if possible"?
|
||||
|
||||
Imapsync activates ssl if the well known port imaps port (993) is open
|
||||
on the imap servers. If the imaps port is closed then it open a normal
|
||||
(clear) connection on port 143 but it looks for TLS support in the
|
||||
CAPABILITY list of the servers. If TLS is supported then imapsync goes
|
||||
to encryption.
|
||||
|
||||
If the automatic ssl/tls detection fails then imapsync will not protect
|
||||
against sniffing activities on the network, especially for passwords.
|
||||
@ -473,7 +545,25 @@ SECURITY
|
||||
EXIT STATUS
|
||||
|
||||
Imapsync will exit with a 0 status (return code) if everything went
|
||||
good. Otherwise, it exits with a non-zero status.
|
||||
good. Otherwise, it exits with a non-zero status. Here is the list of
|
||||
the exit code values (an integer between 0 and 255), the names reflects
|
||||
their meaning:
|
||||
|
||||
EX_OK => 0 ; #/* successful termination */
|
||||
EX_USAGE => 64 ; #/* command line usage error */
|
||||
EX_NOINPUT => 66 ; #/* cannot open input */
|
||||
EX_UNAVAILABLE => 69 ; #/* service unavailable */
|
||||
EX_SOFTWARE => 70 ; #/* internal software error */
|
||||
EXIT_CATCH_ALL => 1 ; # Any other error
|
||||
EXIT_BY_SIGNAL => 6 ; # Should be 128+n where n is the sig_num
|
||||
EXIT_PID_FILE_ERROR => 8 ;
|
||||
EXIT_CONNECTION_FAILURE => 10 ;
|
||||
EXIT_TLS_FAILURE => 12 ;
|
||||
EXIT_AUTHENTICATION_FAILURE => 16 ;
|
||||
EXIT_SUBFOLDER1_NO_EXISTS => 21 ;
|
||||
EXIT_WITH_ERRORS => 111 ;
|
||||
EXIT_WITH_ERRORS_MAX => 112 ;
|
||||
EXIT_TESTS_FAILED => 254 ; # Like Test::More API
|
||||
|
||||
LICENSE AND COPYRIGHT
|
||||
|
||||
@ -488,13 +578,14 @@ LICENSE AND COPYRIGHT
|
||||
|
||||
"No limits to do anything with this work and this license."
|
||||
|
||||
https://imapsync.lamiral.info/LICENSE
|
||||
Look at https://imapsync.lamiral.info/LICENSE
|
||||
|
||||
AUTHOR
|
||||
|
||||
Gilles LAMIRAL <gilles@lamiral.info>
|
||||
|
||||
Feedback good or bad is very often welcome.
|
||||
Good feedback good is always welcome. Bad feedback is very often
|
||||
welcome.
|
||||
|
||||
Gilles LAMIRAL earns his living by writing, installing, configuring and
|
||||
teaching free, open and often gratis software. Imapsync used to be
|
||||
@ -512,10 +603,6 @@ IMAP SERVERS supported
|
||||
|
||||
HUGE MIGRATION
|
||||
|
||||
Pay special attention to options --subscribed --subscribe --delete1
|
||||
--delete1emptyfolders --delete2 --delete2folders --maxage --minage
|
||||
--maxsize --useuid --usecache
|
||||
|
||||
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. The separator used in this example is ';'
|
||||
@ -549,10 +636,10 @@ HUGE MIGRATION
|
||||
|
||||
INSTALL
|
||||
|
||||
Imapsync works under any Unix with perl.
|
||||
Imapsync works under any Unix with Perl.
|
||||
|
||||
Imapsync works under most Windows (2000, XP, Vista, Seven, Eight, Ten
|
||||
and all Server releases 2000, 2003, 2008 and R2, 2012 and R2)
|
||||
and all Server releases 2000, 2003, 2008 and R2, 2012 and R2, 2016)
|
||||
as a standalone binary software called imapsync.exe,
|
||||
usually launched from a batch file in order to avoid always typing
|
||||
the options.
|
||||
@ -590,37 +677,54 @@ SIMILAR SOFTWARE
|
||||
See also https://imapsync.lamiral.info/S/external.shtml
|
||||
for a better up to date list.
|
||||
|
||||
imap_tools : https://github.com/andrewnimmo/rick-sanders-imap-tools
|
||||
offlineimap : https://github.com/nicolas33/offlineimap
|
||||
Doveadm-Sync : http://wiki2.dovecot.org/Tools/Doveadm/Sync
|
||||
( Dovecot sync tool )
|
||||
mbsync : http://isync.sourceforge.net/
|
||||
mailsync : http://mailsync.sourceforge.net/
|
||||
mailutil : http://www.washington.edu/imap/
|
||||
part of the UW IMAP tookit.
|
||||
imaprepl : http://www.bl0rg.net/software/
|
||||
http://freecode.com/projects/imap-repl/
|
||||
imapcopy : http://www.ardiehl.de/imapcopy/
|
||||
migrationtool : http://sourceforge.net/projects/migrationtool/
|
||||
imapmigrate : http://sourceforge.net/projects/cyrus-utils/
|
||||
wonko_imapsync: http://wonko.com/article/554
|
||||
see also file W/tools/wonko_ruby_imapsync
|
||||
exchange-away : http://exchange-away.sourceforge.net/
|
||||
pop2imap : http://www.linux-france.org/prj/pop2imap/
|
||||
Last updated and verified on Thu Apr 11, 2019.
|
||||
|
||||
Feedback (good or bad) will often be welcome.
|
||||
imapsync : https://github.com/imapsync/imapsync
|
||||
(this is an imapsync copy, sometimes delayed,
|
||||
with --noreleasecheck by default since release 1.592, 2014/05/22)
|
||||
imap_tools : https://web.archive.org/web/20161228145952/http://www.athensfbc.com/imap_tools/
|
||||
The imap_tools code is now at
|
||||
https://github.com/andrewnimmo/rick-sanders-imap-tools
|
||||
imaputils : https://github.com/mtsatsenko/imaputils (very old imap_tools fork)
|
||||
Doveadm-Sync : https://wiki2.dovecot.org/Tools/Doveadm/Sync ( Dovecot sync tool )
|
||||
davmail : http://davmail.sourceforge.net/
|
||||
offlineimap : http://offlineimap.org/
|
||||
mbsync : http://isync.sourceforge.net/
|
||||
mailsync : http://mailsync.sourceforge.net/
|
||||
mailutil : http://www.washington.edu/imap/ part of the UW IMAP tookit.
|
||||
imaprepl : https://bl0rg.net/software/ http://freecode.com/projects/imap-repl/
|
||||
imapcopy (Pascal): http://www.ardiehl.de/imapcopy/
|
||||
imapcopy (Java) : https://code.google.com/archive/p/imapcopy/
|
||||
imapsize : http://www.broobles.com/imapsize/
|
||||
migrationtool : http://sourceforge.net/projects/migrationtool/
|
||||
imapmigrate : http://sourceforge.net/projects/cyrus-utils/
|
||||
larch : https://github.com/rgrove/larch (derived from wonko_imapsync, good at Gmail)
|
||||
wonko_imapsync : http://wonko.com/article/554 (superseded by larch)
|
||||
pop2imap : http://www.linux-france.org/prj/pop2imap/ (I wrote that too)
|
||||
exchange-away : http://exchange-away.sourceforge.net/
|
||||
SyncBackPro : http://www.2brightsparks.com/syncback/sbpro.html
|
||||
ImapSyncClient : https://github.com/ridaamirini/ImapSyncClient
|
||||
MailStore : https://www.mailstore.com/en/products/mailstore-home/
|
||||
mnIMAPSync : https://github.com/manusa/mnIMAPSync
|
||||
imap-upload : http://imap-upload.sourceforge.net/
|
||||
(a tool for uploading a local mbox file to IMAP4 server)
|
||||
|
||||
HISTORY
|
||||
|
||||
I wrote imapsync because an enterprise (basystemes) paid me to install a
|
||||
new imap server without losing huge old mailboxes located in a far away
|
||||
remote imap server, accessible by a low-bandwidth often broken link. The
|
||||
tool imapcp (written in python) could not help me because I had to
|
||||
verify every mailbox was well transferred, and then delete it after a
|
||||
good transfer. Imapsync started its life as a patch of the
|
||||
copy_folder.pl script. The script copy_folder.pl comes from the
|
||||
Mail-IMAPClient-2.1.3 perl module tarball source (more precisely in the
|
||||
examples/ directory of the Mail-IMAPClient tarball). So many happened
|
||||
since then that I wonder if it remains any lines of the original
|
||||
copy_folder.pl in imapsync source code.
|
||||
I initially wrote imapsync in July 2001 because an enterprise,
|
||||
basystemes, paid me to install a new imap server without losing huge old
|
||||
mailboxes located in a far away remote imap server, accessible by an
|
||||
often broken low-bandwidth ISDN link.
|
||||
|
||||
I had to verify every mailbox was well transferred, all folders, all
|
||||
messages, without wasting bandwidth or creating duplicates upon resyncs.
|
||||
The design was made with the beautiful rsync command in mind.
|
||||
|
||||
Imapsync started its life as a patch of the copy_folder.pl script. The
|
||||
script copy_folder.pl comes from the Mail-IMAPClient-2.1.3 perl module
|
||||
tarball source (more precisely in the examples/ directory of the
|
||||
Mail-IMAPClient tarball).
|
||||
|
||||
So many happened since then that I wonder if it remains any lines of the
|
||||
original copy_folder.pl in imapsync source code.
|
||||
|
||||
|
1
README.txt
Symbolic link
1
README.txt
Symbolic link
@ -0,0 +1 @@
|
||||
README
|
@ -1,4 +1,4 @@
|
||||
# $Id: README_Windows.txt,v 1.13 2019/02/14 15:50:09 gilles Exp gilles $
|
||||
# $Id: README_Windows.txt,v 1.14 2019/06/26 22:32:28 gilles Exp gilles $
|
||||
#
|
||||
# This is the README_Windows.txt file for imapsync
|
||||
# imapsync : IMAP sync and migrate tool.
|
||||
@ -38,19 +38,23 @@ In the folder extracted imapsync_1.xxx you see 6 files and 2 directories:
|
||||
* imapsync_example.bat is a simple batch file example you will copy and edit.
|
||||
* sync_loop_windows.bat is a batch file example for syncing many accounts.
|
||||
* file.txt is an input file example for syncing many accounts.
|
||||
* imapsync.exe is the imapsync binary. You don't have to run it directly.
|
||||
* imapsync.exe is the imapsync 32bit binary. You don't have to run it directly.
|
||||
* imapsync_64bit.exe is the imapsync 64bit binary. You don't have to run it directly.
|
||||
* Cook/ is the directory to build imapsync.exe from its source,
|
||||
for the B) way and expert users.
|
||||
|
||||
You can copy or rename the file imapsync_example.bat as you wish,
|
||||
as long as its extension remains ".bat".
|
||||
as long as its extension remains ".bat".
|
||||
|
||||
On Windows systems .bat extension means "I'm a batch script".
|
||||
Same thing for sync_loop_windows.bat.
|
||||
It's the same for sync_loop_windows.bat.
|
||||
|
||||
The batch scripts have to stay in the same directory than
|
||||
imapsync.exe because of the way they call imapsync.exe,
|
||||
they use ".\imapsync.exe", so let them be in the same directory.
|
||||
Or change the path .\ to whatever you want if you understand what
|
||||
you're doing (you have to use a pathname from the script point of view).
|
||||
imapsync.exe because of the way they call imapsync.exe.
|
||||
They use ".\imapsync.exe", so let them be in the same directory.
|
||||
|
||||
Or you can change the path .\ to whatever you want if you understand what
|
||||
you are doing (you have to use a pathname from the script point of view).
|
||||
|
||||
For the rest of this documentation I assume you copied
|
||||
imapsync_example.bat to a file named imapsync_stuff.bat
|
||||
|
@ -26,13 +26,13 @@
|
||||
|
||||
<body>
|
||||
|
||||
<h1>Similar software <a id="similar" href="../#TOP"><small>(back to menu)</small></a>
|
||||
<h1>Similar software tools <a id="similar" href="../#TOP"><small>(back to menu)</small></a>
|
||||
</h1>
|
||||
|
||||
|
||||
<ul>
|
||||
<li> <b>imapsync</b>: <a href="https://github.com/imapsync/imapsync">https://github.com/imapsync/imapsync</a> (this is an imapsync copy, sometimes delayed, with --noreleasecheck by default since release 1.592, 2014/05/22)</li>
|
||||
<li> imap_tools: <a href="https://web.archive.org/web/20161228145952/http://www.athensfbc.com/imap_tools/">http://www.athensfbc.com/imap_tools/</a>.
|
||||
<li> imap_tools: <a href="https://web.archive.org/web/20161228145952/http://www.athensfbc.com/imap_tools/">https://web.archive.org/web/20161228145952/http://www.athensfbc.com/imap_tools/</a>.
|
||||
The imap_tools code is now at <a href="https://github.com/andrewnimmo/rick-sanders-imap-tools">https://github.com/andrewnimmo/rick-sanders-imap-tools</a></li>
|
||||
<li> imaputils: <a href="https://github.com/mtsatsenko/imaputils">https://github.com/mtsatsenko/imaputils</a> (very old imap_tools fork)</li>
|
||||
<li> Doveadm-Sync: <a href="https://wiki2.dovecot.org/Tools/Doveadm/Sync">https://wiki2.dovecot.org/Tools/Doveadm/Sync</a> ( Dovecot sync tool )</li>
|
||||
@ -52,32 +52,38 @@
|
||||
<li> imapmigrate: <a href="http://sourceforge.net/projects/cyrus-utils/">http://sourceforge.net/projects/cyrus-utils/</a></li>
|
||||
<li> larch: <a href="https://github.com/rgrove/larch">https://github.com/rgrove/larch</a> (derived from wonko_imapsync, good at Gmail)</li>
|
||||
<li> wonko_imapsync: <a href="http://web.archive.org/web/20130807173030/http://wonko.com/post/ruby_script_to_sync_email_from_any_imap_server_to_gmail">http://wonko.com/article/554</a> (superseded by larch)</li>
|
||||
<li> pop2imap: <a href="http://www.linux-france.org/prj/pop2imap/">http://www.linux-france.org/prj/pop2imap/</a></li>
|
||||
<li> pop2imap: <a href="http://www.linux-france.org/prj/pop2imap/">http://www.linux-france.org/prj/pop2imap/</a> (I wrote that too)</li>
|
||||
<li> exchange-away: <a href="http://exchange-away.sourceforge.net/">http://exchange-away.sourceforge.net/</a></li>
|
||||
<li> SyncBackPro <a href="http://www.2brightsparks.com/syncback/sbpro.html">http://www.2brightsparks.com/syncback/sbpro.html</a></li>
|
||||
|
||||
<li> ImapSyncClient <a href="https://github.com/ridaamirini/ImapSyncClient">https://github.com/ridaamirini/ImapSyncClient</a></li>
|
||||
<li> MailStore <a href="https://www.mailstore.com/en/products/mailstore-home/">https://www.mailstore.com/en/products/mailstore-home/</a></li>
|
||||
<li> mnIMAPSync <a href="https://github.com/manusa/mnIMAPSync">https://github.com/manusa/mnIMAPSync</a></li>
|
||||
<li> imap-upload <a href="http://imap-upload.sourceforge.net/">http://imap-upload.sourceforge.net/</a></li>
|
||||
<li> SyncBackPro: <a href="http://www.2brightsparks.com/syncback/sbpro.html">http://www.2brightsparks.com/syncback/sbpro.html</a></li>
|
||||
|
||||
<li> ImapSyncClient: <a href="https://github.com/ridaamirini/ImapSyncClient">https://github.com/ridaamirini/ImapSyncClient</a></li>
|
||||
<li> MailStore: <a href="https://www.mailstore.com/en/products/mailstore-home/">https://www.mailstore.com/en/products/mailstore-home/</a></li>
|
||||
<li> mnIMAPSync: <a href="https://github.com/manusa/mnIMAPSync">https://github.com/manusa/mnIMAPSync</a></li>
|
||||
<li> imap-upload: <a href="http://imap-upload.sourceforge.net/">http://imap-upload.sourceforge.net/</a>
|
||||
(A tool for uploading a local mbox file to IMAP4 server)</li>
|
||||
<li> imapbackup: <a href="https://github.com/rcarmo/imapbackup">https://github.com/rcarmo/imapbackup</a>
|
||||
(A Python script for incremental backups of IMAP mailboxes)</li>
|
||||
</ul>
|
||||
|
||||
<h1>External online IMAP migration services <a id="ONLINE_OTHERS" href="../#TOP"><small>(back to menu)</small></a>
|
||||
</h1>
|
||||
|
||||
<p>I have no share in these free or paid services.
|
||||
I don't think they use Imapsync.
|
||||
Prices are given par mailbox and may be outdated (December 2011).</p>
|
||||
Some use Imapsync, most don't.
|
||||
Prices are given par mailbox and may be outdated
|
||||
(Last checked on Thu Apr 11, 2019).</p>
|
||||
|
||||
|
||||
<ul>
|
||||
<li> Web Hosting Canada <b>0 USD</b>: <a href="https://imapsync.whc.ca/">https://imapsync.whc.ca/</a> (imapsync based)</li>
|
||||
<li> BoomHost <b>0 USD</b>: <a href="https://imapsync.boomhost.com/">https://imapsync.boomhost.com/</a> (imapsync based)</li>
|
||||
<li> French Ovh imapcopy <b>0 EUR</b>: <a href="https://mail.ovh.net/fr/imapcopy/">https://mail.ovh.net/fr/imapcopy/</a></li>
|
||||
<li> Rackspace migration <b>0 USD</b>: <a href="http://www.rackspace.com/email-hosting/migrations">http://www.rackspace.com/email-hosting/migrations</a></li>
|
||||
<li> Movemymail one free, 5 USD after: <a href="https://movemymail.net">https://movemymail.net/</a></li>
|
||||
<li> TransferMyEmail <b>?? USD</b>: <a href="https://transfermyemail.ca/">https://transfermyemail.ca/</a></li>
|
||||
<li> Migrationwiz 12 USD: <a href="https://www.bittitan.com/products/migrationwiz/">https://www.bittitan.com/products/migrationwiz/</a>
|
||||
<li> TransferMyEmail 1.50 USD for a day pass: <a href="https://transfermyemail.ca/">https://transfermyemail.ca/</a></li>
|
||||
<li> Migrationwiz 11.99 USD: <a href="https://www.bittitan.com/products/migrationwiz/">https://www.bittitan.com/products/migrationwiz/</a>
|
||||
( See this remarkable comparison <a href="https://blog.bittitan.com/imapsync-vs-migrationwiz/">Imapsync vs Migrationwiz</a>! )</li>
|
||||
<li> Audriga 9.99 EUR: <a href="https://www.groupware-migration.com/">https://www.groupware-migration.com/</a></li>
|
||||
<li> Audriga 11.90 EUR: <a href="https://www.groupware-migration.com/">https://www.groupware-migration.com/</a></li>
|
||||
<li> Yippiemove 14.95 USD: <a href="http://www.yippiemove.com">http://www.yippiemove.com/</a>
|
||||
( See <a href="https://www.yippiemove.com/help/faq_generic.html#imapsync">Yippiemove vs ImapSync</a> )</li>
|
||||
<li> ShuttleCloud one free, 19.95 USD after <a href="https://www.shuttlecloud.com/">https://www.shuttlecloud.com/</a></li>
|
||||
@ -111,7 +117,7 @@ alt="Viewable With Any Browser" />
|
||||
<!--#config timefmt="%D" -->
|
||||
<!--#config timefmt="%A %B %d, %Y" -->
|
||||
<b>This document last modified on <!--#echo var="LAST_MODIFIED" --></b>
|
||||
($Id: external.shtml,v 1.28 2019/02/17 14:42:26 gilles Exp gilles $)<br/>
|
||||
($Id: external.shtml,v 1.34 2019/05/27 16:18:54 gilles Exp gilles $)<br/>
|
||||
<a href="#TOP">Top of the page</a>
|
||||
</p>
|
||||
|
||||
|
@ -4,7 +4,7 @@
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" id="TOP">
|
||||
|
||||
<head>
|
||||
<title>Imapsync list of 75 imap server software applications supported</title>
|
||||
<title>Imapsync list of the 79 imap server software applications supported</title>
|
||||
<meta name="generator" content="Bluefish 2.2.2" />
|
||||
<meta name="author" content="Gilles LAMIRAL" />
|
||||
<meta name="date" content="2016-04-10T00:24:15+0200" />
|
||||
@ -27,15 +27,16 @@
|
||||
<body>
|
||||
|
||||
|
||||
<h1>Imapsync list of 77 imap server software applications supported (and the broken ones) <a id="imap_server_success" href="../#TOP"><small>(back to menu)</small></a>
|
||||
<h1>Imapsync list of the 79 imap server software applications supported (and the broken ones) <a id="imap_server_success" href="../#TOP"><small>(back to menu)</small></a>
|
||||
</h1>
|
||||
|
||||
<p>To know whether your IMAP server is a widespread choice,
|
||||
take a look at <a href="http://openemailsurvey.org/">http://openemailsurvey.org/</a>.
|
||||
The quick answer is: if you're not using Dovecot then you're in a niche!
|
||||
</p>
|
||||
|
||||
<p>Let's start with the long reported <b>success stories</b> list: <b>
|
||||
77 different imap server software tools supported!</b><br/>
|
||||
79 different imap server software tools supported!</b><br/>
|
||||
[host1] means "source server" and [host2] means "destination server":
|
||||
</p>
|
||||
|
||||
@ -57,13 +58,11 @@ Example:
|
||||
<p>You can use option --justconnect to get those lines.
|
||||
Example:</p>
|
||||
<pre>
|
||||
imapsync --host1 test1.lamiral.info \
|
||||
--host2 test2.lamiral.info \
|
||||
--justconnect
|
||||
imapsync --host1 test1.lamiral.info --host2 test2.lamiral.info --justconnect
|
||||
</pre>
|
||||
|
||||
|
||||
<p>And now the imap servers software imapsync success list:</p>
|
||||
<p>And now the imap software servers imapsync success list:</p>
|
||||
|
||||
<ol>
|
||||
<li>1und1 H mimap1 84498 [host1], H mibap4 95231 [host1](<a href="http://www.1und1.de/">http://www.1und1.de/</a>)</li>
|
||||
@ -148,8 +147,14 @@ imapsync --host1 test1.lamiral.info \
|
||||
<li>Oracle Beehive [host1]
|
||||
(<a href="http://www.oracle.com/technetwork/middleware/beehive/overview/index.html">http://www.oracle.com/technetwork/middleware/beehive/overview/</a>) </li>
|
||||
<li><b><a href="http://outlook.com/">Outlook.com</a></b> can be IMAP accessed via host imap-mail.outlook.com over ssl (use --ssl1 or --ssl2).</li>
|
||||
<li>Parallels Plesk Panel 9.x [host2] 11.x [host2] (<a href="http://www.parallels.com/">http://www.parallels.com/</a>)</li>
|
||||
<li>Parallels Plesk Panel 9.x [host2] 11.x [host2] (<a href="http://www.parallels.com/">http://www.parallels.com/</a>)</li>
|
||||
|
||||
<li>Pegasus Mail (by David Harris) [host1] (<a href="http://www.pmail.com/">http://www.pmail.com/</a></li>
|
||||
|
||||
|
||||
<li>Perdition (<a href="http://horms.net/projects/perdition/">http://horms.net/projects/perdition/</a></li>
|
||||
|
||||
<li>ProtoMail [host1] (<a href="https://protonmail.com/">https://protonmail.com/</a></li>
|
||||
|
||||
<li>Qualcomm Worldmail (NT) (<a href="http://www.eudora.com/worldmail/">http://www.eudora.com/worldmail/</a>) </li>
|
||||
<li>Rockliffe Mailsite 5.3.11, 4.5.6 (<a href="http://www.mailsite.com/">http://www.mailsite.com/</a>) </li>
|
||||
@ -225,7 +230,7 @@ alt="Viewable With Any Browser" />
|
||||
<!--#config timefmt="%D" -->
|
||||
<!--#config timefmt="%A %B %d, %Y" -->
|
||||
<b>This document last modified on <!--#echo var="LAST_MODIFIED" --></b>
|
||||
($Id: imapservers.shtml,v 1.38 2019/02/17 14:34:25 gilles Exp gilles $)<br/>
|
||||
($Id: imapservers.shtml,v 1.41 2019/05/27 18:53:01 gilles Exp gilles $)<br/>
|
||||
<a href="#TOP">Top of the page</a>
|
||||
</p>
|
||||
|
||||
|
@ -1,97 +1,99 @@
|
||||
1 Albanie_________________ 0.01 % 100 % 0 % 96
|
||||
1 Arabie_Saoudite_________ 0.01 % 100 % 0 % 95
|
||||
1 Bahrein_________________ 0.01 % 100 % 0 % 94
|
||||
1 Bolivie_________________ 0.01 % 100 % 0 % 93
|
||||
1 Bosnie-Herzegovine______ 0.01 % 100 % 0 % 92
|
||||
1 Burkina_Faso____________ 0.01 % 100 % 0 % 91
|
||||
1 Cameroun________________ 0.01 % 100 % 0 % 90
|
||||
1 Colombie________________ 0.01 % 100 % 0 % 89
|
||||
1 Coree_du_Sud____________ 0.01 % 100 % 0 % 88
|
||||
1 Grenade_________________ 0.01 % 100 % 0 % 87
|
||||
1 Iles_Feroe______________ 0.01 % 100 % 0 % 86
|
||||
1 Iles_Vierges_britanniques__ 0.01 % 100 % 0 % 85
|
||||
1 Jamaique________________ 0.01 % 100 % 0 % 84
|
||||
1 Jordanie________________ 0.01 % 100 % 0 % 83
|
||||
1 Koweit__________________ 0.01 % 100 % 0 % 82
|
||||
1 Maldives________________ 0.01 % 100 % 0 % 81
|
||||
1 Maroc___________________ 0.01 % 100 % 0 % 80
|
||||
1 Moldavie________________ 0.01 % 100 % 0 % 79
|
||||
1 Monaco__________________ 0.01 % 100 % 0 % 78
|
||||
1 Mongolie________________ 0.01 % 100 % 0 % 77
|
||||
1 Namibie_________________ 0.01 % 100 % 0 % 76
|
||||
1 Panama__________________ 0.01 % 100 % 0 % 75
|
||||
1 Qatar___________________ 0.01 % 100 % 0 % 74
|
||||
1 Republique_d'Azerbaidjan__ 0.01 % 100 % 0 % 73
|
||||
1 Saint_Christophe-Nevis-Anguilla__ 0.01 % 100 % 0 % 72
|
||||
1 Senegal_________________ 0.01 % 100 % 0 % 71
|
||||
1 Taiwan__________________ 0.01 % 100 % 0 % 70
|
||||
1 Tanzanie________________ 0.01 % 100 % 0 % 69
|
||||
1 Trinite-et-Tobago_______ 0.01 % 100 % 0 % 68
|
||||
2 Antilles_neerlandaises__ 0.03 % 100 % 0 % 67
|
||||
2 Costa_Rica______________ 0.03 % 100 % 0 % 66
|
||||
2 Nouvelle-Caledonie______ 0.03 % 100 % 0 % 65
|
||||
2 Perou___________________ 0.03 % 99 % 1 % 64
|
||||
2 Russie,_Federation______ 0.03 % 99 % 1 % 63
|
||||
2 Ukraine_________________ 0.03 % 99 % 1 % 62
|
||||
3 Nigeria_________________ 0.04 % 99 % 1 % 61
|
||||
1 Albanie_________________ 0.01 % 100 % 0 % 98
|
||||
1 Arabie_Saoudite_________ 0.01 % 100 % 0 % 97
|
||||
1 Bahrein_________________ 0.01 % 100 % 0 % 96
|
||||
1 Bolivie_________________ 0.01 % 100 % 0 % 95
|
||||
1 Bosnie-Herzegovine______ 0.01 % 100 % 0 % 94
|
||||
1 Burkina_Faso____________ 0.01 % 100 % 0 % 93
|
||||
1 Cameroun________________ 0.01 % 100 % 0 % 92
|
||||
1 Coree_du_Sud____________ 0.01 % 100 % 0 % 91
|
||||
1 Grenade_________________ 0.01 % 100 % 0 % 90
|
||||
1 Ile_Maurice_____________ 0.01 % 100 % 0 % 89
|
||||
1 Iles_Feroe______________ 0.01 % 100 % 0 % 88
|
||||
1 Iles_Vierges_britanniques__ 0.01 % 100 % 0 % 87
|
||||
1 Jamaique________________ 0.01 % 100 % 0 % 86
|
||||
1 Jordanie________________ 0.01 % 100 % 0 % 85
|
||||
1 Koweit__________________ 0.01 % 100 % 0 % 84
|
||||
1 Maldives________________ 0.01 % 100 % 0 % 83
|
||||
1 Maroc___________________ 0.01 % 100 % 0 % 82
|
||||
1 Moldavie________________ 0.01 % 100 % 0 % 81
|
||||
1 Monaco__________________ 0.01 % 100 % 0 % 80
|
||||
1 Mongolie________________ 0.01 % 100 % 0 % 79
|
||||
1 Namibie_________________ 0.01 % 100 % 0 % 78
|
||||
1 Panama__________________ 0.01 % 100 % 0 % 77
|
||||
1 Qatar___________________ 0.01 % 100 % 0 % 76
|
||||
1 Republique_d'Azerbaidjan__ 0.01 % 100 % 0 % 75
|
||||
1 Saint_Christophe-Nevis-Anguilla__ 0.01 % 100 % 0 % 74
|
||||
1 Senegal_________________ 0.01 % 100 % 0 % 73
|
||||
1 Tanzanie________________ 0.01 % 100 % 0 % 72
|
||||
1 Trinite-et-Tobago_______ 0.01 % 100 % 0 % 71
|
||||
2 Antilles_neerlandaises__ 0.03 % 100 % 0 % 70
|
||||
2 Colombie________________ 0.03 % 100 % 0 % 69
|
||||
2 Costa_Rica______________ 0.03 % 100 % 0 % 68
|
||||
2 Isra 0.03 % 100 % 0 % 67
|
||||
2 Nouvelle-Caledonie______ 0.03 % 99 % 1 % 66
|
||||
2 Perou___________________ 0.03 % 99 % 1 % 65
|
||||
2 Taiwan__________________ 0.03 % 99 % 1 % 64
|
||||
2 Ukraine_________________ 0.03 % 99 % 1 % 63
|
||||
3 Nigeria_________________ 0.04 % 99 % 1 % 62
|
||||
3 Russie,_Federation______ 0.04 % 99 % 1 % 61
|
||||
3 Uruguay_________________ 0.04 % 99 % 1 % 60
|
||||
3 Venezuela_______________ 0.04 % 99 % 1 % 59
|
||||
4 Bulgarie________________ 0.06 % 99 % 1 % 58
|
||||
4 Indonesie_______________ 0.06 % 99 % 1 % 57
|
||||
4 Philippines_____________ 0.06 % 99 % 1 % 56
|
||||
4 Serbie__________________ 0.06 % 99 % 1 % 55
|
||||
4 Turquie_________________ 0.06 % 99 % 1 % 54
|
||||
4 Vietnam_________________ 0.06 % 99 % 1 % 53
|
||||
5 Chypre__________________ 0.07 % 99 % 1 % 52
|
||||
5 Egypte__________________ 0.07 % 99 % 1 % 51
|
||||
5 Ireland_________________ 0.07 % 99 % 1 % 50
|
||||
5 Lituanie________________ 0.07 % 99 % 1 % 49
|
||||
6 Malte___________________ 0.09 % 99 % 1 % 48
|
||||
6 Thailande_______________ 0.09 % 99 % 1 % 47
|
||||
7 Estonie_________________ 0.10 % 98 % 2 % 46
|
||||
7 Islande_________________ 0.10 % 98 % 2 % 45
|
||||
8 Croatie_________________ 0.12 % 98 % 2 % 44
|
||||
10 Emirats_Arabes_Unis_____ 0.15 % 98 % 2 % 43
|
||||
10 Lettonie________________ 0.15 % 98 % 2 % 42
|
||||
4 Indonesie_______________ 0.06 % 99 % 1 % 58
|
||||
4 Philippines_____________ 0.06 % 99 % 1 % 57
|
||||
4 Serbie__________________ 0.06 % 99 % 1 % 56
|
||||
4 Turquie_________________ 0.06 % 99 % 1 % 55
|
||||
4 Vietnam_________________ 0.06 % 99 % 1 % 54
|
||||
5 Bulgarie________________ 0.07 % 99 % 1 % 53
|
||||
5 Egypte__________________ 0.07 % 99 % 1 % 52
|
||||
5 Ireland_________________ 0.07 % 99 % 1 % 51
|
||||
5 Lituanie________________ 0.07 % 99 % 1 % 50
|
||||
6 Malte___________________ 0.09 % 99 % 1 % 49
|
||||
7 Chypre__________________ 0.10 % 99 % 1 % 48
|
||||
7 Estonie_________________ 0.10 % 98 % 2 % 47
|
||||
7 Islande_________________ 0.10 % 98 % 2 % 46
|
||||
8 Croatie_________________ 0.11 % 98 % 2 % 45
|
||||
8 Thailande_______________ 0.11 % 98 % 2 % 44
|
||||
10 Emirats_Arabes_Unis_____ 0.14 % 98 % 2 % 43
|
||||
10 Lettonie________________ 0.14 % 98 % 2 % 42
|
||||
13 Israel__________________ 0.19 % 98 % 2 % 41
|
||||
14 Luxembourg______________ 0.21 % 98 % 2 % 40
|
||||
14 Singapour_______________ 0.21 % 97 % 3 % 39
|
||||
15 Chine___________________ 0.22 % 97 % 3 % 38
|
||||
16 Chili___________________ 0.24 % 97 % 3 % 37
|
||||
16 Malaisie________________ 0.24 % 97 % 3 % 36
|
||||
17 Argentine_______________ 0.25 % 96 % 4 % 35
|
||||
17 Slovenie________________ 0.25 % 96 % 4 % 34
|
||||
18 Mexique_________________ 0.27 % 96 % 4 % 33
|
||||
18 Slovaquie_______________ 0.27 % 96 % 4 % 32
|
||||
19 Inde____________________ 0.28 % 95 % 5 % 31
|
||||
21 Roumanie________________ 0.31 % 95 % 5 % 30
|
||||
23 Irlande_________________ 0.34 % 95 % 5 % 29
|
||||
24 Afrique_du_Sud__________ 0.36 % 94 % 6 % 28
|
||||
24 Grece___________________ 0.36 % 94 % 6 % 27
|
||||
24 Hong-Kong_______________ 0.36 % 94 % 6 % 26
|
||||
26 ________________________ 0.39 % 93 % 7 % 25
|
||||
30 Portugal________________ 0.45 % 93 % 7 % 24
|
||||
31 Japon___________________ 0.46 % 93 % 7 % 23
|
||||
31 Nouvelle-Zelande________ 0.46 % 92 % 8 % 22
|
||||
31 Russie__________________ 0.46 % 92 % 8 % 21
|
||||
33 Hongrie_________________ 0.49 % 91 % 9 % 20
|
||||
46 Finlande________________ 0.69 % 91 % 9 % 19
|
||||
48 Norvege_________________ 0.72 % 90 % 10 % 18
|
||||
50 Republique_tcheque______ 0.75 % 89 % 11 % 17
|
||||
64 Bresil__________________ 0.96 % 89 % 11 % 16
|
||||
71 Pologne_________________ 1.06 % 88 % 12 % 15
|
||||
89 Danemark________________ 1.33 % 87 % 13 % 14
|
||||
103 Suede___________________ 1.54 % 85 % 15 % 13
|
||||
111 Belgique________________ 1.66 % 84 % 16 % 12
|
||||
144 Espagne_________________ 2.15 % 82 % 18 % 11
|
||||
160 Autriche________________ 2.39 % 80 % 20 % 10
|
||||
221 Australie_______________ 3.30 % 77 % 23 % 9
|
||||
268 Suisse__________________ 4.00 % 74 % 26 % 8
|
||||
274 Canada__________________ 4.09 % 70 % 30 % 7
|
||||
280 Pays-Bas________________ 4.18 % 66 % 34 % 6
|
||||
326 France__________________ 4.87 % 62 % 38 % 5
|
||||
403 Italie__________________ 6.02 % 57 % 43 % 4
|
||||
609 Royaume-Uni_____________ 9.09 % 51 % 49 % 3
|
||||
1302 Allemagne_______________ 19.44 % 42 % 58 % 2
|
||||
1507 Etats-Unis______________ 22.50 % 22 % 78 % 1
|
||||
TOTAL = 6699 sales 316542 EUR over 96 countries on Mon Feb 18 23:52:01 CET 2019
|
||||
15 Chine___________________ 0.21 % 98 % 2 % 40
|
||||
15 Luxembourg______________ 0.21 % 97 % 3 % 39
|
||||
16 Malaisie________________ 0.23 % 97 % 3 % 38
|
||||
16 Singapour_______________ 0.23 % 97 % 3 % 37
|
||||
17 Argentine_______________ 0.24 % 97 % 3 % 36
|
||||
17 Chili___________________ 0.24 % 96 % 4 % 35
|
||||
18 Slovenie________________ 0.26 % 96 % 4 % 34
|
||||
19 Mexique_________________ 0.27 % 96 % 4 % 33
|
||||
19 Slovaquie_______________ 0.27 % 96 % 4 % 32
|
||||
21 Inde____________________ 0.30 % 95 % 5 % 31
|
||||
23 Roumanie________________ 0.33 % 95 % 5 % 30
|
||||
24 Hong-Kong_______________ 0.34 % 95 % 5 % 29
|
||||
24 Irlande_________________ 0.34 % 94 % 6 % 28
|
||||
25 Afrique_du_Sud__________ 0.36 % 94 % 6 % 27
|
||||
25 Grece___________________ 0.36 % 94 % 6 % 26
|
||||
31 Japon___________________ 0.44 % 93 % 7 % 25
|
||||
31 Portugal________________ 0.44 % 93 % 7 % 24
|
||||
31 Russie__________________ 0.44 % 92 % 8 % 23
|
||||
32 Nouvelle-Zelande________ 0.46 % 92 % 8 % 22
|
||||
35 Hongrie_________________ 0.50 % 92 % 8 % 21
|
||||
37 ________________________ 0.53 % 91 % 9 % 20
|
||||
48 Finlande________________ 0.69 % 91 % 9 % 19
|
||||
50 Norvege_________________ 0.71 % 90 % 10 % 18
|
||||
53 Republique_tcheque______ 0.76 % 89 % 11 % 17
|
||||
66 Bresil__________________ 0.94 % 88 % 12 % 16
|
||||
78 Pologne_________________ 1.11 % 87 % 13 % 15
|
||||
96 Danemark________________ 1.37 % 86 % 14 % 14
|
||||
108 Suede___________________ 1.54 % 85 % 15 % 13
|
||||
115 Belgique________________ 1.64 % 83 % 17 % 12
|
||||
149 Espagne_________________ 2.13 % 82 % 18 % 11
|
||||
171 Autriche________________ 2.44 % 80 % 20 % 10
|
||||
227 Australie_______________ 3.24 % 77 % 23 % 9
|
||||
272 Suisse__________________ 3.89 % 74 % 26 % 8
|
||||
287 Canada__________________ 4.10 % 70 % 30 % 7
|
||||
299 Pays-Bas________________ 4.27 % 66 % 34 % 6
|
||||
345 France__________________ 4.93 % 62 % 38 % 5
|
||||
420 Italie__________________ 6.00 % 57 % 43 % 4
|
||||
631 Royaume-Uni_____________ 9.02 % 51 % 49 % 3
|
||||
1366 Allemagne_______________ 19.52 % 42 % 58 % 2
|
||||
1553 Etats-Unis______________ 22.20 % 22 % 78 % 1
|
||||
TOTAL = 6997 sales 342245 EUR over 98 countries on Thu Jun 27 01:16:49 CEST 2019
|
||||
|
136
S/news.shtml
136
S/news.shtml
@ -26,7 +26,7 @@
|
||||
<body>
|
||||
|
||||
|
||||
<h1>News about next imapsync, currently distributed <!--#exec cmd="cat ../VERSION"-->,
|
||||
<h1>News about next imapsync, currently distributed <!--#exec cmd="cat ../VERSION | tr -d '\n'"-->,
|
||||
next and previous releases <a href="../#TOP" id="latest"><small>(back to menu)</small></a>
|
||||
</h1>
|
||||
|
||||
@ -39,7 +39,7 @@ next and previous releases <a href="../#TOP" id="latest"><small>(back to menu)
|
||||
|
||||
<!--
|
||||
<ul>
|
||||
<li><b>1.920</b></li>
|
||||
<li><b>1.930</b></li>
|
||||
<li><b>Enhancement</b>: </li>
|
||||
<li><b>Enhancement</b>: </li>
|
||||
<li><b>Enhancement</b>: </li>
|
||||
@ -74,7 +74,7 @@ next and previous releases <a href="../#TOP" id="latest"><small>(back to menu)
|
||||
<li><b>Portability</b>: </li>
|
||||
|
||||
<li><b>Dependency removed</b>: </li>
|
||||
<li><b>Dependency added</b>: Perl module IO::Prompt</li>
|
||||
<li><b>Dependency added</b>: Perl module Text::ParseWords;</li>
|
||||
|
||||
<li><b>Roadmap</b>: </li>
|
||||
|
||||
@ -82,8 +82,126 @@ next and previous releases <a href="../#TOP" id="latest"><small>(back to menu)
|
||||
-->
|
||||
|
||||
|
||||
<ul>
|
||||
<li><b>1.920</b></li>
|
||||
<ul>
|
||||
<li><b>Roadmap</b>: Build a docker image including everything, to have a complete online /X in a single command.</li>
|
||||
</ul>
|
||||
|
||||
|
||||
<ul>
|
||||
<li><b>1.944</b> (2019/06/25) </li>
|
||||
<li><b>Enhancement</b>: A new /X including:
|
||||
<ul>
|
||||
<li>Options like <tt>--dry --justlogin --justfolders --justfoldersizes</tt>,</li>
|
||||
<li>An extra mode with <tt>--delete1 --delete2 --subfolder1 --subfolder2</tt> in order to make backup/restore syncs online,</li>
|
||||
<li>A button to reverse source and destination parameters.</li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
|
||||
<li><b>Usability</b>: Now "imapsync --host1 imap.lamiral.info" or "imapsync --host2 127.0.0.1" is ok and do like a --justconnect on servers.
|
||||
Useful to check rapidely an imap server.
|
||||
</li>
|
||||
|
||||
<li><b>Usability</b>: Added some error message texts explaining the exit numbers. Example: "Exiting with return value 16 (EXIT_AUTHENTICATION_FAILURE)"</li>
|
||||
<li><b>Usability</b>: Added what function is called when installing a signal. Example: "kill -QUIT 19839 # special behavior: call to sub catch_exit"</li>
|
||||
<li><b>Usability</b>: Now --justfolders activates --foldersizesatend</li>
|
||||
<li><b>Usability</b>: Moved the warning "no header by parse_headers so taking whole header with BODY.PEEK[HEADER]" to --debug mode.</li>
|
||||
<li><b>Usability</b>: Moved the warning "no header found so adding our own" to --debug mode.</li>
|
||||
|
||||
|
||||
<li><b>Bug fix</b>: USR1 signal for toggle_sleep call was never installed.</li>
|
||||
<li><b>Bug fix</b>: The number of messages deleted reported at the end was not accurate at all.</li>
|
||||
<li><b>Bug fix</b>: Change the longest line in --exchange2 and --office from 10500 to 10239. (\n inserted for those long lines)</li>
|
||||
|
||||
|
||||
<li><b>Enhancement</b>: Added PROCESS_ID after "Tail -f finished."</li>
|
||||
<li><b>Enhancement</b>: --maxage and --minage can take float as value in order to filter part of a day. (Need --noabletosearch also).</li>
|
||||
|
||||
<li><b>Enhancement</b>: Gmail context. Added <tt>--resynclabels</tt> to resync the Gmail labels <tt>X-GM-LABELS</tt>.
|
||||
</li>
|
||||
|
||||
<li><b>Enhancement</b>: Backup/Restore context. Added <tt>--subfolder1 "Foo/Bar"</tt> option
|
||||
in order to restore a backup made with <tt>--subfolder2 "Foo/Bar"</tt>.
|
||||
The option <tt>--folderrec "Foo/Bar"</tt> is implied by <tt>--subfolder1 "Foo/Bar"</tt>
|
||||
because it's the most common purpose.
|
||||
Also, options <tt>--subfolder1</tt> and <tt>--subfolder2</tt> turn off --automap
|
||||
if it is set because no one would have it set in this context.
|
||||
</li>
|
||||
|
||||
<li><b>Enhancement</b>: All exits are now done with a specific return code related to the error causing the exit.
|
||||
Here is the list of the exit code values (an integer between 0 and 255),
|
||||
the names reflects their meaning:
|
||||
<pre>
|
||||
EX_OK => 0 ; #/* successful termination */
|
||||
EX_USAGE => 64 ; #/* command line usage error */
|
||||
EX_NOINPUT => 66 ; #/* cannot open input */
|
||||
EX_UNAVAILABLE => 69 ; #/* service unavailable */
|
||||
EX_SOFTWARE => 70 ; #/* internal software error */
|
||||
EXIT_CATCH_ALL => 1 ; # Any other error
|
||||
EXIT_BY_SIGNAL => 6 ; # Should be 128+n where n is the sig_num
|
||||
EXIT_PID_FILE_ERROR => 8 ;
|
||||
EXIT_CONNECTION_FAILURE => 10 ;
|
||||
EXIT_TLS_FAILURE => 12 ;
|
||||
EXIT_AUTHENTICATION_FAILURE => 16 ;
|
||||
EXIT_SUBFOLDER1_NO_EXISTS => 21 ;
|
||||
EXIT_WITH_ERRORS => 111 ;
|
||||
EXIT_WITH_ERRORS_MAX => 112 ;
|
||||
EXIT_TESTS_FAILED => 254 ; # Like Test::More API
|
||||
</pre>
|
||||
</li>
|
||||
<li><b>Usability</b>: Gmail context. Activate --resynclabels by default with <tt>--gmail1 --gmail2</tt></li>
|
||||
|
||||
<li><b>Usability</b>: The maximum size of a message is the minimum of --maxsize and APPENDLIMIT=xxx (given the imap servers) or each one if the other no exists.</li>
|
||||
<li><b>Usability</b>: CGI context. Added default like --maxsize 1_000_000_000 (Out of memory prevention?).</li>
|
||||
<li><b>Usability</b>: CGI context. Only use "Message-Id" to identify messages, instead of "Message-Id" + "Received". We'll see.</li>
|
||||
<li><b>Usability</b>: CGI context. --addheader on by default. In order to remove it from the /X call. Still allow it as an option.</li>
|
||||
|
||||
|
||||
<li><b>Enhancement</b>: Added option --appendlimit xxxx in order to override the value got by APPENDLIMIT in CAPABILITY.
|
||||
The goal is to permit --truncmess of large messages.</li>
|
||||
<li><b>Enhancement</b>: Added option --truncmess to allow transfer of too big messages.
|
||||
Use it if you think it's better to have a truncated message than no message at all.</li>
|
||||
|
||||
|
||||
<li><b>Usability</b>: CGI context. Instead of quit with "another imapsync may be curently running",
|
||||
do like a tail -f on the other running sync, if the standart (crendentials) parameters are the same.</li>
|
||||
<li><b>Usability</b>: CGI context. A heavy load is now logged.</li>
|
||||
<li><b>Usability</b>: CGI context. Tolerate more load. Double the threshold. Now accept load at 2 per core instead of 1 per core</li>
|
||||
<li><b>Usability</b>: CGI context. Remove edging blanks of the 6 options <tt>--hostX --userX --passwordX</tt> (where X = 1 or 2).
|
||||
It will solve some login failures on /X just because blanks are not visible but sometimes there,
|
||||
copy/paste my friend you're not always my friend... use <tt>--nosanitize</tt> to avoid it.</li>
|
||||
|
||||
<li><b>Bug fix</b>: With <tt>--gmail1</tt> or <tt>--gmail2</tt> do not sync <tt>[Gmail]/All Mail</tt> if it is not requested. </li>
|
||||
<li><b>Bug fix</b>: When asked to terminate by a signal, kill myself by the signal instead of an exit call.
|
||||
Applied Martin Cracauer's advice on <a href="https://www.cons.org/cracauer/sigint.html">Proper handling of SIGINT/SIGQUIT</a>.
|
||||
I hope it fixes the <a href="https://github.com/imapsync/imapsync/issues/142">not always working double-ctrl-c</a>
|
||||
to end the sync.</li>
|
||||
<li><b>Bug fix</b>: Fixed tests to pass <tt>imapsync --tests</tt> under the docker image.</li>
|
||||
<li><b>Bug fix</b>: Gmail context. <tt>--synclabels --subfolder2 "Foo"</tt> create only sublabels under <tt>"Foo"</tt> and not a mixture with root labels.</li>
|
||||
<li><b>Bug fix</b>: <tt>--subfolder2 "Pf2/Sub2"</tt> and <tt>--subfolder2 "Sub2"</tt> perform the same when <tt>"Pf2"</tt> is the prefix of host2</li>
|
||||
<li><b>Bug fix</b>: imapsync now syncs messages whatever their proclaimed size are.
|
||||
(ProtonMail Bridge 1.1.3
|
||||
<a href="https://github.com/imapsync/imapsync/issues/163#issuecomment-480800242"
|
||||
>does RFC822.SIZE null for all messages</a>).</li>
|
||||
|
||||
<li><b>Refactoring</b>: Fixed some perl critics.</li>
|
||||
<li><b>Refactoring</b>: Deglobalized some variables</li>
|
||||
|
||||
<li><b>Security</b>: Sanitized --subfolder1 and --subfolder2 values.</li>
|
||||
|
||||
|
||||
<li><b>Portability</b>: Upgraded Mac binary to handle TLSv1.2</li>
|
||||
|
||||
<li><b>Dependency added</b>: Perl modules Text::ParseWords and File::Tail
|
||||
|
||||
</li>
|
||||
|
||||
<li><b>Roadmap</b>: Will add <tt>--subfolder1</tt> and <tt>--subfolder2</tt> parameters to /X in order to make backup/restore syncs.</li>
|
||||
|
||||
</ul>
|
||||
|
||||
<ul>
|
||||
<li><b>1.921</b> (2019/02/18) </li>
|
||||
<li><b>Enhancement</b>: Script <a href="../examples/sync_parallel_unix.sh">sync_parallel_unix.sh</a> to parallelize massive syncs.
|
||||
It uses the powerful GNU <tt>parallel</tt> command.
|
||||
</li>
|
||||
@ -93,8 +211,8 @@ It uses the powerful GNU <tt>parallel</tt> command.
|
||||
</li>
|
||||
<li><b>Enhancement</b>: Option <tt>--synclabels</tt> is activated with <tt>--gmail1 --gmail2</tt> used together.</li>
|
||||
|
||||
<li><b>Portability</b>: The imapsync script <a href="https://en.wikipedia.org/wiki/Shebang_(Unix)">Shebang</a> (first line of imapsync) uses <tt>env</tt> now,
|
||||
instead of direct perl path.
|
||||
<li><b>Portability</b>: The imapsync script <a href="https://en.wikipedia.org/wiki/Shebang_(Unix)">Shebang</a>
|
||||
(first line of imapsync) uses <tt>env</tt> now, instead of direct perl path.
|
||||
I'm not sure it's a good change that
|
||||
<tt>#!/usr/bin/perl</tt> becomes <tt>#!/usr/bin/env perl</tt></li>
|
||||
|
||||
@ -134,7 +252,7 @@ It uses the powerful GNU <tt>parallel</tt> command.
|
||||
|
||||
|
||||
|
||||
<li><b>Usability</b>: Added PPID info where PID is printed. Can be useful in some contextes, CGI, embeded, debugging etc.</li>
|
||||
<li><b>Usability</b>: Added PPID info where PID is printed. Unix only. Can be useful in some contextes, CGI, embeded, debugging etc.</li>
|
||||
|
||||
|
||||
|
||||
@ -703,7 +821,7 @@ by ignoring PERMANENTFLAGS (Exchange tests)</li>
|
||||
<!--#config timefmt="%D" -->
|
||||
<!--#config timefmt="%A %B %d, %Y" -->
|
||||
<b>This document last modified on <!--#echo var="LAST_MODIFIED" --></b>
|
||||
($Id: news.shtml,v 1.59 2019/02/17 14:34:36 gilles Exp gilles $)<br />
|
||||
($Id: news.shtml,v 1.67 2019/06/25 21:33:09 gilles Exp gilles $)<br />
|
||||
<a href="#TOP">Top of the page</a>
|
||||
</p>
|
||||
</body></html>
|
||||
|
139
TODO
139
TODO
@ -1,5 +1,5 @@
|
||||
#!/bin/cat
|
||||
# $Id: TODO,v 1.203 2018/11/26 11:50:08 gilles Exp gilles $
|
||||
# $Id: TODO,v 1.215 2019/06/20 10:12:00 gilles Exp gilles $
|
||||
|
||||
This documentation is also at http://imapsync.lamiral.info/#doc
|
||||
|
||||
@ -8,9 +8,50 @@ TODO file for imapsync
|
||||
----------------------
|
||||
|
||||
|
||||
SUGGESTED 2018_11_20 by Gilles
|
||||
Count the messages that are on host2 but not on host1.
|
||||
SUGGESTED 2019_06_18 by Konrad Wawryn
|
||||
Add NTLMv2 support
|
||||
It shouldn't be that hard to support NTLMv2 because
|
||||
the underlying NTLM module can do it already.
|
||||
Delegate all the stuff to underlying Mail-IMAPClient.
|
||||
|
||||
SUGGESTED 2019_06_05 by Gilles
|
||||
Code equivalent W/tools/fix_email_for_exchange.py
|
||||
inside imapsync
|
||||
|
||||
SUGGESTED 2019_04_10 by Gilles
|
||||
With signals show also their numbers
|
||||
https://perldoc.perl.org/Config.html
|
||||
|
||||
SUGGESTED 2019_04_03 by Katja Wolf and Gilles
|
||||
Put a summary like the one in the log file
|
||||
in the source and the destination mailbox.
|
||||
|
||||
SUGGESTED 2019_03_19 by Gilles
|
||||
In the final errors listing, add lines
|
||||
* Host1 banner
|
||||
* Host2 banner
|
||||
* Command line parameters
|
||||
I'm a little fade up to ask them
|
||||
in order to understand the context
|
||||
|
||||
|
||||
SUGGESTED 2019_03_04 by Gilles
|
||||
Write a FAQ about deciphering with imapsync.
|
||||
Test it!
|
||||
If the encryption is made using gpg
|
||||
then the decryption via --pipemess could be just the command:
|
||||
imapsync ... --pipemess 'gpg --decrypt --no-batch --no-tty --override-session-key 9:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
|
||||
where you previously ran:
|
||||
gpg --decrypt --no-batch --show-session-key some_rfc822_filecrypted.txt
|
||||
in order to get the session-key "9:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
||||
|
||||
SUGGESTED 2019_02_28 by Gilles
|
||||
Default tmpdir could become ./TMP_imapsync
|
||||
for --usecache if there is no cache in the
|
||||
historical tmpdir File::Spec->tmpdir( )
|
||||
Why? Some systems like Windows do change
|
||||
their tmpdir upon reboot.
|
||||
Some Unixes do remove their /tmp upon reboot.
|
||||
|
||||
|
||||
SUGGESTED 2018_09_11 by Gilles
|
||||
@ -22,15 +63,6 @@ Take a look at
|
||||
Test::NoWarnings
|
||||
Test::Warn
|
||||
|
||||
SUGGESTED 2018_09_01 by Gilles
|
||||
Count messages on host2 that are not in host1 and
|
||||
then calculate a final count saying if the sync looks complete:
|
||||
msgs1_single + msgs1_dup + msgs_copied ?== msg2s_single + msg2s_dup + msg2s_not_in1
|
||||
|
||||
SUGGESTED 2018_06_29 by Michael Hesse
|
||||
Remove the warning on Windows
|
||||
“No such signal: SIGUSR1 at script/imapsync line 11744.”
|
||||
|
||||
SUGGESTED 2018_05_15 by Massimo Maggi
|
||||
https://github.com/imapsync/imapsync/issues/141
|
||||
Document --skipcrossduplicates and --debugcrossduplicates in imapsync --help
|
||||
@ -46,7 +78,7 @@ See draft in sub info_date_from_uid
|
||||
|
||||
SUGGESTED 2017_09_04 by Gilles
|
||||
STDOUT instead of STDERR with Mail::IMAPClient output.
|
||||
Shoulbe easy using $imap->Debug_fh($fileHandle);
|
||||
Shoul be easy using $imap->Debug_fh($fileHandle);
|
||||
|
||||
|
||||
SUGGESTED 2017_08_31 by Gilles
|
||||
@ -80,10 +112,12 @@ SUGGESTED 2017_04_26 by Franco Fassio
|
||||
Check that --maxbyteperseconds does not interfer with --timeout
|
||||
by sleeping too long.
|
||||
|
||||
DONE by Gilles revision 1.795 date: 2017/04/22
|
||||
SUGGESTED 2016_12_01 by Gilles
|
||||
When working under with webmin and virtualmin imapsync
|
||||
acts as a cgi, it should not. Find a way to avoid cgi mode
|
||||
even under a web server.
|
||||
even under a web server. Solution: edit the sub under_cgi_context()
|
||||
|
||||
|
||||
SUGGESTED 2016_11_16 by Flávio Zarur Lucarelli LucaNet Sistemas
|
||||
Getting subjects of messages for duplicates and print them.
|
||||
@ -184,15 +218,6 @@ SUGGESTED 2016_06_22 by Gilles
|
||||
Add --quiet mode
|
||||
Make --quiet mode being switched by a signal
|
||||
|
||||
SUGGESTED by Gilles
|
||||
Try to act as --tls if CAPABILITY allows it and if there is no --notls.
|
||||
Fallback without --tls if --tls fails.
|
||||
|
||||
DONE 2016_07_27 by Gilles
|
||||
SUGGESTED 2016_06_15 by Gilles
|
||||
Fix sub check_lib_version and its call.
|
||||
It was ok because of the Perl line "use Mail::IMAPClient 3.30".
|
||||
|
||||
SUGGESTED 2016_06_12 by Gilles
|
||||
Fix many perlcritic, all?
|
||||
DONE * 60 perlcritic Double-sigil dereference (Severity 2)
|
||||
@ -200,21 +225,7 @@ DONE * 627 perlcritic violations of CodeLayout::ProhibitTrailingWhitespace. (Sev
|
||||
DONE * 458 perlcritic violations of ValuesAndExpressions::ProhibitInterpolationOfLiterals. "Useless interpolation of literal string"
|
||||
DONE * 420 perlcritic violations of CodeLayout::ProhibitParensWithBuiltins. "Builtin function called with parentheses". (Severity: 1).
|
||||
|
||||
* 304 violations of ValuesAndExpressions::ProhibitMagicNumbers.
|
||||
* 236 violations of InputOutput::RequireCheckedSyscalls. "Return value of flagged function ignored". (Severity: 1).
|
||||
* 115 violations of ControlStructures::ProhibitPostfixControls. Postfix control "if" used. (Severity: 2).
|
||||
* 90 violations of ValuesAndExpressions::ProhibitNoisyQuotes.
|
||||
* 86 violations of ValuesAndExpressions::RequireInterpolationOfMetachars.
|
||||
* 85 violations of RegularExpressions::RequireLineBoundaryMatching.
|
||||
* 85 violations of RegularExpressions::RequireDotMatchAnything.
|
||||
* 37 violations of Variables::ProhibitPunctuationVars.
|
||||
* 30 violations of RegularExpressions::RequireExtendedFormatting.
|
||||
* 30 violations of NamingConventions::Capitalization.
|
||||
* 24 violations of ValuesAndExpressions::RequireNumberSeparators.
|
||||
* 20 violations of RegularExpressions::ProhibitEscapedMetacharacters.
|
||||
* 19 violations of ControlStructures::ProhibitUnlessBlocks.
|
||||
* 14 violations of Variables::ProhibitReusedNames.
|
||||
* 11 violations of Subroutines::ProhibitManyArgs.
|
||||
|
||||
|
||||
SUGGESTED 2016_06_09 by Gilles and David Carter
|
||||
In order to avoid useless headaches from --regexmess, add
|
||||
@ -353,8 +364,6 @@ http://www.microsoft.com/download/en/details.aspx?id=1329 "Microsoft Transporter
|
||||
Add --mark-as-deleted1 --mark-as-deleted2 as
|
||||
aliases for --noexpunge1 --delete1 and --noexpunge2 --delete2
|
||||
|
||||
Move --help documentation into the man page so that description is easier to find.
|
||||
|
||||
Fix bug found by Pavel Stano on 01/06/2012 (june) imapsync never stop login
|
||||
when login fails with a "* BYE Temp error" from server.
|
||||
|
||||
@ -365,7 +374,7 @@ Fix long path over than 260 character on Win32 with --usecache
|
||||
Fix inode crunching with --usecache
|
||||
Think about Digest::SHA or Digest::SHA::PurePerl.
|
||||
Think about a file database like DBM instead.
|
||||
Look at https://en.wikipedia.org/wiki/Radix_tree (David M advice)
|
||||
Look at https://en.wikipedia.org/wiki/Radix_tree (David M. advice)
|
||||
Look at leveldb (Simon Th actux advice)
|
||||
Look at http://fallabs.com/kyotocabinet/ (JYB advice)
|
||||
Also Redis (Ludovic Danigo advice)
|
||||
@ -440,6 +449,38 @@ http://asg.web.cmu.edu/cyrus/download/imapd/altnamespace.html
|
||||
Now the TODO done! (or not)
|
||||
===========================================================================
|
||||
|
||||
DONE 2019_04_28 by Gilles
|
||||
SUGGESTED 2016_10_03 by Gilles
|
||||
Do like tail -F on logfile when
|
||||
"another imapsync may be curently running",
|
||||
instead of quit.
|
||||
Add --tail --notail and --tail on by default in cgi context.
|
||||
|
||||
DONE 2019_04_27 by Gilles
|
||||
SUGGESTED 2019_04_25 by Gilles
|
||||
Add length of $cache_dir to
|
||||
Local cache directory: $cache_dir
|
||||
|
||||
DONE 2019_04_08 by Gilles
|
||||
SUGGESTED 2019_03_06 by Gilles
|
||||
when exit by signal, exit by sending a signal to itself:
|
||||
How to be a proper program
|
||||
https://www.cons.org/cracauer/sigint.html
|
||||
|
||||
|
||||
DONE 2018_11_20 by Gilles
|
||||
Count the messages that are on host2 but not on host1.
|
||||
(hum... see DONE 2018_09_01)
|
||||
|
||||
DONE 2018_09_01 by Gilles
|
||||
Count messages on host2 that are not in host1
|
||||
|
||||
DONE 2018/04/18 revision 1.875 by Gilles
|
||||
SUGGESTED 2018_06_29 by Michael Hesse
|
||||
Remove the warning on Windows
|
||||
“No such signal: SIGUSR1 at script/imapsync line 11744.”
|
||||
|
||||
|
||||
DONE 2017_11_29 by Gilles
|
||||
SUGGESTED 2017_04_11 by Stefano Lo Cascio
|
||||
Add a --resyncflags on by default but allowing --noresyncflags
|
||||
@ -468,6 +509,11 @@ Add --exchange --office365 to set automatically advices from
|
||||
https://imapsync.lamiral.info/FAQ.d/FAQ.Exchange.txt
|
||||
Add --domino1 --domino2
|
||||
|
||||
DONE by Gilles revision 1.755 date: 2017/01/12
|
||||
SUGGESTED by Gilles
|
||||
Try to act as --tls if CAPABILITY allows it and if there is no --notls.
|
||||
Fallback without --tls if --tls fails.
|
||||
|
||||
DONE 2016_09_29 by Gilles
|
||||
SUGGESTED 2016_04_13 by Gilles
|
||||
Split --noabletosearch in --noabletosearch1 --noabletosearch2
|
||||
@ -477,6 +523,12 @@ SUGGESTED 2016_09_29 by Gilles
|
||||
DONE with revision 1.764 2017/01/19
|
||||
Try to use TLS or SSL by default unless not asked to do so.
|
||||
|
||||
DONE 2016_07_27 by Gilles
|
||||
SUGGESTED 2016_06_15 by Gilles
|
||||
Fix sub check_lib_version and its call.
|
||||
It was ok because of the Perl line "use Mail::IMAPClient 3.30".
|
||||
|
||||
|
||||
|
||||
SUGGESTED 2016_06_22 by Gilles
|
||||
DONE 2016_07_29 by Gilles
|
||||
@ -502,6 +554,9 @@ Add exit explanation after errorsdump
|
||||
|
||||
DONE 2016_01_06. Write a Unix tutorial, TUTORIAL_Unix.html.
|
||||
|
||||
DONE by Gilles revision 1.677 date: 2016/01/19
|
||||
Move --help documentation into the man page so that description is easier to find.
|
||||
|
||||
DONE 2015_12_26. WANTED 2015_03_24
|
||||
Add --sslargs with usage like:
|
||||
imapsync ... --sslargs 'SSL_version=SSLv3' --sslargs 'SSL_use_cert=1' \
|
||||
@ -571,7 +626,7 @@ Usage: --maxlinelength 9900 maxlinelengthcmd 'reformime -r7'
|
||||
|
||||
DONE. Add DavMail in Similar Softwares section. http://davmail.sourceforge.net/
|
||||
|
||||
DONE. Convert folder names to utf-8 and print them next to the uft-7 ones.
|
||||
DONE. Convert folder names to utf-8 and print them next to the utf-7 ones.
|
||||
Look at imapsync/W/learn/
|
||||
./imap_utf7 data_utf7
|
||||
|
||||
|
@ -637,3 +637,63 @@
|
||||
1550493338 END 1.921 : lundi 18 février 2019, 13:35:38 (UTC+0100)
|
||||
1550493338 BEGIN 64bit 1.921 : lundi 18 février 2019, 13:35:38 (UTC+0100)
|
||||
1550493671 END 64bit 1.921 : lundi 18 février 2019, 13:41:11 (UTC+0100)
|
||||
1551276097 BEGIN 64bit 1.922 : mercredi 27 février 2019, 15:01:37 (UTC+0100)
|
||||
1551276382 END 64bit 1.922 : mercredi 27 février 2019, 15:06:22 (UTC+0100)
|
||||
1551279995 BEGIN 1.922 : mercredi 27 février 2019, 16:06:35 (UTC+0100)
|
||||
1551281318 END 1.922 : mercredi 27 février 2019, 16:28:38 (UTC+0100)
|
||||
1553344520 BEGIN 1.927 : samedi 23 mars 2019, 13:35:20 (UTC+0100)
|
||||
1553345844 END 1.927 : samedi 23 mars 2019, 13:57:24 (UTC+0100)
|
||||
1553345844 BEGIN 64bit 1.927 : samedi 23 mars 2019, 13:57:24 (UTC+0100)
|
||||
1553347859 BEGIN 64bit 1.927 : samedi 23 mars 2019, 14:30:59 (UTC+0100)
|
||||
1553347950 BEGIN 64bit 1.927 : samedi 23 mars 2019, 14:32:30 (UTC+0100)
|
||||
1553348266 END 64bit 1.927 : samedi 23 mars 2019, 14:37:46 (UTC+0100)
|
||||
1553772623 BEGIN 1.928 : jeudi 28 mars 2019, 12:30:23 (UTC+0100)
|
||||
1553773942 END 1.928 : jeudi 28 mars 2019, 12:52:22 (UTC+0100)
|
||||
1553773942 BEGIN 64bit 1.928 : jeudi 28 mars 2019, 12:52:22 (UTC+0100)
|
||||
1553774220 END 64bit 1.928 : jeudi 28 mars 2019, 12:57:00 (UTC+0100)
|
||||
1555022344 BEGIN 1.930 : vendredi 12 avril 2019, 00:39:04 (UTC+0200)
|
||||
1555023694 END 1.930 : vendredi 12 avril 2019, 01:01:34 (UTC+0200)
|
||||
1555023694 BEGIN 64bit 1.930 : vendredi 12 avril 2019, 01:01:34 (UTC+0200)
|
||||
1555024099 END 64bit 1.930 : vendredi 12 avril 2019, 01:08:19 (UTC+0200)
|
||||
1555172099 BEGIN 1.931 : samedi 13 avril 2019, 18:14:59 (UTC+0200)
|
||||
1555174250 END 1.931 : samedi 13 avril 2019, 18:50:50 (UTC+0200)
|
||||
1555174250 BEGIN 64bit 1.931 : samedi 13 avril 2019, 18:50:50 (UTC+0200)
|
||||
1555174461 END 64bit 1.931 : samedi 13 avril 2019, 18:54:21 (UTC+0200)
|
||||
1555692711 BEGIN 1.932 : vendredi 19 avril 2019, 18:51:52 (UTC+0200)
|
||||
1555693944 END 1.932 : vendredi 19 avril 2019, 19:12:24 (UTC+0200)
|
||||
1555693944 BEGIN 64bit 1.932 : vendredi 19 avril 2019, 19:12:24 (UTC+0200)
|
||||
1556423792 BEGIN 1.935 : dimanche 28 avril 2019, 05:56:32 (UTC+0200)
|
||||
1556424470 BEGIN 1.935 : dimanche 28 avril 2019, 06:07:50 (UTC+0200)
|
||||
1556424717 BEGIN 1.935 : dimanche 28 avril 2019, 06:11:57 (UTC+0200)
|
||||
1556510637 BEGIN 64bit 1.935 : lundi 29 avril 2019, 06:03:57 (UTC+0200)
|
||||
1556510687 BEGIN 64bit 1.935 : lundi 29 avril 2019, 06:04:47 (UTC+0200)
|
||||
1556510711 BEGIN 1.935 : lundi 29 avril 2019, 06:05:11 (UTC+0200)
|
||||
1556512550 BEGIN 64bit 1.935 : lundi 29 avril 2019, 06:35:50 (UTC+0200)
|
||||
1556514236 BEGIN 1.935 : lundi 29 avril 2019, 07:03:56 (UTC+0200)
|
||||
1556515512 BEGIN 1.935 : lundi 29 avril 2019, 07:25:12 (UTC+0200)
|
||||
1556515981 BEGIN 1.936 : lundi 29 avril 2019, 07:33:01 (UTC+0200)
|
||||
1556517503 END 1.936 : lundi 29 avril 2019, 07:58:23 (UTC+0200)
|
||||
1556517503 BEGIN 64bit 1.936 : lundi 29 avril 2019, 07:58:23 (UTC+0200)
|
||||
1556517802 END 64bit 1.936 : lundi 29 avril 2019, 08:03:22 (UTC+0200)
|
||||
1556795946 BEGIN 1.937 : jeudi 2 mai 2019, 13:19:06 (UTC+0200)
|
||||
1556797196 END 1.937 : jeudi 2 mai 2019, 13:39:56 (UTC+0200)
|
||||
1556797196 BEGIN 64bit 1.937 : jeudi 2 mai 2019, 13:39:56 (UTC+0200)
|
||||
1556797521 END 64bit 1.937 : jeudi 2 mai 2019, 13:45:21 (UTC+0200)
|
||||
1558993720 BEGIN 1.938 : lundi 27 mai 2019, 23:48:41 (UTC+0200)
|
||||
1558995018 END 1.938 : mardi 28 mai 2019, 00:10:18 (UTC+0200)
|
||||
1558995018 BEGIN 64bit 1.938 : mardi 28 mai 2019, 00:10:18 (UTC+0200)
|
||||
1558995347 END 64bit 1.938 : mardi 28 mai 2019, 00:15:47 (UTC+0200)
|
||||
1559041754 BEGIN 64bit 1.939 : mardi 28 mai 2019, 13:09:14 (UTC+0200)
|
||||
1559042130 END 64bit 1.939 : mardi 28 mai 2019, 13:15:30 (UTC+0200)
|
||||
1559042228 BEGIN 64bit 1.939 : mardi 28 mai 2019, 13:17:08 (UTC+0200)
|
||||
1559048685 BEGIN 64bit 1.939 : mardi 28 mai 2019, 15:04:45 (UTC+0200)
|
||||
1559048999 END 64bit 1.939 : mardi 28 mai 2019, 15:09:59 (UTC+0200)
|
||||
1561482028 BEGIN 1.944 : mardi 25 juin 2019, 19:00:28 (UTC+0200)
|
||||
1561483425 END 1.944 : mardi 25 juin 2019, 19:23:45 (UTC+0200)
|
||||
1561483425 BEGIN 64bit 1.944 : mardi 25 juin 2019, 19:23:45 (UTC+0200)
|
||||
1561485269 BEGIN 64bit 1.944 : mardi 25 juin 2019, 19:54:29 (UTC+0200)
|
||||
1561485610 END 64bit 1.944 : mardi 25 juin 2019, 20:00:10 (UTC+0200)
|
||||
1561591178 BEGIN 1.945 : jeudi 27 juin 2019, 01:19:38 (UTC+0200)
|
||||
1561592446 END 1.945 : jeudi 27 juin 2019, 01:40:46 (UTC+0200)
|
||||
1561592446 BEGIN 64bit 1.945 : jeudi 27 juin 2019, 01:40:46 (UTC+0200)
|
||||
1561592761 END 64bit 1.945 : jeudi 27 juin 2019, 01:46:01 (UTC+0200)
|
||||
|
47
W/.compok
47
W/.compok
@ -67,3 +67,50 @@ mercredi 6 février 2019, 14:02:24 (UTC+0100)
|
||||
jeudi 7 février 2019, 13:56:24 (UTC+0100)
|
||||
jeudi 14 février 2019, 18:27:42 (UTC+0100)
|
||||
lundi 18 février 2019, 23:52:36 (UTC+0100)
|
||||
mercredi 27 février 2019, 16:20:41 (UTC+0100)
|
||||
dimanche 3 mars 2019, 19:42:11 (UTC+0100)
|
||||
vendredi 22 mars 2019, 16:33:19 (UTC+0100)
|
||||
lundi 25 mars 2019, 18:57:57 (UTC+0100)
|
||||
mardi 26 mars 2019, 12:30:43 (UTC+0100)
|
||||
lundi 1 avril 2019, 01:17:29 (UTC+0200)
|
||||
lundi 1 avril 2019, 20:09:43 (UTC+0200)
|
||||
mardi 2 avril 2019, 21:10:12 (UTC+0200)
|
||||
mercredi 3 avril 2019, 01:09:15 (UTC+0200)
|
||||
mardi 9 avril 2019, 12:56:28 (UTC+0200)
|
||||
mardi 9 avril 2019, 17:11:22 (UTC+0200)
|
||||
mercredi 10 avril 2019, 17:34:10 (UTC+0200)
|
||||
mercredi 10 avril 2019, 18:11:30 (UTC+0200)
|
||||
mercredi 10 avril 2019, 18:19:37 (UTC+0200)
|
||||
mercredi 10 avril 2019, 18:27:57 (UTC+0200)
|
||||
mercredi 10 avril 2019, 18:31:03 (UTC+0200)
|
||||
mercredi 10 avril 2019, 18:32:13 (UTC+0200)
|
||||
mercredi 10 avril 2019, 18:38:13 (UTC+0200)
|
||||
mercredi 10 avril 2019, 19:08:42 (UTC+0200)
|
||||
vendredi 12 avril 2019, 03:13:33 (UTC+0200)
|
||||
samedi 13 avril 2019, 18:01:03 (UTC+0200)
|
||||
samedi 13 avril 2019, 19:01:23 (UTC+0200)
|
||||
vendredi 19 avril 2019, 17:08:45 (UTC+0200)
|
||||
vendredi 26 avril 2019, 11:05:36 (UTC+0200)
|
||||
vendredi 26 avril 2019, 11:40:46 (UTC+0200)
|
||||
vendredi 26 avril 2019, 15:03:14 (UTC+0200)
|
||||
dimanche 28 avril 2019, 04:53:37 (UTC+0200)
|
||||
lundi 29 avril 2019, 16:45:47 (UTC+0200)
|
||||
mardi 30 avril 2019, 13:47:11 (UTC+0200)
|
||||
mercredi 1 mai 2019, 13:07:09 (UTC+0200)
|
||||
mercredi 1 mai 2019, 13:10:34 (UTC+0200)
|
||||
mercredi 8 mai 2019, 22:38:01 (UTC+0200)
|
||||
lundi 27 mai 2019, 20:54:29 (UTC+0200)
|
||||
mardi 28 mai 2019, 01:28:06 (UTC+0200)
|
||||
mercredi 5 juin 2019, 18:26:32 (UTC+0200)
|
||||
jeudi 6 juin 2019, 02:04:34 (UTC+0200)
|
||||
jeudi 6 juin 2019, 02:11:48 (UTC+0200)
|
||||
jeudi 6 juin 2019, 02:16:38 (UTC+0200)
|
||||
jeudi 6 juin 2019, 16:04:46 (UTC+0200)
|
||||
jeudi 20 juin 2019, 16:32:12 (UTC+0200)
|
||||
mardi 25 juin 2019, 00:47:36 (UTC+0200)
|
||||
mardi 25 juin 2019, 10:26:28 (UTC+0200)
|
||||
mardi 25 juin 2019, 10:39:18 (UTC+0200)
|
||||
mardi 25 juin 2019, 10:46:03 (UTC+0200)
|
||||
mardi 25 juin 2019, 18:52:01 (UTC+0200)
|
||||
mercredi 26 juin 2019, 17:34:23 (UTC+0200)
|
||||
mercredi 26 juin 2019, 21:32:34 (UTC+0200)
|
||||
|
1199
W/.tests.errors.txt
1199
W/.tests.errors.txt
File diff suppressed because it is too large
Load Diff
0
W/.valid.index.shtml
Normal file
0
W/.valid.index.shtml
Normal file
@ -5,12 +5,41 @@ Changes from 2.99_01 to 3.16 made by Mark Overmeer
|
||||
Changes from 0.09 to 2.99_01 made by David Kernen
|
||||
- Potential compatibility issues from 3.17+ highlighted with '*'
|
||||
|
||||
version 3.40: Thu Dec 6 01:44:16 UTC 2018
|
||||
- rt.cpan.org#122373 support IPv6 by using IO::Socket::IP over IO::Socket::INET
|
||||
version 3.42: Sun Feb 24 00:43:29 UTC 2019
|
||||
- rt.cpan.org#12859: has_capability() changes in 3.41 broke imap4rev1()
|
||||
[Gilles Lamiral and Gábor Leszlauer]
|
||||
- updated http:// to https:// URLs for referenced resources
|
||||
- updated copyright for 2019
|
||||
|
||||
version 3.41: Thu Feb 21 01:47:42 UTC 2019
|
||||
- rt.cpan.org#128220: unseen(), messages() and related POD cleanup
|
||||
[Dan Jacobson]
|
||||
- rt.cpan.org#128264: parse_message() minor code/POD cleanup
|
||||
[Dan Jacobson]
|
||||
- rt.cpan.org#128215: verb missing in messages() POD
|
||||
[Gilles Lamiral and Dan Jacobson]
|
||||
- rt.cpan.org#127271: simplify capability handling via has_capability enhancements
|
||||
+* has_capability() success returns(true) with server response data, not always '1'
|
||||
+ enhanced t/capability.t test cases
|
||||
+ updated POD for capability() and has_capability()
|
||||
[Gilles Lamiral and Mark Overmeer]
|
||||
- rt.cpan.org#127103 flags() undef value as an ARRAY reference on a bogus message
|
||||
- rt.cpan.org#122373: use of IO::Socket::IP led to connect(empty args) regression
|
||||
[Gilles Lamiral]
|
||||
- rt.cpan.org#124523 update examples/populate_mailbox.pl timegm usage
|
||||
- rt.cpan.org#128127: fix minor POD typo for search()
|
||||
[Gregor Herrmann]
|
||||
- folders()/subscribed() remove mailboxes with \Noselect attribute
|
||||
[Ashley Willis]
|
||||
- fetch_hash() remove quotes around header names (seen w/outlook.com)
|
||||
[Ashley Willis]
|
||||
- use first over grep for minor efficiency gains
|
||||
- other minor POD cleanup
|
||||
|
||||
version 3.40: Thu Dec 6 01:44:16 UTC 2018
|
||||
- rt.cpan.org#122373: support IPv6 by using IO::Socket::IP over IO::Socket::INET
|
||||
[Gilles Lamiral and Mark Overmeer]
|
||||
- rt.cpan.org#127103: flags() undef value as an ARRAY reference on a bogus message
|
||||
[Gilles Lamiral]
|
||||
- rt.cpan.org#124523: update examples/populate_mailbox.pl timegm usage
|
||||
[Bernhard M. W.]
|
||||
- t/capability.t: added first set of tests
|
||||
- t/quota.t: minor fix when tests skipped
|
@ -50,8 +50,8 @@
|
||||
},
|
||||
"release_status" : "stable",
|
||||
"resources" : {
|
||||
"homepage" : "http://sourceforge.net/projects/mail-imapclient/"
|
||||
"homepage" : "https://sourceforge.net/projects/mail-imapclient/"
|
||||
},
|
||||
"version" : "3.40",
|
||||
"version" : "3.42",
|
||||
"x_serialization_backend" : "JSON::PP version 2.97001"
|
||||
}
|
@ -32,6 +32,6 @@ requires:
|
||||
Test::More: '0'
|
||||
perl: '5.008'
|
||||
resources:
|
||||
homepage: http://sourceforge.net/projects/mail-imapclient/
|
||||
version: '3.40'
|
||||
homepage: https://sourceforge.net/projects/mail-imapclient/
|
||||
version: '3.42'
|
||||
x_serialization_backend: 'CPAN::Meta::YAML version 0.018'
|
@ -30,9 +30,8 @@ if (@missing) {
|
||||
|
||||
print <<'MSG';
|
||||
Optional modules are available from any CPAN mirror, reference:
|
||||
http://search.cpan.org/
|
||||
http://www.perl.com/CPAN/modules/by-module
|
||||
http://www.perl.org/CPAN/modules/by-module
|
||||
https://metacpan.org/
|
||||
https://www.cpan.org/modules/by-module/
|
||||
|
||||
MSG
|
||||
sleep 3;
|
||||
@ -66,13 +65,13 @@ WriteMakefile(
|
||||
resources => {
|
||||
bugtracker => {
|
||||
web =>
|
||||
'http://rt.cpan.org/Public/Dist/Display.html?Name=Mail-IMAPClient',
|
||||
'https://rt.cpan.org/Public/Dist/Display.html?Name=Mail-IMAPClient',
|
||||
mailto => 'bug-Mail-IMAPClient@rt.cpan.org',
|
||||
},
|
||||
homepage => 'http://sourceforge.net/projects/mail-imapclient/',
|
||||
homepage => 'https://sourceforge.net/projects/mail-imapclient/',
|
||||
repository => {
|
||||
url => 'git://git.code.sf.net/p/mail-imapclient/git',
|
||||
web => 'http://sourceforge.net/p/mail-imapclient/git/',
|
||||
web => 'https://sourceforge.net/p/mail-imapclient/git/',
|
||||
type => 'git',
|
||||
},
|
||||
},
|
@ -8,9 +8,9 @@ DEPENDENCIES
|
||||
The following are the minimum requirements for using Mail::IMAPClient:
|
||||
|
||||
- Perl 5.8
|
||||
http://www.perl.org/
|
||||
https://www.perl.org/
|
||||
- Perl modules from CPAN:
|
||||
http://search.cpan.org/
|
||||
https://metacpan.org/
|
||||
Required:
|
||||
List::Util
|
||||
MIME::Base64
|
||||
@ -23,13 +23,13 @@ The following are the minimum requirements for using Mail::IMAPClient:
|
||||
Digest::MD5
|
||||
IO::Socket::SSL
|
||||
- RFC 3501 (IMAP4REV1) compatible IMAP server
|
||||
http://www.faqs.org/rfcs/rfc3501.html
|
||||
https://tools.ietf.org/html/rfc3501
|
||||
- Mail::IMAPClient (this package)
|
||||
|
||||
INSTALLATION
|
||||
============
|
||||
1. Download Mail::IMAPClient module
|
||||
http://search.cpan.org/dist/Mail-IMAPClient/
|
||||
https://metacpan.org/release/Mail-IMAPClient
|
||||
|
||||
2. Read this README
|
||||
|
||||
@ -72,19 +72,18 @@ port=143
|
||||
Project Links
|
||||
=============
|
||||
- Bugs/tickets:
|
||||
http://rt.cpan.org/Public/Dist/Display.html?Name=Mail-IMAPClient
|
||||
https://rt.cpan.org/Public/Dist/Display.html?Name=Mail-IMAPClient
|
||||
- Source code repository (git):
|
||||
http://sourceforge.net/p/mail-imapclient/git/
|
||||
https://sourceforge.net/p/mail-imapclient/git/
|
||||
https://github.com/plobbes/mail-imapclient/
|
||||
- CPAN releases:
|
||||
http://search.cpan.org/dist/Mail-IMAPClient/
|
||||
- Project website
|
||||
http://sourceforge.net/projects/mail-imapclient/
|
||||
https://metacpan.org/release/Mail-IMAPClient
|
||||
|
||||
COPYRIGHT AND LICENSE
|
||||
=====================
|
||||
Copyright (C) 1999-2003 The Kernen Group, Inc.
|
||||
Copyright (C) 2007-2009 Mark Overmeer
|
||||
Copyright (C) 2010-2017 Phil Pearl (Lobbes)
|
||||
Copyright (C) 2010-2019 Phil Pearl (Lobbes)
|
||||
All rights reserved.
|
||||
|
||||
This library is free software; you can redistribute it and/or modify
|
@ -7,7 +7,7 @@ use strict;
|
||||
use warnings;
|
||||
|
||||
package Mail::IMAPClient;
|
||||
our $VERSION = '3.40';
|
||||
our $VERSION = '3.42';
|
||||
|
||||
use Mail::IMAPClient::MessageSet;
|
||||
|
||||
@ -331,7 +331,8 @@ sub connect(@) {
|
||||
push( @sockargs, @{ $self->Socketargs } );
|
||||
}
|
||||
|
||||
my $server = $self->Server;
|
||||
# if no server, use " " to induce a non-fatal error
|
||||
my $server = $self->Server || " ";
|
||||
my $port = $self->Port || $self->Port( $self->Ssl ? "993" : "143" );
|
||||
my ( $ioclass, $sock );
|
||||
|
||||
@ -717,6 +718,7 @@ sub _folders_or_subscribed {
|
||||
foreach my $resp (@list) {
|
||||
my $rec = $self->_list_or_lsub_response_parse($resp);
|
||||
next unless defined $rec->{name};
|
||||
next if first { lc($_) eq '\noselect' } @{ $rec->{attrs} };
|
||||
push @folders, $rec;
|
||||
}
|
||||
}
|
||||
@ -2248,6 +2250,11 @@ sub fetch_hash {
|
||||
while ( $l and $l !~ m/\G\s*\)\s*$/gc ) {
|
||||
if ( $l =~ m/\G\s*([^\s\[]+(?:\[[^\]]*\])?(?:<[^>]*>)?)\s*/gc ) {
|
||||
$key = uc($1);
|
||||
|
||||
# strip quotes around header names - seen w/outlook.com
|
||||
if ( $key =~ /^BODY\[HEADER\.FIELDS \("[^"]+".*?\)\]$/ ) {
|
||||
$key =~ s/"//g;
|
||||
}
|
||||
}
|
||||
elsif ( !defined $key ) {
|
||||
|
||||
@ -2537,8 +2544,7 @@ sub parse_headers {
|
||||
{ # start new message header
|
||||
( $msgid, my $msgattrs ) = ( $1, $2 );
|
||||
$h = {};
|
||||
if ( $self->Uid ) # undef when win2003
|
||||
{
|
||||
if ( $self->Uid ) { # undef when win2003
|
||||
$msgid = $msgattrs =~ m/\b UID \s+ (\d+)/x ? $1 : undef;
|
||||
}
|
||||
$headers{$msgid} = $h if $msgid;
|
||||
@ -2821,6 +2827,7 @@ sub uidnext {
|
||||
defined $line && $line =~ /\(UIDNEXT\s+([^\)]+)/ ? $1 : undef;
|
||||
}
|
||||
|
||||
# sort @caps for consistency?
|
||||
sub capability {
|
||||
my $self = shift;
|
||||
|
||||
@ -2832,10 +2839,18 @@ sub capability {
|
||||
$self->_imap_command('CAPABILITY')
|
||||
or return undef;
|
||||
|
||||
my @caps = map { split } grep s/^\*\s+CAPABILITY\s+//, $self->History;
|
||||
foreach (@caps) {
|
||||
$self->{CAPABILITY}{ uc $_ }++;
|
||||
$self->{ uc $1 } = uc $2 if /(.*?)\=(.*)/;
|
||||
my @caps = map { split } grep /^\*\s+CAPABILITY\s+/, $self->History;
|
||||
splice( @caps, 0, 2 ); # remove * CAPABILITY from array
|
||||
|
||||
# use iterator as we may append to @caps for CAPA=VALUE
|
||||
for ( my $i = 0 ; $i < @caps ; $i++ ) {
|
||||
$self->{CAPABILITY}->{ uc $caps[$i] } ||= [];
|
||||
my ( $capa, $cval ) = split( /=/, $caps[$i], 2 );
|
||||
if ( defined $cval ) {
|
||||
$capa = uc $capa;
|
||||
push( @caps, $capa ) unless exists $self->{CAPABILITY}->{$capa};
|
||||
push( @{ $self->{CAPABILITY}->{$capa} }, $cval );
|
||||
}
|
||||
}
|
||||
|
||||
return wantarray ? @caps : \@caps;
|
||||
@ -2846,7 +2861,23 @@ sub capability {
|
||||
sub has_capability {
|
||||
my ( $self, $which ) = @_;
|
||||
$self->capability or return undef;
|
||||
$which ? $self->{CAPABILITY}{ uc $which } : "";
|
||||
my $aref = [];
|
||||
|
||||
# exists in CAPABILITIES? possibly in CAPA=VALUE format?
|
||||
if ( defined $which ) {
|
||||
$which = uc $which;
|
||||
if ( exists $self->{CAPABILITY}{$which} ) {
|
||||
if ( @{ $self->{CAPABILITY}{$which} } ) {
|
||||
$aref = $self->{CAPABILITY}{$which};
|
||||
}
|
||||
else {
|
||||
$aref = [$which];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return @$aref if wantarray;
|
||||
return scalar @$aref ? $aref : "";
|
||||
}
|
||||
|
||||
sub imap4rev1 {
|
||||
@ -2926,9 +2957,9 @@ sub is_parent {
|
||||
}
|
||||
|
||||
if ($attrs) {
|
||||
return undef if grep { /\A\\NoInferiors\Z/i } @$attrs;
|
||||
return 1 if grep { /\A\\HasChildren\Z/i } @$attrs;
|
||||
return 0 if grep { /\A\\HasNoChildren\Z/i } @$attrs;
|
||||
return undef if first { lc($_) eq '\noinferiors' } @$attrs;
|
||||
return 1 if first { lc($_) eq '\haschildren' } @$attrs;
|
||||
return 0 if first { lc($_) eq '\hasnochildren' } @$attrs;
|
||||
}
|
||||
else {
|
||||
$self->_debug( join( "\n\t", "no attrs for '$folder' in:", @$list ) );
|
@ -215,8 +215,7 @@ Here are some examples:
|
||||
Password => $pass,
|
||||
Clear => 5, # Unnecessary since '5' is the default
|
||||
# ... # Other key=>value pairs go here
|
||||
)
|
||||
or die "Cannot connect to $host as $id: $@";
|
||||
) or die "Cannot connect to $host as $id: $@";
|
||||
|
||||
See also L</Parameters>, L</connect> and L</login> for more
|
||||
information on how to manually connect and login after B<new>.
|
||||
@ -604,7 +603,7 @@ before the date supplied as the argument to the B<before> method.
|
||||
Example:
|
||||
|
||||
my $string = $imap->body_string($msgId)
|
||||
or die "Could not body_string: ", $imap->LastError;
|
||||
or die "body_string failed: ", $imap->LastError;
|
||||
|
||||
The B<body_string> method accepts a message sequence number (or a
|
||||
message UID, if the L</Uid> parameter is set to true) as an argument
|
||||
@ -644,13 +643,13 @@ Example:
|
||||
my $features = $imap->capability
|
||||
or die "Could not determine capability: ", $imap->LastError;
|
||||
|
||||
The B<capability> method returns an array of capabilities as returned
|
||||
by the CAPABILITY IMAP Client command, or a reference to an array of
|
||||
capabilities if called in scalar context. If the CAPABILITY IMAP
|
||||
Client command fails for any reason then the B<capability> method will
|
||||
return C<undef>. Supported capabilities are cached by the client,
|
||||
however, this cache is deleted after a connection is set to
|
||||
I<Authenticated> and when L</starttls> is called.
|
||||
The B<capability> method returns an array (or arrayref in scalar
|
||||
context) of capabilities as returned by the CAPABILITY IMAP client
|
||||
command. If the CAPABILITY IMAP client command fails for any reason
|
||||
then the B<capability> method will return C<undef>. Supported
|
||||
capabilities are cached by the client, however, this cache is deleted
|
||||
after a connection is set to I<Authenticated> and when L</starttls> is
|
||||
called.
|
||||
|
||||
See also L</has_capability>.
|
||||
|
||||
@ -1107,8 +1106,8 @@ raw values back in this case.
|
||||
|
||||
Example:
|
||||
|
||||
my @flags = $imap->flags($msgid)
|
||||
or die "Could not flags: $@\n";
|
||||
my $flags = $imap->flags($msgid)
|
||||
or die "flags failed: $@\n";
|
||||
|
||||
The B<flags> method implements the FETCH IMAP client command to list a
|
||||
single message's flags. It accepts one argument, a message sequence
|
||||
@ -1295,11 +1294,48 @@ Example:
|
||||
my $has_feature = $imap->has_capability($feature)
|
||||
or die "Could not do has_capability($feature): $@\n";
|
||||
|
||||
Returns true if the IMAP server to which the IMAPClient object is
|
||||
connected has the capability specified as an argument to
|
||||
B<has_capability>. If the server does not have the capability then
|
||||
the empty string "" is returned, if the underlying L</capability>
|
||||
calls fails then undef is returned.
|
||||
Returns:
|
||||
|
||||
=over 4
|
||||
|
||||
=item C<undef>
|
||||
|
||||
If the underlying L</capability> calls fails then C<undef> is
|
||||
returned.
|
||||
|
||||
=item C<""> or C<()>
|
||||
|
||||
If the server does not have the requested capability, then either an
|
||||
empty string (C<""> in scalar context) or an empty list (C<()> in list
|
||||
context) is returned.
|
||||
|
||||
=item a I<true> value
|
||||
|
||||
If the server has the requested capability, then a I<true> value is
|
||||
returned. The I<true> value depends upon the server response for the
|
||||
capability requested. The value will be an array reference in scalar
|
||||
context or an array in list context. The returned data is useful for
|
||||
understanding more about specific capabilities. For example, consider
|
||||
the following server CAPABILITY response:
|
||||
|
||||
* CAPABILITY IMAP4rev1 SORT SORT=DISPLAY I18NLEVEL=1 AUTH=PLAIN AUTH=XTEST
|
||||
|
||||
Results are returned as shown by the trailing comments:
|
||||
|
||||
$c = $imap->has_capability("IMAP4rev1"); # [ "IMAP4rev1" ]
|
||||
@c = $imap->has_capability("IMAP4rev1"); # ( "IMAP4rev1" )
|
||||
$c = $imap->has_capability("SORT"); # [ "DISPLAY" ]
|
||||
@c = $imap->has_capability("SORT=DISPLAY"); # ( "SORT=DISPLAY" )
|
||||
$c = $imap->has_capability("AUTH"); # [ "PLAIN", "XTEST" ]
|
||||
@c = $imap->has_capability("AUTH"); # ( "PLAIN", "XTEST" )
|
||||
$c = $imap->has_capability("AUTH=XTEST"); # [ "AUTH=XTEST" ]
|
||||
@c = $imap->has_capability("AUTH=XTEST"); # ( "AUTH=XTEST" )
|
||||
$c = $imap->has_capability("AUTH=NADA"); # ''
|
||||
@c = $imap->has_capability("AUTH=NADA"); # ()
|
||||
$c = $imap->has_capability("NADA"); # ''
|
||||
@c = $imap->has_capability("NADA"); # ()
|
||||
|
||||
=back
|
||||
|
||||
=head2 idle
|
||||
|
||||
@ -1385,7 +1421,7 @@ L</capability> calls fails then undef is returned.
|
||||
Example:
|
||||
|
||||
my $msg_internal_date = $imap->internaldate($msgid)
|
||||
or die "Could not internaldate: $@\n";
|
||||
or die "internaldate failed: $@\n";
|
||||
|
||||
B<internaldate> accepts one argument, a message id (or UID if the
|
||||
L</Uid> parameter is true), and returns that message's internal date
|
||||
@ -1736,7 +1772,7 @@ you.
|
||||
Example:
|
||||
|
||||
my $msgcount = $imap->message_count($folder);
|
||||
defined($msgcount) or die "Could not message_count: $@\n";
|
||||
defined($msgcount) or die "message_count failed: $@\n";
|
||||
|
||||
The B<message_count> method accepts the name of a folder as an
|
||||
argument and returns the number of messages in that folder.
|
||||
@ -1760,7 +1796,7 @@ mileage may vary.
|
||||
Example:
|
||||
|
||||
my $string = $imap->message_string($msgid)
|
||||
or die "Could not message_string: $@\n";
|
||||
or die "message_string failed: $@\n";
|
||||
|
||||
The B<message_string> method accepts a message sequence number (or
|
||||
message UID if L</Uid> is true) as an argument and returns the message
|
||||
@ -1774,7 +1810,7 @@ I<Peek> is set to a true value.
|
||||
Example:
|
||||
|
||||
$imap->message_to_file( $file, @msgs )
|
||||
or die "Could not message_to_file: $@\n";
|
||||
or die "message_to_file failed: $@\n";
|
||||
|
||||
The B<message_to_file> method accepts a filename or file handle and
|
||||
one or more message sequence numbers (or message UIDs if L</Uid> is
|
||||
@ -1816,18 +1852,19 @@ it.
|
||||
Example:
|
||||
|
||||
# Get a list of messages in the current folder:
|
||||
my @msgs = $imap->messages or die "Could not messages: $@\n";
|
||||
my @msgs = $imap->messages or warn "Could not list messages\n";
|
||||
# Get a reference to an array of messages in the current folder:
|
||||
my $msgs = $imap->messages or die "Could not messages: $@\n";
|
||||
my $msgs = $imap->messages or die "Get messages failed: $@\n";
|
||||
|
||||
If called in list context, the B<messages> method returns a list of
|
||||
all the messages in the currently selected folder. If called in
|
||||
scalar context, it returns a reference to an array containing all the
|
||||
messages in the folder. If you have the L</Uid> parameter turned off,
|
||||
then this is the same as specifying C<1 ... $imap-E<gt>L<message_count>>;
|
||||
if you have UID set to true then this is the same as specifying
|
||||
messages in the folder. This is the same as specifying
|
||||
C<$imap-E<gt>L</search>("ALL")>.
|
||||
|
||||
An empty list is returned when no messages are found. On failure
|
||||
<undef> is returned and L</LastError> is set.
|
||||
|
||||
=head2 migrate
|
||||
|
||||
Example:
|
||||
@ -1943,7 +1980,7 @@ original message you will need to run L</expunge> (or L</close>).
|
||||
Example:
|
||||
|
||||
my $refs = $imap->namespace
|
||||
or die "Could not namespace: $@\n";
|
||||
or die "namespace failed: $@\n";
|
||||
|
||||
The namespace method runs the NAMESPACE IMAP command (as defined in
|
||||
RFC 2342). When called in a list context, it returns a list of three
|
||||
@ -2007,16 +2044,18 @@ as the date supplied as the argument.
|
||||
|
||||
Example:
|
||||
|
||||
my $hashref = $imap->parse_headers($msg||\@msgs, "Date", "Subject")
|
||||
my $hashref = $imap->parse_headers( $msg || \@msgs, "Date", "Subject" )
|
||||
or die "Could not parse_headers: $@\n";
|
||||
|
||||
The B<parse_headers> method accepts as arguments a message sequence
|
||||
number and a list of header fields. It returns a hash reference in
|
||||
which the keys are the header field names (without the colon) and the
|
||||
values are references to arrays of values. A picture would look
|
||||
something like this:
|
||||
values are references to arrays of values. On failure <undef> is
|
||||
returned and L</LastError> is set.
|
||||
|
||||
$hashref = $imap->parse_headers(1,"Date","Received","Subject","To");
|
||||
A picture would look something like this:
|
||||
|
||||
$hashref = $imap->parse_headers( 1, "Date", "Received", "Subject", "To");
|
||||
$hashref = {
|
||||
"Date" => [ "Thu, 09 Sep 1999 09:49:04 -0400" ] ,
|
||||
"Received" => [ q/
|
||||
@ -2063,7 +2102,7 @@ sequence number (or UID) and the value is a reference to a hash as
|
||||
described above.
|
||||
|
||||
An example of using B<parse_headers> to print the date and subject of
|
||||
every message in your smut folder could look like this:
|
||||
every message in your demo folder could look like this:
|
||||
|
||||
use Mail::IMAPClient;
|
||||
my $imap = Mail::IMAPClient->new(
|
||||
@ -2108,7 +2147,7 @@ Example:
|
||||
|
||||
my $count = 0;
|
||||
defined($count = $imap->recent_count($folder))
|
||||
or die "Could not recent_count: $@\n";
|
||||
or die "recent_count failed: $@\n";
|
||||
|
||||
The B<recent_count> method accepts as an argument a folder name. It
|
||||
returns the number of recent messages in the folder (as returned by
|
||||
@ -2148,8 +2187,8 @@ Version note: method added in Mail::IMAPClient 3.17
|
||||
|
||||
Example:
|
||||
|
||||
$imap->rename($oldname,$nedwname)
|
||||
or die "Could not rename: $@\n";
|
||||
$imap->rename( $oldname, $nedwname )
|
||||
or die "rename failed: $@\n";
|
||||
|
||||
The B<rename> method accepts two arguments: the name of an existing
|
||||
folder, and a new name for the folder. The existing folder will be
|
||||
@ -2161,7 +2200,7 @@ unsuccessful.
|
||||
|
||||
Example:
|
||||
|
||||
$imap->restore_message(@msgs) or die "Could not restore_message: $@\n";
|
||||
$imap->restore_message(@msgs) or die "restore_message failed: $@\n";
|
||||
|
||||
The B<restore_message> method is used to undo a previous
|
||||
L</delete_message> operation (but not if there has been an intervening
|
||||
@ -2220,14 +2259,14 @@ returns a (slightly) more meaningful value. Also it's easier to type.
|
||||
|
||||
Example:
|
||||
|
||||
$imap->run(@args) or die "Could not run: $@\n";
|
||||
$imap->run(@args) or die "run failed: $@\n";
|
||||
|
||||
The B<run> method is provided to make those uncommon things
|
||||
possible... however, we would like you to contribute the knowledge of
|
||||
missing features with us.
|
||||
|
||||
The B<run> method excepts one or two arguments. The first argument is
|
||||
a string containing an IMAP Client command, including a tag and all
|
||||
a string containing an IMAP client command, including a tag and all
|
||||
required arguments. The optional second argument is a string to look
|
||||
for that will indicate success. (The default is C</OK.*/>). The
|
||||
B<run> method returns an array (or arrayref in scalar context) of
|
||||
@ -2253,7 +2292,7 @@ tags then see L</"tag_and_run">, below.
|
||||
Example:
|
||||
|
||||
my $msgs1 = $imap->search(@args);
|
||||
if ($msgs) {
|
||||
if ($msgs1) {
|
||||
print "search matches: @$msgs1";
|
||||
}
|
||||
else {
|
||||
@ -2321,7 +2360,7 @@ response to the I<SEARCH> command.
|
||||
|
||||
Example:
|
||||
|
||||
$imap->see(@msgs) or die "Could not see: $@\n";
|
||||
$imap->see(@msgs) or die "see failed: $@\n";
|
||||
|
||||
The B<see> method accepts a list of one or more messages sequence
|
||||
numbers, or a single reference to an array of one or more message
|
||||
@ -2350,7 +2389,7 @@ array (rather than the array itself) will be returned.
|
||||
|
||||
Example:
|
||||
|
||||
$imap->select($folder) or die "Could not select: $@\n";
|
||||
$imap->select($folder) or die "select failed: $@\n";
|
||||
|
||||
The B<select> method selects a folder and changes the object's state
|
||||
to I<Selected>. It accepts one argument, which is the name of the
|
||||
@ -2541,7 +2580,7 @@ Example:
|
||||
|
||||
The B<sort> method is just like the L</search> method, only different.
|
||||
It implements the SORT extension as described in
|
||||
F<http://search.ietf.org/internet-drafts/draft-ietf-imapext-sort-10.txt>.
|
||||
F<https://tools.ietf.org/html/rfc5256>.
|
||||
It would be wise to use the L</has_capability> method to verify that
|
||||
the SORT capability is available on your server before trying to use
|
||||
the B<sort> method. If you forget to check and you're connecting to a
|
||||
@ -2680,7 +2719,7 @@ Example:
|
||||
or die "Could not tag_and_run: $@\n";
|
||||
|
||||
The B<tag_and_run> method accepts one or two arguments. The first
|
||||
argument is a string containing an IMAP Client command, without a tag
|
||||
argument is a string containing an IMAP client command, without a tag
|
||||
but with all required arguments. The optional second argument is a
|
||||
string to look for that will indicate success (without pattern
|
||||
delimiters). The default is C<OK.*>.
|
||||
@ -2715,7 +2754,7 @@ returns undef.
|
||||
|
||||
Example:
|
||||
|
||||
my $nextUid = $imap->uidnext($folder) or die "Could not uidnext: $@\n";
|
||||
my $nextUid = $imap->uidnext($folder) or die "uidnext failed: $@\n";
|
||||
|
||||
The B<uidnext> method accepts one argument, the name of a folder, and
|
||||
returns the numeric string that is the next available message UID for
|
||||
@ -2725,7 +2764,7 @@ that folder.
|
||||
|
||||
Example:
|
||||
|
||||
my $thread = $imap->thread($algorithm, $charset, @search_args );
|
||||
my $thread = $imap->thread( $algorithm, $charset, @search_args );
|
||||
|
||||
The B<thread> method accepts zero to three arguments. The first
|
||||
argument is the threading algorithm to use, generally either
|
||||
@ -2746,7 +2785,7 @@ not support the THREADS extension then the B<thread> method will
|
||||
return C<undef>.
|
||||
|
||||
The B<threads> method will issue the I<THREAD> command as defined in
|
||||
F<http://www.ietf.org/internet-drafts/draft-ietf-imapext-thread-11.txt>.
|
||||
F<https://tools.ietf.org/html/rfc5256>.
|
||||
It returns an array of threads. Each element in the array is either a
|
||||
message id or a reference to another array of (sub)threads.
|
||||
|
||||
@ -2759,7 +2798,7 @@ they will be message sequence numbers.
|
||||
Example:
|
||||
|
||||
my $validity = $imap->uidvalidity($folder)
|
||||
or die "Could not uidvalidity: $@\n";
|
||||
or die "uidvalidity failed: $@\n";
|
||||
|
||||
The B<uidvalidity> method accepts one argument, the name of a folder,
|
||||
and returns the numeric string that is the unique identifier validity
|
||||
@ -2801,9 +2840,6 @@ the L</Uid> parameter is true then an array of message UID's will be
|
||||
returned instead. If called in scalar context than a pointer to the
|
||||
array (rather than the array itself) will be returned.
|
||||
|
||||
Note that when specifying the flag in question, the preceding
|
||||
backslash (\) is entirely optional.
|
||||
|
||||
=head2 unseen_count
|
||||
|
||||
Example:
|
||||
@ -2823,7 +2859,7 @@ messages in the currently selected Folder.
|
||||
Example:
|
||||
|
||||
$imap->unset_flag( "\Seen", @msgs )
|
||||
or die "Could not unset_flag: $@\n";
|
||||
or die "unset_flag failed: $@\n";
|
||||
|
||||
The B<unset_flag> method accepts the name of a flag as its first
|
||||
argument and a list of one or more messages sequence numbers, or a
|
||||
@ -3655,7 +3691,7 @@ Example 2:
|
||||
}
|
||||
|
||||
In the second example, we used the default method to issue the UID
|
||||
IMAP Client command, being careful to use an all-uppercase method name
|
||||
IMAP client command, being careful to use an all-uppercase method name
|
||||
so as not to inadvertently call the L</Uid> accessor method. Then we
|
||||
parsed out the message UIDs manually, since we don't have the benefit
|
||||
of the built-in L</search> method doing it for us.
|
||||
@ -3978,13 +4014,13 @@ See L</Prewritemethod> and L</Readmethod> for details.
|
||||
=head1 REPORTING BUGS
|
||||
|
||||
Please send bug reports to C<bug-Mail-IMAPClient@rt.cpan.org> or
|
||||
http://rt.cpan.org/Public/Dist/Display.html?Name=Mail-IMAPClient
|
||||
https://rt.cpan.org/Public/Dist/Display.html?Name=Mail-IMAPClient
|
||||
|
||||
=head1 COPYRIGHT AND LICENSE
|
||||
|
||||
Copyright (C) 1999-2003 The Kernen Group, Inc.
|
||||
Copyright (C) 2007-2009 Mark Overmeer
|
||||
Copyright (C) 2010-2017 Phil Pearl (Lobbes)
|
||||
Copyright (C) 2010-2019 Phil Pearl (Lobbes)
|
||||
All rights reserved.
|
||||
|
||||
This library is free software; you can redistribute it and/or modify
|
@ -14,7 +14,7 @@ BEGIN {
|
||||
eval { $params = MyTest->new; };
|
||||
$@
|
||||
? plan skip_all => $@
|
||||
: plan tests => 107;
|
||||
: plan tests => 111;
|
||||
}
|
||||
|
||||
BEGIN { use_ok('Mail::IMAPClient') or exit; }
|
||||
@ -29,6 +29,16 @@ my %new_args = (
|
||||
Debug => $debug,
|
||||
);
|
||||
|
||||
{
|
||||
my $ret;
|
||||
eval {
|
||||
my $imap = Mail::IMAPClient->new();
|
||||
$ret = $imap->connect();
|
||||
};
|
||||
ok( !$@, "allow no args to connect()" ) or diag( '$@:' . $@ );
|
||||
ok( !defined $ret, "connect() returns undef" ) or diag("returned($ret)");
|
||||
}
|
||||
|
||||
# allow other options to be placed in test.txt
|
||||
%new_args = ( %new_args, %${params} );
|
||||
|
||||
@ -141,6 +151,9 @@ my $append_file_size;
|
||||
my $targetno = $target . "_noselect";
|
||||
my $targetsubf = $targetno . "${sep}subfolder";
|
||||
ok( $imap->create($targetsubf), "create target subfolder" );
|
||||
my @f = $imap->folders();
|
||||
ok( (!grep { $_ eq $targetno } @f), "folders() excludes /Noselect mailbox" )
|
||||
or diag("folders() included $targetno");
|
||||
ok( !$imap->selectable($targetno),
|
||||
"not selectable (non-mailbox w/inferior)" );
|
||||
ok( $imap->delete($targetsubf), "delete target subfolder" );
|
||||
@ -267,6 +280,11 @@ ok( $imap->select($target), "select $target" );
|
||||
my $fields = $imap->search( "HEADER", "Message-id", "NOT_A_MESSAGE_ID" );
|
||||
is( scalar @$fields, 0, 'bogus message id does not exist' );
|
||||
|
||||
{
|
||||
my $geth = $imap->get_header( 123456789, "Subject" );
|
||||
is( $geth, undef, "get_header on bogus message returns undef" );
|
||||
}
|
||||
|
||||
my @seen = $imap->seen;
|
||||
cmp_ok( scalar @seen, '==', 1, 'have seen 1' );
|
||||
|
@ -8,7 +8,7 @@
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
use Test::More tests => 27;
|
||||
use Test::More tests => 28;
|
||||
|
||||
BEGIN { use_ok('Mail::IMAPClient') or exit; }
|
||||
|
||||
@ -165,6 +165,31 @@ To: phil+to@perkpartners.com
|
||||
Subject: foo "bar\" (baz\)
|
||||
Date: Sat, 22 Jan 2011 20:43:58 -0500
|
||||
|
||||
',
|
||||
'FLAGS' => '',
|
||||
},
|
||||
},
|
||||
],
|
||||
[
|
||||
"with quotes BODY[HEADER.FIELDS (...)]",
|
||||
[
|
||||
q{* 1 FETCH (FLAGS () BODY[HEADER.FIELDS ("TO" "FROM" "SUBJECT" "DATE")]},
|
||||
'From: Phil Pearl (Lobbes) <phil+from@perkpartners.com>
|
||||
To: phil+to@perkpartners.com
|
||||
Subject: foo "bar\" (baz\)
|
||||
Date: Sat, 22 Jan 2011 20:43:58 -0500
|
||||
|
||||
'
|
||||
],
|
||||
[ [1], ( qw(FLAGS), 'BODY[HEADER.FIELDS (TO FROM SUBJECT DATE)]' ) ],
|
||||
{
|
||||
'1' => {
|
||||
'BODY[HEADER.FIELDS (TO FROM SUBJECT DATE)]' =>
|
||||
'From: Phil Pearl (Lobbes) <phil+from@perkpartners.com>
|
||||
To: phil+to@perkpartners.com
|
||||
Subject: foo "bar\" (baz\)
|
||||
Date: Sat, 22 Jan 2011 20:43:58 -0500
|
||||
|
||||
',
|
||||
'FLAGS' => '',
|
||||
},
|
@ -1,5 +1,5 @@
|
||||
|
||||
REM $Id: build_exe.bat,v 1.49 2019/02/10 23:45:40 gilles Exp gilles $
|
||||
REM $Id: build_exe.bat,v 1.54 2019/05/28 13:20:08 gilles Exp gilles $
|
||||
|
||||
@SETLOCAL
|
||||
@ECHO Currently running through %0 %*
|
||||
@ -15,28 +15,80 @@ IF EXIST LOG_bat\%~nx0.txt DEL LOG_bat\%~nx0.txt
|
||||
|
||||
CALL :handle_error CALL :detect_perl
|
||||
CALL :handle_error CALL :check_modules
|
||||
CALL :handle_error CALL :rename_to_old
|
||||
CALL :handle_error CALL :pp_exe
|
||||
|
||||
CALL :handle_error CALL :copy_with_architecture_name
|
||||
|
||||
@ENDLOCAL
|
||||
@REM Do a PAUSE if run by double-click, aka, explorer (then ). No PAUSE in a DOS window or via ssh.
|
||||
IF %0 EQU "%~dpnx0" IF "%SSH_CLIENT%"=="" PAUSE
|
||||
EXIT /B
|
||||
|
||||
|
||||
:pp_exe
|
||||
@SETLOCAL
|
||||
@REM In order to verify that all Strawberry dlls are statically included in the exe
|
||||
@REM get https://docs.microsoft.com/en-us/sysinternals/downloads/listdlls
|
||||
@REM You'll need a first run with Listdlls.exe -accepteula
|
||||
@REM Run test_exe_tests.bat
|
||||
@REM In parallel, run Listdlls.exe imapsync|findstr Strawberry
|
||||
@REM No line should be in the output
|
||||
|
||||
@REM Now imapsync can check this itself if Listdlls.exe is in its dir
|
||||
@REM .\imapsync.exe --testsunit tests_check_binary_embed_all_dyn_libs
|
||||
|
||||
@REM CALL pp -o imapsync.exe --link libeay32_.dll --link zlib1_.dll --link ssleay32_.dll .\imapsync
|
||||
IF [%PROCESSOR_ARCHITECTURE%] == [x86] (
|
||||
@IF [%PROCESSOR_ARCHITECTURE%] == [x86] (
|
||||
@REM 32 bits
|
||||
CALL pp -o imapsync.exe -M Test2::Formatter -M Test2::Formatter::TAP -M Test2::Event -M Test2::Event::Info --link zlib1_.dll --link libcrypto-1_1_.dll --link libssl-1_1_.dll .\imapsync
|
||||
@REM CALL pp -o imapsync.exe -M Test2::Formatter -M Test2::Formatter::TAP -M Test2::Event -M Test2::Event::Info --link zlib1_.dll .\imapsync
|
||||
@REM Do not add command after this one since it will anihilate the %ERRORLEVEL% of pp
|
||||
ECHO Building 32 bits binary PROCESSOR_ARCHITECTURE = %PROCESSOR_ARCHITECTURE%
|
||||
CALL pp -o imapsync.exe -M Test2::Formatter -M Test2::Formatter::TAP -M Test2::Event ^
|
||||
-M Test2::Event::Info ^
|
||||
--link zlib1_.dll ^
|
||||
--link libcrypto-1_1_.dll ^
|
||||
--link libssl-1_1_.dll ^
|
||||
.\imapsync
|
||||
) ELSE (
|
||||
@REM 64 bits
|
||||
CALL pp -o imapsync.exe -M Test2::Formatter -M Test2::Formatter::TAP -M Test2::Event -M Test2::Event::Info -M Test2::EventFacet -M Test2::Event::Pass -M Test2::Event::Fail -M Test2::Event::V2 .\imapsync
|
||||
@REM 64 bits
|
||||
@REM Do not add command after this one since it will anihilate the %ERRORLEVEL% of pp
|
||||
ECHO Building 64 bits binary PROCESSOR_ARCHITECTURE = %PROCESSOR_ARCHITECTURE%
|
||||
CALL pp -o imapsync.exe -M Test2::Formatter -M Test2::Formatter::TAP -M Test2::Event ^
|
||||
-M Test2::Event::Info -M Test2::EventFacet -M Test2::Event::Pass ^
|
||||
-M Test2::Event::Fail -M Test2::Event::V2 ^
|
||||
--link libcrypto-1_1-x64__.dll ^
|
||||
--link zlib1__.dll ^
|
||||
--link libssl-1_1-x64__.dll ^
|
||||
.\imapsync
|
||||
)
|
||||
@ENDLOCAL
|
||||
EXIT /B
|
||||
|
||||
|
||||
::------------------------------------------------------
|
||||
::--------------- Copy with architecture name ----------
|
||||
:copy_with_architecture_name
|
||||
@SETLOCAL
|
||||
IF [%PROCESSOR_ARCHITECTURE%] == [x86] (
|
||||
@REM 32 bits
|
||||
COPY /B .\imapsync.exe .\imapsync_32bit.exe
|
||||
) ELSE (
|
||||
@REM 64 bits
|
||||
COPY /B .\imapsync.exe .\imapsync_64bit.exe
|
||||
)
|
||||
@ENDLOCAL
|
||||
EXIT /B
|
||||
::------------------------------------------------------
|
||||
|
||||
::------------------------------------------------------
|
||||
::--------------- Copy with architecture name ----------
|
||||
:rename_to_old
|
||||
@SETLOCAL
|
||||
IF EXIST imapsync_old.exe DEL imapsync_old.exe
|
||||
RENAME imapsync.exe imapsync_old.exe
|
||||
@ENDLOCAL
|
||||
EXIT /B
|
||||
::------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
::------------------------------------------------------
|
||||
@ -82,6 +134,7 @@ perl ^
|
||||
-mJSON ^
|
||||
-mCrypt::OpenSSL::RSA ^
|
||||
-mEncode::Byte ^
|
||||
-mFile::Tail ^
|
||||
-e ''
|
||||
IF ERRORLEVEL 1 CALL .\install_modules.bat
|
||||
@ENDLOCAL
|
||||
|
@ -1,6 +1,6 @@
|
||||
#!/bin/sh
|
||||
|
||||
# $Id: build_mac.sh,v 1.9 2018/04/20 18:39:58 gilles Exp gilles $
|
||||
# $Id: build_mac.sh,v 1.12 2019/04/13 22:16:04 gilles Exp gilles $
|
||||
|
||||
# exit on any failure
|
||||
set -e
|
||||
@ -21,16 +21,20 @@ sh prerequisites_imapsync
|
||||
VERSION=`./imapsync --version`
|
||||
|
||||
# Update important Perl modules
|
||||
cpanm Mail::IMAPClient IO::Socket::SSL Net::SSLeay PAR::Packer
|
||||
OPENSSL_PREFIX=/sw cpanm Mail::IMAPClient IO::Socket::SSL Net::SSLeay PAR::Packer
|
||||
|
||||
pp -o $BIN_NAME \
|
||||
-M Mail::IMAPClient -M IO::Socket -M IO::Socket::SSL \
|
||||
-M Digest::MD5 -M Digest::HMAC_MD5 -M Term::ReadKey \
|
||||
-M Authen::NTLM \
|
||||
-M Crypt::OpenSSL::RSA -M JSON -M JSON::WebToken -M LWP -M HTML::Entities \
|
||||
-M Sys::MemInfo \
|
||||
imapsync
|
||||
-M Mail::IMAPClient -M IO::Socket -M IO::Socket::SSL \
|
||||
-M Digest::MD5 -M Digest::HMAC_MD5 -M Term::ReadKey \
|
||||
-M Authen::NTLM \
|
||||
-M Crypt::OpenSSL::RSA -M JSON -M JSON::WebToken -M LWP -M HTML::Entities \
|
||||
-M Sys::MemInfo -M Net::SSLeay \
|
||||
--link /sw/lib/libssl.1.0.0.dylib \
|
||||
--link /sw/lib/libcrypto.1.0.0.dylib \
|
||||
imapsync
|
||||
|
||||
./imapsync_bin_Darwin
|
||||
./imapsync_bin_Darwin --tests
|
||||
./imapsync_bin_Darwin --testslive
|
||||
./imapsync_bin_Darwin --testslive6
|
||||
|
||||
|
330
W/imapsync.1
330
W/imapsync.1
@ -133,7 +133,7 @@
|
||||
.\" ========================================================================
|
||||
.\"
|
||||
.IX Title "IMAPSYNC 1"
|
||||
.TH IMAPSYNC 1 "2019-02-18" "perl v5.22.1" "User Contributed Perl Documentation"
|
||||
.TH IMAPSYNC 1 "2019-06-26" "perl v5.22.1" "User Contributed Perl Documentation"
|
||||
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
|
||||
.\" way too many mistakes in technical documents.
|
||||
.if n .ad l
|
||||
@ -144,7 +144,7 @@ email mailboxes between two imap servers, one way,
|
||||
and without duplicates.
|
||||
.SH "VERSION"
|
||||
.IX Header "VERSION"
|
||||
This documentation refers to Imapsync \f(CW$Revision:\fR 1.921 $
|
||||
This documentation refers to Imapsync \f(CW$Revision:\fR 1.945 $
|
||||
.SH "USAGE"
|
||||
.IX Header "USAGE"
|
||||
.Vb 5
|
||||
@ -165,15 +165,21 @@ one another.
|
||||
.PP
|
||||
Imapsync command is a tool allowing incremental and
|
||||
recursive imap transfers from one mailbox to another.
|
||||
If you don't understand the previous sentence, it's normal,
|
||||
it's pedantic computer oriented jargon.
|
||||
.PP
|
||||
By default all folders are transferred, recursively, meaning
|
||||
All folders are transferred, recursively, meaning
|
||||
the whole folder hierarchy is taken, all messages in them,
|
||||
and all messages flags (\eSeen \eAnswered \eFlagged etc.)
|
||||
are synced too.
|
||||
.PP
|
||||
Imapsync reduces the amount of data transferred by not transferring
|
||||
a given message if it resides already on both sides.
|
||||
a given message if it already resides on the destination side.
|
||||
Messages that are on the destination side but not on the
|
||||
source side stay as they are (see the \-\-delete2
|
||||
option to have a strict sync).
|
||||
.PP
|
||||
How imapsync knows a message is already on both sides?
|
||||
Same specific headers and the transfer is done only once.
|
||||
By default, the identification headers are
|
||||
\&\*(L"Message-Id:\*(R" and \*(L"Received:\*(R" lines
|
||||
@ -182,29 +188,39 @@ but this choice can be changed with the \-\-useheader option.
|
||||
All flags are preserved, unread messages will stay unread,
|
||||
read ones will stay read, deleted will stay deleted.
|
||||
.PP
|
||||
You can stop the transfer at any time and restart it later,
|
||||
You can abort the transfer at any time and restart it later,
|
||||
imapsync works well with bad connections and interruptions,
|
||||
by design.
|
||||
by design. On a terminal hit Ctr-c twice within two seconds
|
||||
in order to abort the program. Hit Ctr-c just once makes
|
||||
imapsync reconnect to both imap servers.
|
||||
.PP
|
||||
You can decide to delete the messages from the source mailbox
|
||||
after a successful transfer, it can be a good feature when migrating
|
||||
live mailboxes since messages will be only on one side.
|
||||
.PP
|
||||
In that case, use the \-\-delete1 option. Option \-\-delete1 implies
|
||||
also option \-\-expunge1 so all messages marked deleted on host1
|
||||
will be really deleted.
|
||||
.PP
|
||||
You can also decide to remove empty folders once all of their
|
||||
messages have been transferred. Add \-\-delete1emptyfolders to
|
||||
obtain this behavior.
|
||||
.PP
|
||||
A different scenario is synchronizing a mailbox B from another mailbox A
|
||||
in case you just want to keep a \*(L"live\*(R" copy of A in B.
|
||||
A classical scenario is synchronizing a mailbox B from another mailbox A
|
||||
in case you just want to keep a strict copy of A in B. Strict meaning
|
||||
all messages in A will be in B but no more.
|
||||
.PP
|
||||
For this, option \-\-delete2 has to be used, it deletes messages in host2
|
||||
folder B that are not in host1 folder A. If you also need to destroy
|
||||
host2 folders that are not in host1 then use \-\-delete2folders. See also
|
||||
\&\-\-delete2foldersonly and \-\-delete2foldersbutnot.
|
||||
\&\-\-delete2foldersonly and \-\-delete2foldersbutnot to set up exceptions
|
||||
on folders to destroy (\s-1INBOX\s0 will never be destroy, it's a mandatory
|
||||
folder in \s-1IMAP\s0).
|
||||
.PP
|
||||
A different scenario is to delete the messages from the source mailbox
|
||||
after a successful transfer, it can be a good feature when migrating
|
||||
mailboxes since messages will be only on one side. The source account
|
||||
will only have messages that are not on the destination yet, ie,
|
||||
messages that arrived after a sync or that failed to be copied.
|
||||
.PP
|
||||
In that case, use the \-\-delete1 option. Option \-\-delete1 implies also
|
||||
option \-\-expunge1 so all messages marked deleted on host1 will be really
|
||||
deleted. In \s-1IMAP\s0 protocol deleting a message does not really delete it,
|
||||
it marks it with the flag \eDeleted, allowing an undelete. Expunging
|
||||
a folder removes, definitively, all the messages marked as \eDeleted
|
||||
in this folder.
|
||||
.PP
|
||||
You can also decide to remove empty folders once all of their messages
|
||||
have been transferred. Add \-\-delete1emptyfolders to obtain this
|
||||
behavior.
|
||||
.PP
|
||||
Imapsync is not adequate for maintaining two active imap accounts
|
||||
in synchronization when the user plays independently on both sides.
|
||||
@ -216,8 +232,8 @@ Michael R. Elkins) for a 2 ways synchronization.
|
||||
\& usage: imapsync [options]
|
||||
.Ve
|
||||
.PP
|
||||
Mandatory options are the six values, three on each sides,
|
||||
needed to log in into the \s-1IMAP\s0 servers, ie,
|
||||
Standard options are the six values forming the credentials,
|
||||
three on each sides, needed to log in into the \s-1IMAP\s0 servers, ie,
|
||||
a host, a username, and a password, two times.
|
||||
.PP
|
||||
Conventions used:
|
||||
@ -233,30 +249,32 @@ Conventions used:
|
||||
.Ve
|
||||
.SS "OPTIONS/credentials"
|
||||
.IX Subsection "OPTIONS/credentials"
|
||||
.Vb 5
|
||||
\& \-\-host1 str : Source or "from" imap server. Mandatory.
|
||||
.Vb 6
|
||||
\& \-\-host1 str : Source or "from" imap server.
|
||||
\& \-\-port1 int : Port to connect on host1.
|
||||
\& Optional since default port is 143 or 993 if \-\-ssl1
|
||||
\& \-\-user1 str : User to login on host1. Mandatory.
|
||||
\& Optional since default ports are the
|
||||
\& well known ports 143 or 993.
|
||||
\& \-\-user1 str : User to login on host1.
|
||||
\& \-\-password1 str : Password for the user1.
|
||||
\&
|
||||
\& \-\-host2 str : "destination" imap server. Mandatory.
|
||||
\& \-\-port2 int : Port to connect on host2.
|
||||
\& Optional since default port is 143 or 993 if \-\-ssl2
|
||||
\& \-\-user2 str : User to login on host2. Mandatory.
|
||||
\& \-\-host2 str : "destination" imap server.
|
||||
\& \-\-port2 int : Port to connect on host2. Optional
|
||||
\& \-\-user2 str : User to login on host2.
|
||||
\& \-\-password2 str : Password for the user2.
|
||||
\&
|
||||
\& \-\-showpasswords : Shows passwords on output instead of "MASKED".
|
||||
\& Useful to restart a complete run by just reading the log,
|
||||
\& or to debug passwords. It\*(Aqs not a secure practice.
|
||||
\& Useful to restart a complete run by just reading
|
||||
\& the command line used in the log,
|
||||
\& or to debug passwords.
|
||||
\& It\*(Aqs not a secure practice.
|
||||
\&
|
||||
\& \-\-passfile1 str : Password file for the user1. It must contain the
|
||||
\& password on the first line. This option avoids to show
|
||||
\& password on the first line. This option avoids showing
|
||||
\& the password on the command line like \-\-password1 does.
|
||||
\& \-\-passfile2 str : Password file for the user2. Contains the password.
|
||||
\& \-\-passfile2 str : Password file for the user2.
|
||||
.Ve
|
||||
.PP
|
||||
You can also pass the passwords in the environment variables
|
||||
You can also pass the passwords in the environment variables
|
||||
\&\s-1IMAPSYNC_PASSWORD1\s0 and \s-1IMAPSYNC_PASSWORD2\s0
|
||||
.SS "OPTIONS/encryption"
|
||||
.IX Subsection "OPTIONS/encryption"
|
||||
@ -322,8 +340,9 @@ You can also pass the passwords in the environment variables
|
||||
\&
|
||||
\& \-\-nomixfolders : Do not merge folders when host1 is case\-sensitive
|
||||
\& while host2 is not (like Exchange). Only the first
|
||||
\& similar folder is synced (ex: with Sent SENT sent
|
||||
\& on host1 only Sent will be synced to host2).
|
||||
\& similar folder is synced (example: with folders
|
||||
\& "Sent", "SENT" and "sent"
|
||||
\& on host1 only "Sent" will be synced to host2).
|
||||
\&
|
||||
\& \-\-skipemptyfolders : Empty host1 folders are not created on host2.
|
||||
\&
|
||||
@ -344,9 +363,20 @@ You can also pass the passwords in the environment variables
|
||||
\&
|
||||
\& \-\-subfolder2 str : Syncs the whole host1 folders hierarchy under the
|
||||
\& host2 folder named str.
|
||||
\& (It does it internally by adding two
|
||||
\& It does it internally by adding three
|
||||
\& \-\-regextrans2 options before all others.
|
||||
\& Add \-\-debug to see what\*(Aqs really going on.)
|
||||
\& Add \-\-debug to see what\*(Aqs really going on.
|
||||
\&
|
||||
\& \-\-subfolder1 str : Syncs the host1 folders hierarchy under str
|
||||
\& to the root hierarchy of host2.
|
||||
\& It\*(Aqs the couterpart of a sync done by \-\-subfolder2
|
||||
\& when doing it in the reverse order.
|
||||
\& Backup/Restore scenario:
|
||||
\& Use \-\-subfolder2 str for a backup to the folder str
|
||||
\& on host2. Then use \-\-subfolder1 str for restoring
|
||||
\& from the folder str, after inverting
|
||||
\& host1/host2 user1/user2 values.
|
||||
\&
|
||||
\&
|
||||
\& \-\-subscribed : Transfers subscribed folders.
|
||||
\& \-\-subscribe : Subscribe to the folders transferred on the
|
||||
@ -355,21 +385,29 @@ You can also pass the passwords in the environment variables
|
||||
\& host2 even if they are not subscribed on host1.
|
||||
\&
|
||||
\& \-\-prefix1 str : Remove prefix str to all destination folders,
|
||||
\& usually INBOX. or INBOX/ or an empty string "".
|
||||
\& usually "INBOX." or "INBOX/" or an empty string "".
|
||||
\& imapsync guesses the prefix if host1 imap server
|
||||
\& does not have NAMESPACE capability. This option
|
||||
\& does not have NAMESPACE capability. So this option
|
||||
\& should not be used, most of the time.
|
||||
\& \-\-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.
|
||||
\&
|
||||
\& \-\-sep1 str : Host1 separator. This option should not be used,
|
||||
\& most of the time.
|
||||
\& Imapsync gets the separator from the server itself,
|
||||
\& by using NAMESPACE, or it tries to guess it
|
||||
\& from the folders listing (it counts
|
||||
\& characters / . \e\e \e in folder names and choose the
|
||||
\& more frequent, or finally / if nothing is found.
|
||||
\& \-\-sep2 str : Host2 separator.
|
||||
\&
|
||||
\& \-\-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. For examples see
|
||||
\& Have in mind that \-\-regextrans2 is applied after
|
||||
\& the automatic prefix and separator inversion.
|
||||
\& For examples see:
|
||||
\& https://imapsync.lamiral.info/FAQ.d/FAQ.Folders_Mapping.txt
|
||||
.Ve
|
||||
.SS "OPTIONS/folders sizes"
|
||||
@ -412,7 +450,14 @@ You can also pass the passwords in the environment variables
|
||||
\&
|
||||
\& \-\-pipemess cmd : Apply this cmd command to each message content
|
||||
\& before the copy.
|
||||
\& \-\-pipemess cmd : and this one, etc.
|
||||
\& \-\-pipemess cmd : and this one, etc.
|
||||
\& With several \-\-pipemess, the output of each cmd
|
||||
\& command (STDOUT) is given to the input (STDIN)
|
||||
\& of the next command.
|
||||
\& For example,
|
||||
\& \-\-pipemess cmd1 \-\-pipemess cmd2 \-\-pipemess cmd3
|
||||
\& is like a Unix pipe:
|
||||
\& "cat message | cmd1 | cmd2 | cmd3"
|
||||
\&
|
||||
\& \-\-disarmreadreceipts : Disarms read receipts (host2 Exchange issue)
|
||||
\&
|
||||
@ -422,7 +467,10 @@ You can also pass the passwords in the environment variables
|
||||
.Ve
|
||||
.SS "OPTIONS/flags"
|
||||
.IX Subsection "OPTIONS/flags"
|
||||
.Vb 3
|
||||
.Vb 2
|
||||
\& If you encounter flag problems see also:
|
||||
\& https://imapsync.lamiral.info/FAQ.d/FAQ.Flags.txt
|
||||
\&
|
||||
\& \-\-regexflag reg : Apply the whole regex to each flags list.
|
||||
\& Example: \*(Aqs/"Junk"//g\*(Aq # to remove "Junk" flag.
|
||||
\& \-\-regexflag reg : then this one, etc.
|
||||
@ -435,26 +483,33 @@ You can also pass the passwords in the environment variables
|
||||
.Ve
|
||||
.SS "OPTIONS/deletions"
|
||||
.IX Subsection "OPTIONS/deletions"
|
||||
.Vb 10
|
||||
.Vb 9
|
||||
\& \-\-delete1 : Deletes messages on host1 server after a successful
|
||||
\& transfer. Option \-\-delete1 has the following behavior:
|
||||
\& it marks messages as deleted with the IMAP flag
|
||||
\& \eDeleted, then messages are really deleted with an
|
||||
\& EXPUNGE IMAP command. If expunging after each message
|
||||
\& slows down too much the sync then use
|
||||
\& \-\-noexpungeaftereach to speed up.
|
||||
\& \-\-noexpungeaftereach to speed up, expunging will then be
|
||||
\& done only twice per folder, one at the beginning and
|
||||
\& one at the end of a folder sync.
|
||||
\&
|
||||
\& \-\-expunge1 : Expunge messages on host1 just before syncing a folder.
|
||||
\& Expunge is done per folder.
|
||||
\& Expunge aims is to really delete messages marked deleted.
|
||||
\& An expunge is also done after each message copied
|
||||
\& if option \-\-delete1 is set.
|
||||
\& if option \-\-delete1 is set (unless \-\-noexpungeaftereach).
|
||||
\&
|
||||
\& \-\-noexpunge1 : Do not expunge messages on host1.
|
||||
\&
|
||||
\& \-\-delete1emptyfolders : Deletes empty folders on host1, INBOX excepted.
|
||||
\& Useful with \-\-delete1 since what remains on host1
|
||||
\& is only what failed to be synced.
|
||||
\&
|
||||
\& \-\-delete2 : Delete messages in host2 that are not in
|
||||
\& host1 server. Useful for backup or pre\-sync.
|
||||
\& \-\-delete2 implies \-\-uidexpunge2
|
||||
\&
|
||||
\& \-\-delete2duplicates : Delete messages in host2 that are duplicates.
|
||||
\& Works only without \-\-useuid since duplicates are
|
||||
\& detected with an header part of each message.
|
||||
@ -462,32 +517,35 @@ You can also pass the passwords in the environment variables
|
||||
\& \-\-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$/"
|
||||
\&
|
||||
\& \-\-expunge2 : Expunge messages on host2 after messages transfer.
|
||||
\& \-\-uidexpunge2 : uidexpunge messages on the host2 account
|
||||
\& that are not on the host1 account, requires \-\-delete2
|
||||
\& \-\-noexpunge2 : Do not expunge messages on host2.
|
||||
\& \-\-nouidexpunge2 : Do not uidexpunge messages on the host2 account
|
||||
\& that are not on the host1 account.
|
||||
.Ve
|
||||
.SS "OPTIONS/dates"
|
||||
.IX Subsection "OPTIONS/dates"
|
||||
.Vb 7
|
||||
.Vb 2
|
||||
\& If you encounter problems with dates, see also:
|
||||
\& https://imapsync.lamiral.info/FAQ.d/FAQ.Dates.txt
|
||||
\&
|
||||
\& \-\-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).
|
||||
\& a message arrived on a host (Unix mtime).
|
||||
\& \-\-idatefromheader : Sets the internal dates on host2 same as the
|
||||
\& "Date:" headers.
|
||||
\& If you encounter problems with dates see also
|
||||
\& https://imapsync.lamiral.info/FAQ.d/FAQ.Dates.txt
|
||||
\& ones in "Date:" headers.
|
||||
.Ve
|
||||
.SS "OPTIONS/message selection"
|
||||
.IX Subsection "OPTIONS/message selection"
|
||||
.Vb 12
|
||||
\& \-\-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.
|
||||
\& \-\-maxage int : Skip messages older than int days.
|
||||
\& final stats (skipped) don\*(Aqt count older messages
|
||||
\& see also \-\-minage
|
||||
\& \-\-minage int : Skip messages newer than int days.
|
||||
@ -518,17 +576,20 @@ You can also pass the passwords in the environment variables
|
||||
\& \-\-usecache : Use cache to speed up the sync.
|
||||
\& \-\-nousecache : Do not use cache. Caveat: \-\-useuid \-\-nousecache creates
|
||||
\& duplicates on multiple runs.
|
||||
\& \-\-useuid : Use UIDs instead of headers as a criterium to recognize
|
||||
\& \-\-useuid : Use UIDs instead of headers as a criterion to recognize
|
||||
\& messages. Option \-\-usecache is then implied unless
|
||||
\& \-\-nousecache is used.
|
||||
.Ve
|
||||
.SS "OPTIONS/miscellaneous"
|
||||
.IX Subsection "OPTIONS/miscellaneous"
|
||||
.Vb 7
|
||||
.Vb 5
|
||||
\& \-\-syncacls : Synchronizes acls (Access Control Lists).
|
||||
\& \-\-nosyncacls : Does not synchronize acls. This is the default.
|
||||
\& Acls in IMAP are not standardized, be careful.
|
||||
\& \-\-addheader : When a message has no headers to be identified,
|
||||
\& Acls in IMAP are not standardized, be careful
|
||||
\& since one acl code on one side may signify something
|
||||
\& else on the other one.
|
||||
\&
|
||||
\& \-\-addheader : When a message has no headers to be identified,
|
||||
\& \-\-addheader adds a "Message\-Id" header,
|
||||
\& like "Message\-Id: 12345@imapsync", where 12345
|
||||
\& is the imap UID of the message on the host1 folder.
|
||||
@ -583,16 +644,25 @@ You can also pass the passwords in the environment variables
|
||||
\& \-\-abort : terminates a previous call still running.
|
||||
\& It uses the pidfile to know what process to abort.
|
||||
\&
|
||||
\& \-\-exitwhenover int : Stop syncing when total bytes transferred reached.
|
||||
\& \-\-exitwhenover int : Stop syncing and exits when int total bytes
|
||||
\& transferred is reached.
|
||||
\&
|
||||
\& \-\-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).
|
||||
\& \-\-noreleasecheck : Do not check for new imapsync release
|
||||
\& \-\-releasecheck : Check for new imapsync release.
|
||||
\& it\*(Aqs an http request to
|
||||
\& http://imapsync.lamiral.info/prj/imapsync/VERSION
|
||||
\&
|
||||
\& \-\-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.
|
||||
\& Obsolete since "imapsync \-\-host1 imaphost" alone
|
||||
\& implies \-\-justconnect
|
||||
\&
|
||||
\& \-\-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.
|
||||
@ -609,15 +679,17 @@ You can also pass the passwords in the environment variables
|
||||
.SH "SECURITY"
|
||||
.IX Header "SECURITY"
|
||||
You can use \-\-passfile1 instead of \-\-password1 to give the
|
||||
password since it is safer. With \-\-password1 option, any user
|
||||
on your host can see the password by using the 'ps auxwwww'
|
||||
command. Using a variable (like \f(CW$PASSWORD1\fR) is also
|
||||
password since it is safer. With \-\-password1 option, on Linux,
|
||||
any user on your host can see the password by using the 'ps auxwwww'
|
||||
command. Using a variable (like \s-1IMAPSYNC_PASSWORD1\s0) is also
|
||||
dangerous because of the 'ps auxwwwwe' command. So, saving
|
||||
the password in a well protected file (600 or rw\-\-\-\-\-\-\-) is
|
||||
the best solution.
|
||||
.PP
|
||||
Imapsync activates ssl or tls encryption by default, if possible.
|
||||
.PP
|
||||
What detailed behavior is under this \*(L"if possible\*(R"?
|
||||
.PP
|
||||
Imapsync activates ssl if the well known port imaps port (993) is open
|
||||
on the imap servers. If the imaps port is closed then it open a
|
||||
normal (clear) connection on port 143 but it looks for \s-1TLS\s0 support
|
||||
@ -636,6 +708,26 @@ or at https://imapsync.lamiral.info/FAQ.d/FAQ.Security.txt
|
||||
.IX Header "EXIT STATUS"
|
||||
Imapsync will exit with a 0 status (return code) if everything went good.
|
||||
Otherwise, it exits with a non-zero status.
|
||||
Here is the list of the exit code values (an integer between 0 and 255),
|
||||
the names reflects their meaning:
|
||||
.PP
|
||||
.Vb 10
|
||||
\& EX_OK => 0 ; #/* successful termination */
|
||||
\& EX_USAGE => 64 ; #/* command line usage error */
|
||||
\& EX_NOINPUT => 66 ; #/* cannot open input */
|
||||
\& EX_UNAVAILABLE => 69 ; #/* service unavailable */
|
||||
\& EX_SOFTWARE => 70 ; #/* internal software error */
|
||||
\& EXIT_CATCH_ALL => 1 ; # Any other error
|
||||
\& EXIT_BY_SIGNAL => 6 ; # Should be 128+n where n is the sig_num
|
||||
\& EXIT_PID_FILE_ERROR => 8 ;
|
||||
\& EXIT_CONNECTION_FAILURE => 10 ;
|
||||
\& EXIT_TLS_FAILURE => 12 ;
|
||||
\& EXIT_AUTHENTICATION_FAILURE => 16 ;
|
||||
\& EXIT_SUBFOLDER1_NO_EXISTS => 21 ;
|
||||
\& EXIT_WITH_ERRORS => 111 ;
|
||||
\& EXIT_WITH_ERRORS_MAX => 112 ;
|
||||
\& EXIT_TESTS_FAILED => 254 ; # Like Test::More API
|
||||
.Ve
|
||||
.SH "LICENSE AND COPYRIGHT"
|
||||
.IX Header "LICENSE AND COPYRIGHT"
|
||||
Imapsync is free, open, public but not always gratis software
|
||||
@ -653,12 +745,13 @@ In case it is not long enough, I repeat:
|
||||
\& "No limits to do anything with this work and this license."
|
||||
.Ve
|
||||
.PP
|
||||
https://imapsync.lamiral.info/LICENSE
|
||||
Look at https://imapsync.lamiral.info/LICENSE
|
||||
.SH "AUTHOR"
|
||||
.IX Header "AUTHOR"
|
||||
Gilles \s-1LAMIRAL\s0 <gilles@lamiral.info>
|
||||
.PP
|
||||
Feedback good or bad is very often welcome.
|
||||
Good feedback good is always welcome.
|
||||
Bad feedback is very often welcome.
|
||||
.PP
|
||||
Gilles \s-1LAMIRAL\s0 earns his living by writing, installing,
|
||||
configuring and teaching free, open and often gratis
|
||||
@ -674,19 +767,6 @@ See https://imapsync.lamiral.info/FAQ.d/FAQ.Reporting_Bugs.txt
|
||||
See https://imapsync.lamiral.info/S/imapservers.shtml
|
||||
.SH "HUGE MIGRATION"
|
||||
.IX Header "HUGE MIGRATION"
|
||||
Pay special attention to options
|
||||
\&\-\-subscribed
|
||||
\&\-\-subscribe
|
||||
\&\-\-delete1
|
||||
\&\-\-delete1emptyfolders
|
||||
\&\-\-delete2
|
||||
\&\-\-delete2folders
|
||||
\&\-\-maxage
|
||||
\&\-\-minage
|
||||
\&\-\-maxsize
|
||||
\&\-\-useuid
|
||||
\&\-\-usecache
|
||||
.PP
|
||||
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.
|
||||
@ -726,10 +806,10 @@ https://imapsync.lamiral.info/examples/
|
||||
.SH "INSTALL"
|
||||
.IX Header "INSTALL"
|
||||
.Vb 1
|
||||
\& Imapsync works under any Unix with perl.
|
||||
\& Imapsync works under any Unix with Perl.
|
||||
\&
|
||||
\& Imapsync works under most Windows (2000, XP, Vista, Seven, Eight, Ten
|
||||
\& and all Server releases 2000, 2003, 2008 and R2, 2012 and R2)
|
||||
\& and all Server releases 2000, 2003, 2008 and R2, 2012 and R2, 2016)
|
||||
\& as a standalone binary software called imapsync.exe,
|
||||
\& usually launched from a batch file in order to avoid always typing
|
||||
\& the options.
|
||||
@ -766,36 +846,58 @@ Feel free to hack imapsync as the \s-1NOLIMIT\s0 license permits it.
|
||||
.Vb 2
|
||||
\& See also https://imapsync.lamiral.info/S/external.shtml
|
||||
\& for a better up to date list.
|
||||
\&
|
||||
\& imap_tools : https://github.com/andrewnimmo/rick\-sanders\-imap\-tools
|
||||
\& offlineimap : https://github.com/nicolas33/offlineimap
|
||||
\& Doveadm\-Sync : http://wiki2.dovecot.org/Tools/Doveadm/Sync
|
||||
\& ( Dovecot sync tool )
|
||||
\& mbsync : http://isync.sourceforge.net/
|
||||
\& mailsync : http://mailsync.sourceforge.net/
|
||||
\& mailutil : http://www.washington.edu/imap/
|
||||
\& part of the UW IMAP tookit.
|
||||
\& imaprepl : http://www.bl0rg.net/software/
|
||||
\& http://freecode.com/projects/imap\-repl/
|
||||
\& imapcopy : http://www.ardiehl.de/imapcopy/
|
||||
\& migrationtool : http://sourceforge.net/projects/migrationtool/
|
||||
\& imapmigrate : http://sourceforge.net/projects/cyrus\-utils/
|
||||
\& wonko_imapsync: http://wonko.com/article/554
|
||||
\& see also file W/tools/wonko_ruby_imapsync
|
||||
\& exchange\-away : http://exchange\-away.sourceforge.net/
|
||||
\& pop2imap : http://www.linux\-france.org/prj/pop2imap/
|
||||
.Ve
|
||||
.PP
|
||||
Feedback (good or bad) will often be welcome.
|
||||
Last updated and verified on Thu Apr 11, 2019.
|
||||
.PP
|
||||
.Vb 10
|
||||
\& imapsync : https://github.com/imapsync/imapsync
|
||||
\& (this is an imapsync copy, sometimes delayed,
|
||||
\& with \-\-noreleasecheck by default since release 1.592, 2014/05/22)
|
||||
\& imap_tools : https://web.archive.org/web/20161228145952/http://www.athensfbc.com/imap_tools/
|
||||
\& The imap_tools code is now at
|
||||
\& https://github.com/andrewnimmo/rick\-sanders\-imap\-tools
|
||||
\& imaputils : https://github.com/mtsatsenko/imaputils (very old imap_tools fork)
|
||||
\& Doveadm\-Sync : https://wiki2.dovecot.org/Tools/Doveadm/Sync ( Dovecot sync tool )
|
||||
\& davmail : http://davmail.sourceforge.net/
|
||||
\& offlineimap : http://offlineimap.org/
|
||||
\& mbsync : http://isync.sourceforge.net/
|
||||
\& mailsync : http://mailsync.sourceforge.net/
|
||||
\& mailutil : http://www.washington.edu/imap/ part of the UW IMAP tookit.
|
||||
\& imaprepl : https://bl0rg.net/software/ http://freecode.com/projects/imap\-repl/
|
||||
\& imapcopy (Pascal): http://www.ardiehl.de/imapcopy/
|
||||
\& imapcopy (Java) : https://code.google.com/archive/p/imapcopy/
|
||||
\& imapsize : http://www.broobles.com/imapsize/
|
||||
\& migrationtool : http://sourceforge.net/projects/migrationtool/
|
||||
\& imapmigrate : http://sourceforge.net/projects/cyrus\-utils/
|
||||
\& larch : https://github.com/rgrove/larch (derived from wonko_imapsync, good at Gmail)
|
||||
\& wonko_imapsync : http://wonko.com/article/554 (superseded by larch)
|
||||
\& pop2imap : http://www.linux\-france.org/prj/pop2imap/ (I wrote that too)
|
||||
\& exchange\-away : http://exchange\-away.sourceforge.net/
|
||||
\& SyncBackPro : http://www.2brightsparks.com/syncback/sbpro.html
|
||||
\& ImapSyncClient : https://github.com/ridaamirini/ImapSyncClient
|
||||
\& MailStore : https://www.mailstore.com/en/products/mailstore\-home/
|
||||
\& mnIMAPSync : https://github.com/manusa/mnIMAPSync
|
||||
\& imap\-upload : http://imap\-upload.sourceforge.net/
|
||||
\& (a tool for uploading a local mbox file to IMAP4 server)
|
||||
.Ve
|
||||
.SH "HISTORY"
|
||||
.IX Header "HISTORY"
|
||||
I wrote imapsync because an enterprise (basystemes) paid me to install
|
||||
a new imap server without losing huge old mailboxes located in a far
|
||||
away remote imap server, accessible by a low-bandwidth often broken link.
|
||||
The tool imapcp (written in python) could not help me because I had to verify
|
||||
every mailbox was well transferred, and then delete it after a good
|
||||
transfer. Imapsync started its life as a patch of the copy_folder.pl
|
||||
I initially wrote imapsync in July 2001 because an enterprise,
|
||||
basystemes, paid me to install a new imap server
|
||||
without losing huge old mailboxes located in a far
|
||||
away remote imap server, accessible by an
|
||||
often broken low-bandwidth \s-1ISDN\s0 link.
|
||||
.PP
|
||||
I had to verify every mailbox was well transferred, all folders, all messages,
|
||||
without wasting bandwidth or creating duplicates upon resyncs. The design was
|
||||
made with the beautiful rsync command in mind.
|
||||
.PP
|
||||
Imapsync started its life as a patch of the copy_folder.pl
|
||||
script. The script copy_folder.pl comes from the Mail\-IMAPClient\-2.1.3 perl
|
||||
module tarball source (more precisely in the examples/ directory of the
|
||||
Mail-IMAPClient tarball). So many happened since then that I wonder
|
||||
if it remains any lines of the original copy_folder.pl in imapsync source code.
|
||||
Mail-IMAPClient tarball).
|
||||
.PP
|
||||
So many happened since then that I wonder
|
||||
if it remains any lines of the original
|
||||
copy_folder.pl in imapsync source code.
|
||||
|
@ -1,5 +1,5 @@
|
||||
|
||||
@REM $Id: install_module_one.bat,v 1.7 2019/02/11 00:09:32 gilles Exp gilles $
|
||||
@REM $Id: install_module_one.bat,v 1.9 2019/05/28 13:20:08 gilles Exp gilles $
|
||||
|
||||
@SETLOCAL
|
||||
@ECHO OFF
|
||||
@ -18,15 +18,15 @@ IF ERRORLEVEL 1 ECHO Perl needed. Install Strawberry Perl. Get it at http://stra
|
||||
@REM PAUSE
|
||||
@REM EXIT
|
||||
FOR %%M in (
|
||||
IO::Socket::SSL Net::SSLeay PAR::Packer ^
|
||||
Crypt::OpenSSL::RSA ^
|
||||
) DO perl -m%%M -e "print qq{Updating %%M $%%M::VERSION \n}" ^
|
||||
& ECHO cpanm --force %%M
|
||||
& cpanm --force %%M
|
||||
|
||||
REM IO::Socket::SSL Net::SSLeay PAR::Packer
|
||||
REM IO::Socket::SSL Net::SSLeay PAR::Packer IO::Tee Crypt::OpenSSL::RSA
|
||||
|
||||
@ECHO Perl modules for imapsync installed
|
||||
PAUSE
|
||||
|
||||
@REM Do a PAUSE if run by double-click, aka, explorer (then ). No PAUSE in a DOS window or via ssh.
|
||||
IF %0 EQU "%~dpnx0" IF "%SSH_CLIENT%"=="" PAUSE
|
||||
EXIT /B
|
||||
|
||||
@ENDLOCAL
|
||||
|
@ -1,5 +1,5 @@
|
||||
|
||||
@REM $Id: install_module_ssl.bat,v 1.4 2018/05/06 15:09:42 gilles Exp gilles $
|
||||
@REM $Id: install_module_ssl.bat,v 1.5 2019/04/28 03:09:53 gilles Exp gilles $
|
||||
|
||||
@ECHO OFF
|
||||
SET SHELL=
|
||||
@ -16,12 +16,11 @@ IF ERRORLEVEL 1 ECHO Perl needed. Install Strawberry Perl. Get it at http://stra
|
||||
@ECHO perl is here
|
||||
|
||||
FOR %%M in (
|
||||
IO::Socket::SSL ^
|
||||
Crypt::OpenSSL::RSA ^
|
||||
File::Copy::Recursive ^
|
||||
IO::Socket::SSL
|
||||
) DO perl -m%%M -e "print qq{Updating %%M $%%M::VERSION \n}" ^
|
||||
& cpanm --force %%M
|
||||
& cpanm %%M
|
||||
|
||||
REM cpanm --force %%M
|
||||
REM IO::Socket::SSL
|
||||
|
||||
@ECHO Perl modules for imapsync installed
|
||||
|
@ -1,4 +1,4 @@
|
||||
REM $Id: install_modules.bat,v 1.34 2018/04/10 00:10:52 gilles Exp gilles $
|
||||
REM $Id: install_modules.bat,v 1.37 2019/05/28 13:20:08 gilles Exp gilles $
|
||||
|
||||
::------------------------------------------------------
|
||||
::--------------- Main of install_modules.bat ----------
|
||||
@ -17,7 +17,11 @@ CALL :handle_error CALL :detect_perl
|
||||
CALL :handle_error CALL :update_modules
|
||||
|
||||
@ENDLOCAL
|
||||
@REM Do a PAUSE if run by double-click, aka, explorer (then ). No PAUSE in a DOS window or via ssh.
|
||||
IF %0 EQU "%~dpnx0" IF "%SSH_CLIENT%"=="" PAUSE
|
||||
EXIT /B
|
||||
|
||||
|
||||
::------------------------------------------------------
|
||||
|
||||
|
||||
@ -39,6 +43,7 @@ EXIT /B
|
||||
:update_modules
|
||||
@SETLOCAL
|
||||
FOR %%M in ( ^
|
||||
File::Tail ^
|
||||
Regexp::Common ^
|
||||
Sys::MemInfo ^
|
||||
Test::MockObject ^
|
||||
@ -52,6 +57,7 @@ FOR %%M in ( ^
|
||||
File::Copy::Recursive ^
|
||||
Getopt::ArgvFile ^
|
||||
Socket6 ^
|
||||
Net::SSLeay ^
|
||||
IO::Socket::INET ^
|
||||
IO::Socket::INET6 ^
|
||||
IO::Socket::SSL ^
|
||||
@ -75,7 +81,7 @@ FOR %%M in ( ^
|
||||
|
||||
ECHO Perl modules for imapsync updated
|
||||
REM PAUSE
|
||||
@ECHO Net::SSLeay not updated
|
||||
@REM @ECHO Net::SSLeay not updated
|
||||
|
||||
@ENDLOCAL
|
||||
EXIT /B
|
||||
|
@ -2,3 +2,10 @@
|
||||
RewriteEngine on
|
||||
RewriteRule "^paypal_return.shtml" "/S/paypal_return.shtml"
|
||||
|
||||
<Files "imapsync_bin_Darwin">
|
||||
# Safari (the native Mac browser) transforms it to Amiga imapsync_bin_Darwin.dms
|
||||
# https://forums.macrumors.com/threads/safari-erroneously-adding-dms-extension-to-downloads.2080108/
|
||||
ForceType application/octet-stream
|
||||
</Files>
|
||||
|
||||
|
||||
|
@ -1,12 +1,18 @@
|
||||
#!/bin/sh
|
||||
|
||||
# $Id: longline_10000_11000,v 1.2 2014/01/15 02:21:38 gilles Exp gilles $
|
||||
# $Id: longline_10000_11000,v 1.5 2019/06/17 12:21:28 gilles Exp gilles $
|
||||
|
||||
# Test Exchange limit for maxlinelenght
|
||||
# Generate messages with line lenght of 10000 10100 ... up to 10990 characters
|
||||
for M in `count 10 99`; do
|
||||
for M in `count 00 99`; do
|
||||
echo $M
|
||||
{ echo Hello Guys; echo ; perl -e "print 'L' x 10${M}0" ; echo; echo END; } \
|
||||
| mail.mailutils -s "line of 10${M}0 characters" tata@localhost.
|
||||
{
|
||||
echo Hello Guys
|
||||
echo
|
||||
echo Take a line of 10${M}0 characters:
|
||||
perl -e "print 'L' x 10${M}0" ;
|
||||
echo
|
||||
echo "END of 10${M}0 characters line message" ; } \
|
||||
| mail.mailutils -s "Can you take a line of 10${M}0 characters?" longlines@localhost.
|
||||
done
|
||||
|
||||
|
18
W/learn/longline_10230_10240
Executable file
18
W/learn/longline_10230_10240
Executable file
@ -0,0 +1,18 @@
|
||||
#!/bin/sh
|
||||
|
||||
# $Id: longline_10000_11000,v 1.5 2019/06/17 12:21:28 gilles Exp gilles $
|
||||
|
||||
# Test Exchange limit for maxlinelenght
|
||||
# Generate messages with line lenght of 10000 10100 ... up to 10990 characters
|
||||
for M in `count 30 40`; do
|
||||
echo $M
|
||||
{
|
||||
echo Hello Guys
|
||||
echo
|
||||
echo Take a line of 102${M} characters:
|
||||
perl -e "print 'L' x 102${M}" ;
|
||||
echo
|
||||
echo "END of 102${M} characters line message" ; } \
|
||||
| mail.mailutils -s "Can you take a line of 102${M} characters?" longlines@localhost.
|
||||
done
|
||||
|
@ -6,12 +6,12 @@ use strict ;
|
||||
use warnings ;
|
||||
|
||||
foreach my $str_utf7 ( @ARGV ) {
|
||||
my $str_utf7imap = utf7_to_uft7imap( $str_utf7 ) ;
|
||||
my $str_utf7imap = utf7_to_utf7imap( $str_utf7 ) ;
|
||||
print qq{mv '$str_utf7' '$str_utf7imap'\n} ;
|
||||
}
|
||||
|
||||
# http://cpansearch.perl.org/src/FABPOT/Unicode-IMAPUtf7-2.01/lib/Unicode/IMAPUtf7.pm
|
||||
sub utf7_to_uft7imap {
|
||||
sub utf7_to_utf7imap {
|
||||
my ( $s ) = @_ ;
|
||||
|
||||
$s =~ s/\+([^\/&\-]*)\/([^\/\-&]*)\-/\+$1,$2\-/g ;
|
||||
|
39
W/memo
39
W/memo
@ -1,6 +1,6 @@
|
||||
#!/bin/sh
|
||||
|
||||
# $Id: memo,v 1.69 2019/01/30 06:53:58 gilles Exp gilles $
|
||||
# $Id: memo,v 1.70 2019/04/28 03:11:49 gilles Exp gilles $
|
||||
|
||||
if test -n "$1"; then
|
||||
echoq() { echo "$@" ; } # not quiet mode
|
||||
@ -168,14 +168,14 @@ statistics_VERSION_yearly_os() {
|
||||
year=${1:-`date '+%Y'`}
|
||||
(
|
||||
cd /home/lf/glamiral/imapsync_stats
|
||||
Linux=`grep -i linux stats_imapsync_${year}.ip | wc -l`
|
||||
Win32=`grep -i MSWin32 stats_imapsync_${year}.ip | wc -l`
|
||||
Darwin=`grep -i darwin stats_imapsync_${year}.ip | wc -l`
|
||||
FreeBSD=`grep -i freebsd stats_imapsync_${year}.ip | wc -l`
|
||||
Solaris=`grep -i solaris stats_imapsync_${year}.ip | wc -l`
|
||||
OpenBSD=`grep -i openbsd stats_imapsync_${year}.ip | wc -l`
|
||||
Other=`egrep -i -v 'linux|MSWin32|darwin|freebsd|solaris|openbsd' stats_imapsync_${year}.ip |wc -l`
|
||||
Nb_All=`cat stats_imapsync_${year}.ip | wc -l`
|
||||
Linux=`grep -i linux stats_imapsync_${year}.ip | grep imapsync | wc -l`
|
||||
Win32=`grep -i MSWin32 stats_imapsync_${year}.ip | grep imapsync | wc -l`
|
||||
Darwin=`grep -i darwin stats_imapsync_${year}.ip | grep imapsync | wc -l`
|
||||
FreeBSD=`grep -i freebsd stats_imapsync_${year}.ip | grep imapsync | wc -l`
|
||||
Solaris=`grep -i solaris stats_imapsync_${year}.ip | grep imapsync | wc -l`
|
||||
OpenBSD=`grep -i openbsd stats_imapsync_${year}.ip | grep imapsync | wc -l`
|
||||
Other=`egrep -i -v 'linux|MSWin32|darwin|freebsd|solaris|openbsd' stats_imapsync_${year}.ip | grep imapsync |wc -l`
|
||||
Nb_All=`cat stats_imapsync_${year}.ip | grep imapsync | wc -l`
|
||||
for OS in Linux Win32 Darwin FreeBSD Solaris OpenBSD Other; do
|
||||
#echo $OS `eval "echo \\$$OS"` / $Nb_All
|
||||
Nb_OS=`eval "echo \\$$OS"`
|
||||
@ -339,16 +339,17 @@ statistics_VERSION_yearly_os() {
|
||||
year=${1:-`date '+%Y'`}
|
||||
(
|
||||
cd $HOME/imapsync_stats
|
||||
Linux=`grep -i linux stats_imapsync_${year}.ip | wc -l`
|
||||
Win32=`grep -i MSWin32 stats_imapsync_${year}.ip | wc -l`
|
||||
Darwin=`grep -i darwin stats_imapsync_${year}.ip | wc -l`
|
||||
FreeBSD=`grep -i freebsd stats_imapsync_${year}.ip | wc -l`
|
||||
Solaris=`grep -i solaris stats_imapsync_${year}.ip | wc -l`
|
||||
OpenBSD=`grep -i openbsd stats_imapsync_${year}.ip | wc -l`
|
||||
Unknown=`grep -i '"-"' stats_imapsync_${year}.ip | wc -l`
|
||||
Other=`egrep -i -v 'linux|MSWin32|darwin|freebsd|solaris|openbsd|"-"' stats_imapsync_${year}.ip |wc -l`
|
||||
Nb_All=`cat stats_imapsync_${year}.ip | wc -l`
|
||||
for OS in Linux Win32 Darwin FreeBSD Solaris OpenBSD Unknown Other; do
|
||||
Linux=`grep -i linux stats_imapsync_${year}.ip | grep imapsync | wc -l`
|
||||
Win32=`grep -i MSWin32 stats_imapsync_${year}.ip | grep imapsync | wc -l`
|
||||
Darwin=`grep -i darwin stats_imapsync_${year}.ip | grep imapsync | wc -l`
|
||||
FreeBSD=`grep -i freebsd stats_imapsync_${year}.ip | grep imapsync | wc -l`
|
||||
Solaris=`grep -i solaris stats_imapsync_${year}.ip | grep imapsync | wc -l`
|
||||
OpenBSD=`grep -i openbsd stats_imapsync_${year}.ip | grep imapsync | wc -l`
|
||||
Cygwin=`grep -i cygwin stats_imapsync_${year}.ip | grep imapsync | wc -l`
|
||||
Unknown=`grep -i '"-"' stats_imapsync_${year}.ip | grep imapsync | wc -l`
|
||||
Other=`egrep -i -v 'linux|MSWin32|darwin|freebsd|solaris|openbsd|cygwin|"-"' stats_imapsync_${year}.ip | grep imapsync |wc -l`
|
||||
Nb_All=`cat stats_imapsync_${year}.ip | grep imapsync | wc -l`
|
||||
for OS in Linux Win32 Darwin FreeBSD Solaris OpenBSD Cygwin Unknown Other; do
|
||||
#echo $OS `eval "echo \\$$OS"` / $Nb_All
|
||||
Nb_OS=`eval "echo \\$$OS"`
|
||||
PerCent=`echo "scale=2; 100*$Nb_OS/$Nb_All" | bc -l`
|
||||
|
72
W/pdq/pdq_i005
Executable file
72
W/pdq/pdq_i005
Executable file
@ -0,0 +1,72 @@
|
||||
#!/usr/bin/perl
|
||||
###############################################################################
|
||||
# Copyright (C) 1994 - 2009, Performance Dynamics Company #
|
||||
# #
|
||||
# This software is licensed as described in the file COPYING, which #
|
||||
# you should have received as part of this distribution. The terms #
|
||||
# are also available at http://www.perfdynamics.com/Tools/copyright.html. #
|
||||
# #
|
||||
# You may opt to use, copy, modify, merge, publish, distribute and/or sell #
|
||||
# copies of the Software, and permit persons to whom the Software is #
|
||||
# furnished to do so, under the terms of the COPYING file. #
|
||||
# #
|
||||
# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY #
|
||||
# KIND, either express or implied. #
|
||||
###############################################################################
|
||||
|
||||
#
|
||||
# $Id: test.pl,v 4.5 2012/11/08 23:16:44 earl-lang Exp $
|
||||
#
|
||||
|
||||
use pdq;
|
||||
|
||||
$arrivRate = 9.9;
|
||||
$service_time = 0.1;
|
||||
|
||||
#$arrivRate = .00261165577342047930;
|
||||
#$service_time = 1774.1;
|
||||
|
||||
|
||||
#---- Initialize --------------------------------------------------------------
|
||||
|
||||
pdq::Init("OpenCenter");
|
||||
pdq::SetComment("A simple M/M/1 queue");
|
||||
|
||||
|
||||
#---- Define the queueing center ----------------------------------------------
|
||||
|
||||
$noNodes = pdq::CreateNode("server", $pdq::CEN, $pdq::FCFS);
|
||||
|
||||
|
||||
#---- Define the workload and circuit type ------------------------------------
|
||||
|
||||
$noStreams = pdq::CreateOpen("work", $arrivRate);
|
||||
|
||||
pdq::SetWUnit("Customers");
|
||||
pdq::SetTUnit("Seconds");
|
||||
|
||||
|
||||
#---- Define service demand due to workload on the queueing center ------------
|
||||
|
||||
pdq::SetDemand("server", "work", $service_time);
|
||||
|
||||
|
||||
#---- Solve the model ---------------------------------------------------------
|
||||
# Must use the CANONical method for an open circuit
|
||||
|
||||
pdq::Solve($pdq::CANON);
|
||||
|
||||
|
||||
#---- Generate a report -------------------------------------------------------
|
||||
|
||||
pdq::Report();
|
||||
|
||||
|
||||
#printf "[print_nodes] Before 2\n";
|
||||
#pdq::PrintNodes();
|
||||
#printf "[print_nodes] After 2\n";
|
||||
|
||||
#printf "pdq::nodes = %d\n", $pdq::nodes;
|
||||
#$node = pdq::GetNode(0);
|
||||
#printf "Node->{devname}\n", $node->{devname};
|
||||
|
1985
W/perlcritic_1.txt
1985
W/perlcritic_1.txt
File diff suppressed because it is too large
Load Diff
1171
W/perlcritic_2.txt
1171
W/perlcritic_2.txt
File diff suppressed because it is too large
Load Diff
@ -1,117 +1,118 @@
|
||||
Main code has high complexity score (412) at line 1, column 1. Consider refactoring. (Severity: 3)
|
||||
"%h1" is declared but not used at line 846, column 1. Unused variables clutter code and make it harder to read. (Severity: 3)
|
||||
"%h2" is declared but not used at line 846, column 1. Unused variables clutter code and make it harder to read. (Severity: 3)
|
||||
Regular expression without "/x" flag at line 1579, column 47. See page 236 of PBP. (Severity: 3)
|
||||
Regular expression without "/x" flag at line 1588, column 47. See page 236 of PBP. (Severity: 3)
|
||||
Code structure is deeply nested at line 2151, column 41. Consider refactoring. (Severity: 3)
|
||||
Regular expression without "/x" flag at line 3012, column 23. See page 236 of PBP. (Severity: 3)
|
||||
Too many arguments at line 4015, column 1. See page 182 of PBP. (Severity: 3)
|
||||
Too many arguments at line 4034, column 1. See page 182 of PBP. (Severity: 3)
|
||||
Too many arguments at line 4055, column 1. See page 182 of PBP. (Severity: 3)
|
||||
Regular expression without "/x" flag at line 4213, column 23. See page 236 of PBP. (Severity: 3)
|
||||
Regular expression without "/x" flag at line 4737, column 42. See page 236 of PBP. (Severity: 3)
|
||||
Regular expression without "/x" flag at line 4738, column 33. See page 236 of PBP. (Severity: 3)
|
||||
Regular expression without "/x" flag at line 4747, column 42. See page 236 of PBP. (Severity: 3)
|
||||
Regular expression without "/x" flag at line 4764, column 42. See page 236 of PBP. (Severity: 3)
|
||||
Regular expression without "/x" flag at line 4793, column 50. See page 236 of PBP. (Severity: 3)
|
||||
Regular expression without "/x" flag at line 4898, column 64. See page 236 of PBP. (Severity: 3)
|
||||
Regular expression without "/x" flag at line 4899, column 64. See page 236 of PBP. (Severity: 3)
|
||||
Regular expression without "/x" flag at line 4902, column 56. See page 236 of PBP. (Severity: 3)
|
||||
Too many arguments at line 4930, column 1. See page 182 of PBP. (Severity: 3)
|
||||
Subroutine "authenticate_imap" with high complexity score (23) at line 5012, column 1. Consider refactoring. (Severity: 3)
|
||||
Too many arguments at line 5012, column 1. See page 182 of PBP. (Severity: 3)
|
||||
Too many arguments at line 5164, column 1. See page 182 of PBP. (Severity: 3)
|
||||
Use "local $/ = undef" or Path::Tiny instead of joined readline at line 5261, column 43. See page 213 of PBP. (Severity: 3)
|
||||
Backtick operator used at line 5279, column 20. Use IPC::Open3 instead. (Severity: 3)
|
||||
Regular expression without "/x" flag at line 5417, column 26. See page 236 of PBP. (Severity: 3)
|
||||
Expression form of "eval" at line 6607, column 27. See page 161 of PBP. (Severity: 5)
|
||||
Single-quote used as quote-like operator delimiter at line 6757, column 24. Using quotes as delimiters for quote-like operators obfuscates code. (Severity: 3)
|
||||
Expression form of "eval" at line 6848, column 27. See page 161 of PBP. (Severity: 5)
|
||||
Subroutine "copy_message" with high complexity score (22) at line 7279, column 1. Consider refactoring. (Severity: 3)
|
||||
Too many arguments at line 7279, column 1. See page 182 of PBP. (Severity: 3)
|
||||
Too many arguments at line 7353, column 1. See page 182 of PBP. (Severity: 3)
|
||||
Subroutine "message_for_host2" with high complexity score (23) at line 7387, column 1. Consider refactoring. (Severity: 3)
|
||||
Too many arguments at line 7387, column 1. See page 182 of PBP. (Severity: 3)
|
||||
Reused variable name in lexical scope: $uid1 at line 7617, column 9. Invent unique variable names. (Severity: 3)
|
||||
Reused variable name in lexical scope: $uid2 at line 7617, column 9. Invent unique variable names. (Severity: 3)
|
||||
Too many arguments at line 7813, column 1. See page 182 of PBP. (Severity: 3)
|
||||
Too many arguments at line 8052, column 1. See page 182 of PBP. (Severity: 3)
|
||||
Expression form of "eval" at line 9405, column 27. See page 161 of PBP. (Severity: 5)
|
||||
Expression form of "eval" at line 9646, column 27. See page 161 of PBP. (Severity: 5)
|
||||
Too many arguments at line 9957, column 1. See page 182 of PBP. (Severity: 3)
|
||||
Backtick operator used at line 10256, column 17. Use IPC::Open3 instead. (Severity: 3)
|
||||
Split long regexps into smaller qr// chunks at line 10345, column 32. See page 261 of PBP. (Severity: 3)
|
||||
Split long regexps into smaller qr// chunks at line 10349, column 32. See page 261 of PBP. (Severity: 3)
|
||||
Split long regexps into smaller qr// chunks at line 10368, column 33. See page 261 of PBP. (Severity: 3)
|
||||
Split long regexps into smaller qr// chunks at line 10379, column 24. See page 261 of PBP. (Severity: 3)
|
||||
Cascading if-elsif chain at line 10643, column 2. See pages 117,118 of PBP. (Severity: 3)
|
||||
Return value of eval not tested at line 10797, column 3. You can't depend upon the value of $@/$EVAL_ERROR to tell whether an eval failed. (Severity: 3)
|
||||
Backtick operator used at line 10798, column 15. Use IPC::Open3 instead. (Severity: 3)
|
||||
Split long regexps into smaller qr// chunks at line 10807, column 16. See page 261 of PBP. (Severity: 3)
|
||||
Return value of eval not tested at line 10820, column 3. You can't depend upon the value of $@/$EVAL_ERROR to tell whether an eval failed. (Severity: 3)
|
||||
Backtick operator used at line 10821, column 15. Use IPC::Open3 instead. (Severity: 3)
|
||||
Split long regexps into smaller qr// chunks at line 10830, column 16. See page 261 of PBP. (Severity: 3)
|
||||
Return value of eval not tested at line 10844, column 3. You can't depend upon the value of $@/$EVAL_ERROR to tell whether an eval failed. (Severity: 3)
|
||||
Capture variable used outside conditional at line 10855, column 12. See page 253 of PBP. (Severity: 3)
|
||||
Backtick operator used at line 11000, column 26. Use IPC::Open3 instead. (Severity: 3)
|
||||
Backtick operator used at line 11029, column 18. Use IPC::Open3 instead. (Severity: 3)
|
||||
Split long regexps into smaller qr// chunks at line 11241, column 19. See page 261 of PBP. (Severity: 3)
|
||||
Split long regexps into smaller qr// chunks at line 11267, column 19. See page 261 of PBP. (Severity: 3)
|
||||
Split long regexps into smaller qr// chunks at line 11308, column 19. See page 261 of PBP. (Severity: 3)
|
||||
Split long regexps into smaller qr// chunks at line 11320, column 19. See page 261 of PBP. (Severity: 3)
|
||||
Expression form of "eval" at line 11677, column 56. See page 161 of PBP. (Severity: 5)
|
||||
Expression form of "eval" at line 11681, column 58. See page 161 of PBP. (Severity: 5)
|
||||
Split long regexps into smaller qr// chunks at line 12147, column 20. See page 261 of PBP. (Severity: 3)
|
||||
Ambiguously named variable "last" at line 12550, column 2. See page 48 of PBP. (Severity: 3)
|
||||
Subroutine "cleanup_mess_from_tests" does not end with "return" at line 12604, column 1. See page 197 of PBP. (Severity: 4)
|
||||
Reused variable name in lexical scope: $err at line 12903, column 3. Invent unique variable names. (Severity: 3)
|
||||
Reused variable name in lexical scope: $err at line 12973, column 3. Invent unique variable names. (Severity: 3)
|
||||
"warn" used instead of "carp" at line 13431, column 25. See page 283 of PBP. (Severity: 3)
|
||||
Regular expression without "/x" flag at line 13448, column 40. See page 236 of PBP. (Severity: 3)
|
||||
Regular expression without "/x" flag at line 13450, column 23. See page 236 of PBP. (Severity: 3)
|
||||
Regular expression without "/x" flag at line 13451, column 23. See page 236 of PBP. (Severity: 3)
|
||||
Literal line breaks in a string at line 13477, column 19. See pages 60,61 of PBP. (Severity: 3)
|
||||
Subroutine "myGetOptions" with high complexity score (29) at line 13513, column 1. Consider refactoring. (Severity: 3)
|
||||
Capture variable used outside conditional at line 13545, column 41. See page 253 of PBP. (Severity: 3)
|
||||
Main code has high complexity score (420) at line 1, column 1. Consider refactoring. (Severity: 3)
|
||||
Regular expression without "/x" flag at line 1759, column 47. See page 236 of PBP. (Severity: 3)
|
||||
Regular expression without "/x" flag at line 1768, column 47. See page 236 of PBP. (Severity: 3)
|
||||
Code structure is deeply nested at line 2332, column 41. Consider refactoring. (Severity: 3)
|
||||
Regular expression without "/x" flag at line 3221, column 23. See page 236 of PBP. (Severity: 3)
|
||||
Too many arguments at line 4226, column 1. See page 182 of PBP. (Severity: 3)
|
||||
Too many arguments at line 4245, column 1. See page 182 of PBP. (Severity: 3)
|
||||
Too many arguments at line 4266, column 1. See page 182 of PBP. (Severity: 3)
|
||||
Regular expression without "/x" flag at line 4425, column 23. See page 236 of PBP. (Severity: 3)
|
||||
Regular expression without "/x" flag at line 5096, column 42. See page 236 of PBP. (Severity: 3)
|
||||
Regular expression without "/x" flag at line 5097, column 33. See page 236 of PBP. (Severity: 3)
|
||||
Regular expression without "/x" flag at line 5106, column 42. See page 236 of PBP. (Severity: 3)
|
||||
Regular expression without "/x" flag at line 5126, column 42. See page 236 of PBP. (Severity: 3)
|
||||
Regular expression without "/x" flag at line 5159, column 50. See page 236 of PBP. (Severity: 3)
|
||||
Regular expression without "/x" flag at line 5263, column 64. See page 236 of PBP. (Severity: 3)
|
||||
Regular expression without "/x" flag at line 5264, column 64. See page 236 of PBP. (Severity: 3)
|
||||
Regular expression without "/x" flag at line 5267, column 56. See page 236 of PBP. (Severity: 3)
|
||||
Too many arguments at line 5295, column 1. See page 182 of PBP. (Severity: 3)
|
||||
Subroutine "authenticate_imap" with high complexity score (23) at line 5377, column 1. Consider refactoring. (Severity: 3)
|
||||
Too many arguments at line 5377, column 1. See page 182 of PBP. (Severity: 3)
|
||||
Too many arguments at line 5529, column 1. See page 182 of PBP. (Severity: 3)
|
||||
Use "local $/ = undef" or Path::Tiny instead of joined readline at line 5626, column 43. See page 213 of PBP. (Severity: 3)
|
||||
Backtick operator used at line 5644, column 20. Use IPC::Open3 instead. (Severity: 3)
|
||||
Regular expression without "/x" flag at line 5782, column 26. See page 236 of PBP. (Severity: 3)
|
||||
Regular expression without "/x" flag at line 6975, column 23. See page 236 of PBP. (Severity: 3)
|
||||
Regular expression without "/x" flag at line 7284, column 29. See page 236 of PBP. (Severity: 3)
|
||||
Expression form of "eval" at line 7477, column 27. See page 161 of PBP. (Severity: 5)
|
||||
Expression form of "eval" at line 7718, column 27. See page 161 of PBP. (Severity: 5)
|
||||
Subroutine "copy_message" with high complexity score (22) at line 8149, column 1. Consider refactoring. (Severity: 3)
|
||||
Too many arguments at line 8149, column 1. See page 182 of PBP. (Severity: 3)
|
||||
Too many arguments at line 8223, column 1. See page 182 of PBP. (Severity: 3)
|
||||
Subroutine "message_for_host2" with high complexity score (25) at line 8257, column 1. Consider refactoring. (Severity: 3)
|
||||
Too many arguments at line 8257, column 1. See page 182 of PBP. (Severity: 3)
|
||||
Regular expression without "/x" flag at line 8535, column 35. See page 236 of PBP. (Severity: 3)
|
||||
Regular expression without "/x" flag at line 8540, column 43. See page 236 of PBP. (Severity: 3)
|
||||
Regular expression without "/x" flag at line 8589, column 32. See page 236 of PBP. (Severity: 3)
|
||||
Regular expression without "/x" flag at line 8684, column 32. See page 236 of PBP. (Severity: 3)
|
||||
Reused variable name in lexical scope: $uid1 at line 8807, column 9. Invent unique variable names. (Severity: 3)
|
||||
Reused variable name in lexical scope: $uid2 at line 8807, column 9. Invent unique variable names. (Severity: 3)
|
||||
Reused variable name in lexical scope: $uid1 at line 8887, column 9. Invent unique variable names. (Severity: 3)
|
||||
Reused variable name in lexical scope: $uid2 at line 8887, column 9. Invent unique variable names. (Severity: 3)
|
||||
Too many arguments at line 9087, column 1. See page 182 of PBP. (Severity: 3)
|
||||
Too many arguments at line 9326, column 1. See page 182 of PBP. (Severity: 3)
|
||||
Expression form of "eval" at line 10687, column 27. See page 161 of PBP. (Severity: 5)
|
||||
Expression form of "eval" at line 10928, column 27. See page 161 of PBP. (Severity: 5)
|
||||
Too many arguments at line 11239, column 1. See page 182 of PBP. (Severity: 3)
|
||||
Backtick operator used at line 11612, column 17. Use IPC::Open3 instead. (Severity: 3)
|
||||
Split long regexps into smaller qr// chunks at line 11701, column 32. See page 261 of PBP. (Severity: 3)
|
||||
Split long regexps into smaller qr// chunks at line 11705, column 32. See page 261 of PBP. (Severity: 3)
|
||||
Split long regexps into smaller qr// chunks at line 11724, column 33. See page 261 of PBP. (Severity: 3)
|
||||
Split long regexps into smaller qr// chunks at line 11735, column 24. See page 261 of PBP. (Severity: 3)
|
||||
Cascading if-elsif chain at line 11999, column 2. See pages 117,118 of PBP. (Severity: 3)
|
||||
Return value of eval not tested at line 12153, column 3. You can't depend upon the value of $@/$EVAL_ERROR to tell whether an eval failed. (Severity: 3)
|
||||
Backtick operator used at line 12154, column 15. Use IPC::Open3 instead. (Severity: 3)
|
||||
Split long regexps into smaller qr// chunks at line 12163, column 16. See page 261 of PBP. (Severity: 3)
|
||||
Return value of eval not tested at line 12176, column 3. You can't depend upon the value of $@/$EVAL_ERROR to tell whether an eval failed. (Severity: 3)
|
||||
Backtick operator used at line 12177, column 15. Use IPC::Open3 instead. (Severity: 3)
|
||||
Split long regexps into smaller qr// chunks at line 12186, column 16. See page 261 of PBP. (Severity: 3)
|
||||
Return value of eval not tested at line 12200, column 3. You can't depend upon the value of $@/$EVAL_ERROR to tell whether an eval failed. (Severity: 3)
|
||||
Capture variable used outside conditional at line 12211, column 12. See page 253 of PBP. (Severity: 3)
|
||||
Backtick operator used at line 12379, column 26. Use IPC::Open3 instead. (Severity: 3)
|
||||
Backtick operator used at line 12408, column 18. Use IPC::Open3 instead. (Severity: 3)
|
||||
Regular expression without "/x" flag at line 12542, column 42. See page 236 of PBP. (Severity: 3)
|
||||
Backtick operator used at line 12595, column 16. Use IPC::Open3 instead. (Severity: 3)
|
||||
Split long regexps into smaller qr// chunks at line 12703, column 19. See page 261 of PBP. (Severity: 3)
|
||||
Split long regexps into smaller qr// chunks at line 12729, column 19. See page 261 of PBP. (Severity: 3)
|
||||
Split long regexps into smaller qr// chunks at line 12770, column 19. See page 261 of PBP. (Severity: 3)
|
||||
Split long regexps into smaller qr// chunks at line 12782, column 19. See page 261 of PBP. (Severity: 3)
|
||||
Regular expression without "/x" flag at line 13075, column 22. See page 236 of PBP. (Severity: 3)
|
||||
Expression form of "eval" at line 13146, column 56. See page 161 of PBP. (Severity: 5)
|
||||
Expression form of "eval" at line 13150, column 58. See page 161 of PBP. (Severity: 5)
|
||||
Split long regexps into smaller qr// chunks at line 13617, column 20. See page 261 of PBP. (Severity: 3)
|
||||
Regular expression without "/x" flag at line 14118, column 20. See page 236 of PBP. (Severity: 3)
|
||||
Reused variable name in lexical scope: $err at line 14511, column 3. Invent unique variable names. (Severity: 3)
|
||||
"warn" used instead of "carp" at line 14975, column 25. See page 283 of PBP. (Severity: 3)
|
||||
Regular expression without "/x" flag at line 14992, column 40. See page 236 of PBP. (Severity: 3)
|
||||
Regular expression without "/x" flag at line 14994, column 23. See page 236 of PBP. (Severity: 3)
|
||||
Regular expression without "/x" flag at line 14995, column 23. See page 236 of PBP. (Severity: 3)
|
||||
Literal line breaks in a string at line 15021, column 19. See pages 60,61 of PBP. (Severity: 3)
|
||||
Subroutine "myGetOptions" with high complexity score (31) at line 15057, column 1. Consider refactoring. (Severity: 3)
|
||||
Capture variable used outside conditional at line 15089, column 41. See page 253 of PBP. (Severity: 3)
|
||||
|
||||
1 files.
|
||||
437 subroutines/methods.
|
||||
14,225 statements.
|
||||
476 subroutines/methods.
|
||||
15,905 statements.
|
||||
|
||||
14,379 lines, consisting of:
|
||||
2,697 blank lines.
|
||||
844 comment lines.
|
||||
15,974 lines, consisting of:
|
||||
2,987 blank lines.
|
||||
967 comment lines.
|
||||
0 data lines.
|
||||
10,160 lines of Perl code.
|
||||
678 lines of POD.
|
||||
11,242 lines of Perl code.
|
||||
778 lines of POD.
|
||||
|
||||
Average McCabe score of subroutines was 4.00.
|
||||
Average McCabe score of subroutines was 4.05.
|
||||
|
||||
75 violations.
|
||||
Violations per file was 75.000.
|
||||
81 violations.
|
||||
Violations per file was 81.000.
|
||||
Violations per statement was 0.005.
|
||||
Violations per line of code was 0.005.
|
||||
|
||||
6 severity 5 violations.
|
||||
1 severity 4 violations.
|
||||
68 severity 3 violations.
|
||||
75 severity 3 violations.
|
||||
|
||||
6 violations of BuiltinFunctions::ProhibitStringyEval.
|
||||
1 violations of ControlStructures::ProhibitCascadingIfElse.
|
||||
1 violations of ControlStructures::ProhibitDeepNests.
|
||||
1 violations of ErrorHandling::RequireCarping.
|
||||
3 violations of ErrorHandling::RequireCheckingReturnValueOfEval.
|
||||
6 violations of InputOutput::ProhibitBacktickOperators.
|
||||
7 violations of InputOutput::ProhibitBacktickOperators.
|
||||
1 violations of InputOutput::ProhibitJoinedReadline.
|
||||
1 violations of Modules::ProhibitExcessMainComplexity.
|
||||
1 violations of NamingConventions::ProhibitAmbiguousNames.
|
||||
2 violations of RegularExpressions::ProhibitCaptureWithoutTest.
|
||||
11 violations of RegularExpressions::ProhibitComplexRegexes.
|
||||
16 violations of RegularExpressions::RequireExtendedFormatting.
|
||||
25 violations of RegularExpressions::RequireExtendedFormatting.
|
||||
4 violations of Subroutines::ProhibitExcessComplexity.
|
||||
12 violations of Subroutines::ProhibitManyArgs.
|
||||
1 violations of Subroutines::RequireFinalReturn.
|
||||
1 violations of ValuesAndExpressions::ProhibitImplicitNewlines.
|
||||
1 violations of ValuesAndExpressions::ProhibitQuotesAsQuotelikeOperatorDelimiters.
|
||||
4 violations of Variables::ProhibitReusedNames.
|
||||
2 violations of Variables::ProhibitUnusedVariables.
|
||||
5 violations of Variables::ProhibitReusedNames.
|
||||
|
@ -1,31 +1,28 @@
|
||||
Expression form of "eval" at line 6607, column 27. See page 161 of PBP. (Severity: 5)
|
||||
Expression form of "eval" at line 6848, column 27. See page 161 of PBP. (Severity: 5)
|
||||
Expression form of "eval" at line 9405, column 27. See page 161 of PBP. (Severity: 5)
|
||||
Expression form of "eval" at line 9646, column 27. See page 161 of PBP. (Severity: 5)
|
||||
Expression form of "eval" at line 11677, column 56. See page 161 of PBP. (Severity: 5)
|
||||
Expression form of "eval" at line 11681, column 58. See page 161 of PBP. (Severity: 5)
|
||||
Subroutine "cleanup_mess_from_tests" does not end with "return" at line 12604, column 1. See page 197 of PBP. (Severity: 4)
|
||||
Expression form of "eval" at line 7477, column 27. See page 161 of PBP. (Severity: 5)
|
||||
Expression form of "eval" at line 7718, column 27. See page 161 of PBP. (Severity: 5)
|
||||
Expression form of "eval" at line 10687, column 27. See page 161 of PBP. (Severity: 5)
|
||||
Expression form of "eval" at line 10928, column 27. See page 161 of PBP. (Severity: 5)
|
||||
Expression form of "eval" at line 13146, column 56. See page 161 of PBP. (Severity: 5)
|
||||
Expression form of "eval" at line 13150, column 58. See page 161 of PBP. (Severity: 5)
|
||||
|
||||
1 files.
|
||||
437 subroutines/methods.
|
||||
14,225 statements.
|
||||
476 subroutines/methods.
|
||||
15,905 statements.
|
||||
|
||||
14,379 lines, consisting of:
|
||||
2,697 blank lines.
|
||||
844 comment lines.
|
||||
15,974 lines, consisting of:
|
||||
2,987 blank lines.
|
||||
967 comment lines.
|
||||
0 data lines.
|
||||
10,160 lines of Perl code.
|
||||
678 lines of POD.
|
||||
11,242 lines of Perl code.
|
||||
778 lines of POD.
|
||||
|
||||
Average McCabe score of subroutines was 4.00.
|
||||
Average McCabe score of subroutines was 4.05.
|
||||
|
||||
7 violations.
|
||||
Violations per file was 7.000.
|
||||
6 violations.
|
||||
Violations per file was 6.000.
|
||||
Violations per statement was 0.000.
|
||||
Violations per line of code was 0.000.
|
||||
|
||||
6 severity 5 violations.
|
||||
1 severity 4 violations.
|
||||
|
||||
6 violations of BuiltinFunctions::ProhibitStringyEval.
|
||||
1 violations of Subroutines::RequireFinalReturn.
|
||||
|
@ -1,16 +1,17 @@
|
||||
$SHELL says /bin/bash
|
||||
$0 gives ./INSTALL.d/prerequisites_imapsync
|
||||
ps -ef gives gilles 29553 29552 0 23:52 pts/26 00:00:00 /bin/sh ./INSTALL.d/prerequisites_imapsync
|
||||
ps -ef gives gilles 2386 2385 0 01:17 pts/2 00:00:00 /bin/sh ./INSTALL.d/prerequisites_imapsync
|
||||
Distributor ID: Ubuntu
|
||||
Description: Ubuntu 16.04.5 LTS
|
||||
Description: Ubuntu 16.04.6 LTS
|
||||
Release: 16.04
|
||||
Codename: xenial
|
||||
Linux petite 4.4.0-141-generic #167-Ubuntu SMP Wed Dec 5 10:38:08 UTC 2018 i686 i686 i686 GNU/Linux
|
||||
Linux petite 4.4.0-148-generic #174-Ubuntu SMP Tue May 7 12:19:28 UTC 2019 i686 i686 i686 GNU/Linux
|
||||
Ok: Found Perl 5.22.1
|
||||
make[1] : on entre dans le répertoire « /home/gilles/public_html/imapsync »
|
||||
make[1]: rien à faire pour « foo ».
|
||||
make[1] : on quitte le répertoire « /home/gilles/public_html/imapsync »
|
||||
Ok: Found make GNU Make 4.1
|
||||
Ok: Found Perl module File::Tail
|
||||
Ok: Found Perl module App::cpanminus
|
||||
Ok: Found Perl module Authen::NTLM
|
||||
Ok: Found Perl module CGI
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user