1
0
mirror of https://github.com/imapsync/imapsync.git synced 2024-11-16 15:52:47 +01:00
This commit is contained in:
Nick Bebout 2019-07-02 18:25:47 -05:00
parent 0797e48248
commit 275436c5a0
126 changed files with 25270 additions and 4380 deletions

157
ChangeLog
View File

@ -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

View File

@ -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.
=======================================================================
=======================================================================

View File

@ -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

View File

@ -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?

View File

@ -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
View 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
=======================================================================

View File

@ -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
=======================================================================
=======================================================================

View File

@ -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
=======================================================================
=======================================================================

View File

@ -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?

View File

@ -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:

View File

@ -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,"
=======================================================================
=======================================================================

View File

@ -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
View 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
=======================================================================

View File

@ -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.

View 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.
=======================================================================
=======================================================================

View File

@ -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
=====================================================================

View File

@ -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
=======================================================================
=======================================================================

View File

@ -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

View File

@ -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.
=======================================================================
=======================================================================

View File

@ -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

View File

@ -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?

View File

@ -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?

View File

@ -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

View File

@ -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 \

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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
View File

@ -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
View File

@ -0,0 +1 @@
README

View File

@ -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

View File

@ -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>

View File

@ -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>

View File

@ -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

View File

@ -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
View File

@ -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

View File

@ -1 +1 @@
1.921
1.945

View File

@ -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)

View File

@ -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)

File diff suppressed because it is too large Load Diff

0
W/.valid.index.shtml Normal file
View File

View 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

View File

@ -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"
}

View File

@ -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'

View File

@ -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',
},
},

View File

@ -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

View File

@ -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 ) );

View File

@ -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

View File

@ -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' );

View File

@ -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' => '',
},

View File

@ -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

View File

@ -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

View File

@ -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.

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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>

View File

@ -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
View 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

View File

@ -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
View File

@ -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
View 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};

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -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.

View File

@ -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.

View File

@ -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