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 2022-10-24 21:20:30 -05:00
parent e2c23d57d6
commit 399651d088
58 changed files with 5882 additions and 1127 deletions

129
ChangeLog
View File

@ -1,17 +1,138 @@
RCS file: RCS/imapsync,v RCS file: RCS/imapsync,v
Working file: imapsync Working file: imapsync
head: 2.200 head: 2.229
branch: branch:
locks: strict locks: strict
gilles: 2.200 gilles: 2.229
access list: access list:
symbolic names: symbolic names:
keyword substitution: kv keyword substitution: kv
total revisions: 1100; selected revisions: 1100 total revisions: 1129; selected revisions: 1129
description: description:
---------------------------- ----------------------------
revision 2.200 locked by: gilles; revision 2.229 locked by: gilles;
date: 2022/09/14 18:08:24; author: gilles; state: Exp; lines: +16 -16
Make pass "make linuxtests win32tests win64tests mactests"
----------------------------
revision 2.228
date: 2022/09/13 12:14:02; author: gilles; state: Exp; lines: +10 -9
Doc. --oauthaccesstoken1 needs --password1 presence. This is a bug.
----------------------------
revision 2.227
date: 2022/07/28 15:59:38; author: gilles; state: Exp; lines: +347 -112
Bugfix. Fixed memory measurement on MacOS and Win32 Win64
----------------------------
revision 2.226
date: 2022/07/15 12:02:47; author: gilles; state: Exp; lines: +30 -26
1966 unit tests
----------------------------
revision 2.225
date: 2022/07/14 16:56:11; author: gilles; state: Exp; lines: +14 -11
*** empty log message ***
----------------------------
revision 2.224
date: 2022/07/13 17:33:42; author: gilles; state: Exp; lines: +8 -8
typo connexions connections
----------------------------
revision 2.223
date: 2022/07/03 10:39:30; author: gilles; state: Exp; lines: +48 -11
Default is now like --noemailreport1 --noemailreport2, no final email report. Popular demand.
Added a stat value: memory footprint times time spent during the sync. Unity MiB * hour. Line "Memory consumption at the end".
----------------------------
revision 2.222
date: 2022/06/29 12:13:58; author: gilles; state: Exp; lines: +9 -10
Remove --memorystress from CGI options.
----------------------------
revision 2.221
date: 2022/06/28 23:12:01; author: gilles; state: Exp; lines: +72 -63
CGI context. Refuse to serve when the cpu load is greater than 1 per cpu. A load of 3.9 with 4 cores is ok.
----------------------------
revision 2.220
date: 2022/06/28 19:01:18; author: gilles; state: Exp; lines: +8 -8
CGI context. Refuse to server when memory left is less than 1 GB.
----------------------------
revision 2.219
date: 2022/06/25 21:33:30; author: gilles; state: Exp; lines: +24 -19
heavy load by cpu limit from 6 to 3. Because 6 is too big on ks6
----------------------------
revision 2.218
date: 2022/06/25 06:38:24; author: gilles; state: Exp; lines: +12 -9
Typo. memory_consumption_all_pids_percent with only 2 decimals.
----------------------------
revision 2.217
date: 2022/06/25 06:16:42; author: gilles; state: Exp; lines: +148 -52
CGI context. Bring back to exit on heavy load by cpu. limit is a load of 6 per core, roughly the number of processes running constantly per core.
----------------------------
revision 2.216
date: 2022/06/22 18:49:55; author: gilles; state: Exp; lines: +9 -9
typo seconde second
----------------------------
revision 2.215
date: 2022/06/22 01:44:01; author: gilles; state: Exp; lines: +34 -21
Added --exitonload option. Only available in CGI context for now.
----------------------------
revision 2.214
date: 2022/06/08 21:28:34; author: gilles; state: Exp; lines: +11 -11
load_percent_threshold is now room for two average imapsync processes.
----------------------------
revision 2.213
date: 2022/05/20 11:57:22; author: gilles; state: Exp; lines: +48 -33
Filtering buggy flags is now case insensitive. \Junk or \JUNK or \jUnK etc.
Refactoring. Added sub tests_filterbuggyflags()
----------------------------
revision 2.212
date: 2022/05/19 11:18:09; author: gilles; state: Exp; lines: +67 -16
Bugfix. Do not crash when Proc::ProcessTable field pctmem does not exist.
----------------------------
revision 2.211
date: 2022/05/19 08:37:14; author: gilles; state: Exp; lines: +10 -10
Last commit 2.210 did not pass the unit tests. Fixed.
----------------------------
revision 2.210
date: 2022/05/19 08:09:57; author: gilles; state: Exp; lines: +10 -10
Added filtering \JUNK flag in cgi context or with --filterbuggyflags
----------------------------
revision 2.209
date: 2022/05/15 11:03:02; author: gilles; state: Exp; lines: +37 -9
Enhancement. heavy_load_percent_threshold now based on memory_footprint_average_bytes 300 MB
----------------------------
revision 2.208
date: 2022/05/13 20:14:25; author: gilles; state: Exp; lines: +8 -8
90%
----------------------------
revision 2.207
date: 2022/05/12 16:31:10; author: gilles; state: Exp; lines: +21 -21
memory limit to quit from 100% to 50%. Quick fix.
----------------------------
revision 2.206
date: 2022/05/12 11:07:07; author: gilles; state: Exp; lines: +139 -54
Added dependency. Perl module Proc::ProcessTable. Not mandatory anyway. For now.
CGI context. Exit when 100% of RAM memory is used by processes. Exit with status value 69 and message "EX_UNAVAILABLE: service unavailable".
Added the % of RAM used by all processes in the memory infi line.
----------------------------
revision 2.205
date: 2022/05/09 21:29:07; author: gilles; state: Exp; lines: +264 -247
perlcritic. Change all "= shift ;" to " = shift @ARG ;"
----------------------------
revision 2.204
date: 2022/05/03 22:28:53; author: gilles; state: Exp; lines: +34 -9
Do not report final emails when --dry or --justfolders
----------------------------
revision 2.203
date: 2022/04/26 22:57:46; author: gilles; state: Exp; lines: +42 -17
Bugfix. Allow quota like: QUOTA "user-defined quota (konsoleH)" (STORAGE 988 48829 MESSAGE 20 20)
Enhancement. Added --memorystress to check memory crunching in normal run.
----------------------------
revision 2.202
date: 2022/04/18 23:40:20; author: gilles; state: Exp; lines: +89 -20
CGI context. Do not append the log file name to ../list_all_logs_auto.txt when there is no parameters.
----------------------------
revision 2.201
date: 2022/04/09 08:45:27; author: gilles; state: Exp; lines: +12 -12
Moved all getppid to mygetppid (it adds a comment on Windows, where ppid is too complicated to get.
----------------------------
revision 2.200
date: 2022/04/04 16:05:55; author: gilles; state: Exp; lines: +14 -10 date: 2022/04/04 16:05:55; author: gilles; state: Exp; lines: +14 -10
typo. "check the certificate server" => "check the server certificate." typo. "check the certificate server" => "check the server certificate."
---------------------------- ----------------------------

View File

@ -1,5 +1,5 @@
#!/bin/cat #!/bin/cat
$Id: FAQ.Archiving.txt,v 1.26 2022/01/11 12:55:53 gilles Exp gilles $ $Id: FAQ.Archiving.txt,v 1.27 2022/05/19 08:56:06 gilles Exp gilles $
This documentation is also available online at This documentation is also available online at
https://imapsync.lamiral.info/FAQ.d/ https://imapsync.lamiral.info/FAQ.d/
@ -110,7 +110,7 @@ Q. How to move emails from one IMAP folder to another, either on the
R1. Solution: R1. Solution:
imapsync ... --minage 365 --folder Inbox --f1f2 INBOX=Archive --delete1 --noexpungeaftereach imapsync ... --minage 365 --folder INBOX --f1f2 INBOX=Archive --delete1 --noexpungeaftereach
Use the option --noexpungeaftereach if speed is a concern. Use the option --noexpungeaftereach if speed is a concern.
Use the option --delete1 if you want to move messages, instead of just copy/sync them. Use the option --delete1 if you want to move messages, instead of just copy/sync them.

View File

@ -1,5 +1,5 @@
#!/bin/cat #!/bin/cat
$Id: FAQ.Authentication_failure.txt,v 1.15 2022/03/03 11:43:55 gilles Exp gilles $ $Id: FAQ.Authentication_failure.txt,v 1.16 2022/08/17 09:18:17 gilles Exp gilles $
This documentation is also available online at This documentation is also available online at
https://imapsync.lamiral.info/FAQ.d/ https://imapsync.lamiral.info/FAQ.d/
@ -25,17 +25,17 @@ Q. Imapsync fails with the following error, what can I do?
Host1 failure: Error login on [imap.example.com] with user [foo] auth [LOGIN]: 2 NO [AUTHENTICATIONFAILED] Authentication failed Host1 failure: Error login on [imap.example.com] with user [foo] auth [LOGIN]: 2 NO [AUTHENTICATIONFAILED] Authentication failed
R. One over four imapsync syncs ends up quickly with the error message R. One over four imapsync synchronizations end up quickly with the error message
"Authentication failed" or "NO LOGIN failed" or a similar message. "Authentication failed" or "NO LOGIN failed" or a similar message.
Authentication failure is the primary failure with imapsync Authentication failure is the primary failure with imapsync
and since nothing tangible can be done without authentication, and since nothing tangible can be done without authentication,
this stage must succeed to go further. this stage must succeed to go further.
Here are some advices to get you pass this difficult stage of authentication: Here is some advice to get you to pass this difficult stage of authentication:
* Triple check each credential parameter. It's not always a password problem, * Triple-check each credential parameter. It's not always a password problem,
it can be the wrong host or the wrong user. it can be the wrong host or the wrong user.
There are three parameters at each side: There are three parameters on each side:
* triple check --host1 * triple check --host1
* triple check --user1 * triple check --user1
* triple check --password1 * triple check --password1
@ -43,7 +43,7 @@ Here are some advices to get you pass this difficult stage of authentication:
* triple check --user2 * triple check --user2
* triple check --password2 * triple check --password2
* If you can authenticate successfully with an other imap client software * If you can authenticate successfully with another imap client software
like Thunderbird or Outlook or Sparrow then it is a very good sign to like Thunderbird or Outlook or Sparrow then it is a very good sign to
authenticate successfully with imapsync. Examine the parameters of authenticate successfully with imapsync. Examine the parameters of
this other imap client and copy them as is for imapsync. this other imap client and copy them as is for imapsync.
@ -52,7 +52,7 @@ Here are some advices to get you pass this difficult stage of authentication:
At the beginning of the output, imapsync dumps all its command At the beginning of the output, imapsync dumps all its command
line parameters; it's the line after "Command line used:". line parameters; it's the line after "Command line used:".
With --showpasswords, imapsync prints the passwords received With --showpasswords, imapsync prints the passwords received
instead of the string MASKED. It helps for debugging quoting issues. instead of the string MASKED. It helps with debugging quoting issues.
Option --showpasswords shows passwords again when the IMAP dialog Option --showpasswords shows passwords again when the IMAP dialog
is dumped by --debugimap option. Search for a line like is dumped by --debugimap option. Search for a line like
"Sending: 2 LOGIN test1 secret1" (secret1 is the password here). "Sending: 2 LOGIN test1 secret1" (secret1 is the password here).
@ -64,18 +64,18 @@ Here are some advices to get you pass this difficult stage of authentication:
https://imapsync.lamiral.info/FAQ.d/FAQ.Passwords_on_Mac.txt https://imapsync.lamiral.info/FAQ.d/FAQ.Passwords_on_Mac.txt
The quickest trick may be to change the password temporally The quickest trick may be to change the password temporally
with easy characters like the classical alphabet, a long with easy characters like the classical alphabet, one long
string still ensure strong security. string still ensures strong security.
* Sometimes some servers announce they support LOGIN but it * Sometimes some servers announce they support LOGIN but it
actually fails because the authentication mechanism fails because the authentication mechanism
working is something else like CRAM-MD5 or PLAIN. working is something else like CRAM-MD5 or PLAIN.
So: So:
* Try --authmech1 CRAM-MD5 (or --authmech2 CRAM-MD5) * Try --authmech1 CRAM-MD5 (or --authmech2 CRAM-MD5)
* Try --authmech1 PLAIN (or --authmech2 PLAIN) * Try --authmech1 PLAIN (or --authmech2 PLAIN)
* Manually test a login via ssl. * Manually test a login via ssl.
Use either ncat or telnet-ssl or openssl commands like in the Use either ncat or telnet-ssl or openssl commands, like in the
following examples with imap.gmail.com server: following examples with imap.gmail.com server:
ncat --ssl -C imap.gmail.com 993 ncat --ssl -C imap.gmail.com 993
@ -85,7 +85,7 @@ Here are some advices to get you pass this difficult stage of authentication:
Replace imap.gmail.com by your imap server. Replace imap.gmail.com by your imap server.
The three commands do the same work here. The three commands do the same work here.
Tipical dialog for an imap LOGIN command: Typical dialog for an imap LOGIN command:
* OK Gimap ready for requests from 78.196.254.58 q1mb175739668wix * OK Gimap ready for requests from 78.196.254.58 q1mb175739668wix
a LOGIN "gilles.lamiral@gmail.com" "secret" a LOGIN "gilles.lamiral@gmail.com" "secret"

View File

@ -1,5 +1,5 @@
#!/bin/cat #!/bin/cat
$Id: FAQ.Big_Mailbox.txt,v 1.7 2021/02/01 21:47:41 gilles Exp gilles $ $Id: FAQ.Big_Mailbox.txt,v 1.8 2022/04/23 13:45:48 gilles Exp gilles $
This document is also available online at This document is also available online at
https://imapsync.lamiral.info/FAQ.d/ https://imapsync.lamiral.info/FAQ.d/

View File

@ -1,4 +1,4 @@
$Id: FAQ.Capacity_Planning.txt,v 1.3 2022/03/22 11:12:25 gilles Exp gilles $ $Id: FAQ.Capacity_Planning.txt,v 1.6 2022/04/23 13:45:59 gilles Exp gilles $
This documentation is also available online at This documentation is also available online at
https://imapsync.lamiral.info/FAQ.d/ https://imapsync.lamiral.info/FAQ.d/
@ -19,18 +19,49 @@ My current question is: Shall I use
* N/2 4GB hosts * N/2 4GB hosts
* N/4 8GB hosts * N/4 8GB hosts
Let's do some maths Let's do some observations and maths
The observations are done on the standalone imapsync online which
characteristics are:
CPU: Intel i5-2300 with 4 cores
RAM: 16 GB
NET: 100 Mbps symetrical, 12.5 MBytes/s symetrical,
so 25 MBytes/s max for a global imapsync rate.
Disks: I don't know.
System: FreeBSD 11.4
===== CPU =====
The CPU can be an issue. On average, an imapsync run takes 5% of the The CPU can be an issue. On average, an imapsync run takes 5% of the
overall cpu time for a Intel i5-2300 with 4 cores. It implies 20 overall cpu time for a Intel i5-2300 with 4 cores. It implies 20
imapsync runs is ok on the current online host before the cpus become imapsync runs is ok on the current online host before the cpus become
the bottleneck. As a rule of thumb, imapsync takes 20% of a cpu core. the bottleneck. As a rule of thumb, imapsync takes 20% of a cpu core.
In the Intel i5-2300 4 cores, so far, the maximum number of imapsync
processes has been 68, which is 3 times what the system should
support in a standard imapsync workload. For this workload, the
imapsync performamces were not good, the server could not handle the load
and was even out of order for a while. For 40 imapsync processes, the
the performances are ok.
===== RAM =====
The RAM can be an issue. On average, an imapsync run takes 250 MB. So The RAM can be an issue. On average, an imapsync run takes 250 MB. So
4 imapsync processes per GB is the limit before swapping to disk, 4 imapsync processes per GB is the limit before swapping to disk,
which is a known phenomenum telling when memory becomes the bottleneck. which is a known phenomenum telling when memory becomes the bottleneck.
16 GB allows 64 imapsync processes. 16 GB allows 64 imapsync processes.
On the 16GB, so far, the maximum memory usage taken by imapsync processes was
13 GB. For that value, the one minute load was 10 or more, the number of
imapsync processes was around 40, the total bandwidth was around 19 MiB/s.
===== LINK =====
The Bandwidth I/O can be an issue. The "Average bandwidth rate" value The Bandwidth I/O can be an issue. The "Average bandwidth rate" value
given by imapsync at the end of a transfer, and also the bandwidth given by imapsync at the end of a transfer, and also the bandwidth
rate given during the sync on the ETA line, is the total size of all rate given during the sync on the ETA line, is the total size of all
@ -43,13 +74,30 @@ On average, an imapsync runs at 3 Mbps both ways, rx and tx, so 6 Mbps
in total. So a 100 Mbps symetric link allows 33 imapsync processes in total. So a 100 Mbps symetric link allows 33 imapsync processes
before the link becomes the bottleneck. before the link becomes the bottleneck.
The best minutes observed so far are a global 187 Mpbs rate (23 MiB/s) The best minutes observed so far are a global 187 Mpbs rate (~23 MiB/s)
on a 100 Mbps symetrical link done by 28 imapsync processes in parallel, on a 100 Mbps symetrical link done by 28 imapsync processes in parallel,
6.7 Mbps per process at that minute. But the best minutes observed for a 6.7 Mbps per process at that minute. But the best minutes observed for a
single imapsync process is at 103 Mbps, the rx/tx link limit. single imapsync process is at 103 Mbps (~13 MiB/s), the rx/tx link limit.
===== DISKS =====
The harddisk I/O can be an issue. I don't measure it yet because The harddisk I/O can be an issue. I don't measure it yet because
imapsync doesn't perform heavy I/0 where it runs. Well, I don't know, imapsync doesn't perform heavy I/0 where it runs. Well, I don't know,
no measure is no knowledge, just guesses. no measure is no knowledge, just guesses.
===== Repartition ======
Let's consider we have a bunch of different hosts able to run imapsync
processes. How should we distribute imapsync jobs among them?
A simple rule is "do not add more load to a host when one of the ressources
has reached its maximal. The ressources are memory, bandwidth, cpu, disk.
I ignore the disk part for now.
maximum number of imapsync processes for a host
= min( 4 * RAM_in_GB, 10 * nb_cores, bandwidth_in_mbps / 3 )

View File

@ -1,5 +1,5 @@
#!/bin/cat #!/bin/cat
$Id: FAQ.Contacts_Calendars.txt,v 1.16 2022/04/05 13:48:52 gilles Exp gilles $ $Id: FAQ.Contacts_Calendars.txt,v 1.17 2022/05/31 22:21:55 gilles Exp gilles $
This documentation is also available online at This documentation is also available online at
https://imapsync.lamiral.info/FAQ.d/ https://imapsync.lamiral.info/FAQ.d/
@ -21,10 +21,10 @@ Now the questions again with their answers.
Q. Can I copy or sync Contacts, Calendars, Tasks or Chat messages with imapsync? Q. Can I copy or sync Contacts, Calendars, Tasks or Chat messages with imapsync?
R. No, Imapsync can't migrate Contacts, Calendars, Tasks nor Chat messages. R. No, Imapsync can't migrate Contacts, Calendars, Tasks nor Chat messages.
It's because most IMAP servers don't get contacts and calendars It's because most IMAP servers don't get Contacts and Calendar
events via IMAP. In other words, messages synced by imapsync from events via IMAP. In other words, messages synced by imapsync from
Contacts/Calendars/Tasks/Chat folders are not used by email servers to set Contacts/Calendars/Tasks/Chat folders are not used by email servers to set
or get the contacts, calendars, tasks or chat messages. or get the contacts, calendars, tasks, or chat messages.
No way via IMAP, no way via imapsync. No way via IMAP, no way via imapsync.
So it's a good idea to avoid syncing contacts and calendars when So it's a good idea to avoid syncing contacts and calendars when
@ -55,20 +55,20 @@ b) From Gmail to Gmail, export and import calendars in ical format,
c) For Outlook, use caldavsynchronizer. c) For Outlook, use caldavsynchronizer.
Homepage: http://caldavsynchronizer.org/ Homepage: http://caldavsynchronizer.org/
Outlook CalDav Synchronizer is a free Outlook Plugin, which synchronizes Outlook CalDav Synchronizer is a free Outlook Plugin, which synchronizes
events, tasks and contacts between Outlook and Google, SOGo, Nextcloud or events, tasks, and contacts between Outlook and Google, SOGo, Nextcloud or
any other CalDAV or CardDAV server. any other CalDAV or CardDAV server.
Supported Outlook versions are Office 365, 2019, 2016, 2013, 2010 and 2007. Supported Outlook versions are Office 365, 2019, 2016, 2013, 2010, and 2007.
Free and Open Source software tool. Free and Open Source software tool.
d) Etc. Search the web. There's also specific tools and paid services. d) Etc. Search the web. There are also specific tools and paid services.
There's no silver bullet to migrate Calendars and Contacts, There's no silver bullet to migrate Calendars and Contacts,
if you find one, tell me! if you find one, tell me!
Also consider asking experts at Sumatra company Also, consider asking experts at the Sumatra company
https://twitter.com/sumatra_dev https://twitter.com/sumatra_dev
http://sumatra.com/ http://sumatra.com/
e) I plan to make tools for that but so far nothing has began e) I plan to make tools for that but so far nothing has begun
more than this discussion: more than this discussion:
http://linux-france.tk/prj/imapsync_list/msg01797.html http://linux-france.tk/prj/imapsync_list/msg01797.html
http://linux-france.tk/prj/imapsync_list/msg01811.html http://linux-france.tk/prj/imapsync_list/msg01811.html
@ -77,10 +77,10 @@ http://linux-france.tk/prj/imapsync_list/msg01811.html
Q. How can I avoid copying Calendar or Contacts folders? Q. How can I avoid copying Calendar or Contacts folders?
R. 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 the --exclude option. First, you have to search what is their
exact name. The folders listing printed by imapsync at the exact name. The listing of folders printed by imapsync at the
beginning of a run will surely help to find their names. beginning of a run will surely help to find their names.
Assuming their names are "Calendars" and "Contacts" use then: Assuming their names are "Calendars" and "Contacts", use:
imapsync ... --exclude "Calendar" --exclude "Contacts" imapsync ... --exclude "Calendar" --exclude "Contacts"
@ -89,7 +89,7 @@ R. You can avoid synchronizing Calendar or Contacts folders with
like "MyCalendarZ" or "TheContactsImDoneWith". like "MyCalendarZ" or "TheContactsImDoneWith".
Also, case matters: "calendar" does not match "Calendar". Also, case matters: "calendar" does not match "Calendar".
To stritly avoid only "Calendar" or "Contacts" use To strictly avoid only "Calendar" or "Contacts" use
the following the following
On windows: On windows:

View File

@ -1,5 +1,5 @@
#!/bin/cat #!/bin/cat
$Id: FAQ.Dovecot.txt,v 1.13 2021/12/03 12:51:23 gilles Exp gilles $ $Id: FAQ.Dovecot.txt,v 1.14 2022/06/16 09:06:34 gilles Exp gilles $
This documentation is also available online at This documentation is also available online at
https://imapsync.lamiral.info/FAQ.d/ https://imapsync.lamiral.info/FAQ.d/
@ -15,6 +15,10 @@ Questions answered in this FAQ are:
Q. Is there imapsync specific options to deal with Dovecot? Q. Is there imapsync specific options to deal with Dovecot?
Q. The login fails with the error:
Err 1/1: Host2 failure: Error login on [...] with user [...] auth [LOGIN]: timeout waiting 120s for data from server (5x)
What can it be?
Q. Subfolders are not created by imapsync and the error is Q. Subfolders are not created by imapsync and the error is
"Mailbox doesn't allow inferior mailboxes" "Mailbox doesn't allow inferior mailboxes"
@ -34,7 +38,15 @@ Now the questions again with their answers.
Q. Is there imapsync specific options to deal with Dovecot? Q. Is there imapsync specific options to deal with Dovecot?
R. Dovecot is ok with imapsync, nothing special is needed, just the R. Dovecot is ok with imapsync, nothing special is needed, just the
basic option, the credentials, are needed. basic options, ie, the credentials, are needed.
=======================================================================
Q. The login fails with the error:
Err 1/1: Host2 failure: Error login on [...] with user [...] auth [LOGIN]: timeout waiting 120s for data from server (5x)
What can it be?
R. It can be special characters in the password. Change it with only
normal characters, characters from a-z A-Z 0-9
======================================================================= =======================================================================
Q. How to migrate to Dovecot with an admin/MasterUser account? Q. How to migrate to Dovecot with an admin/MasterUser account?

View File

@ -1,5 +1,5 @@
#!/bin/cat #!/bin/cat
$Id: FAQ.Emptying.txt,v 1.12 2021/09/09 11:53:53 gilles Exp gilles $ $Id: FAQ.Emptying.txt,v 1.14 2022/06/08 11:08:39 gilles Exp gilles $
This documentation is also available online at This documentation is also available online at
https://imapsync.lamiral.info/FAQ.d/ https://imapsync.lamiral.info/FAQ.d/
@ -7,7 +7,7 @@ https://imapsync.lamiral.info/FAQ.d/
https://imapsync.lamiral.info/FAQ.d/FAQ.Emptying.txt https://imapsync.lamiral.info/FAQ.d/FAQ.Emptying.txt
======================================================================= =======================================================================
Imapsync tip to empty an account. Imapsync tips about deletions.
======================================================================= =======================================================================
Questions answered in this FAQ are: Questions answered in this FAQ are:
@ -24,6 +24,8 @@ Q. How to delete emails older than 90 days with imapsync?
Q. How to delete emails matching a certain criterium with imapsync? Q. How to delete emails matching a certain criterium with imapsync?
Q. Is there a way to delete the destination folders when the source
folders are no longer there?
Now the questions again with their answers. Now the questions again with their answers.
@ -128,5 +130,24 @@ Example:
--host2 test.lamiral.info --user2 foo --password2 secret \ --host2 test.lamiral.info --user2 foo --password2 secret \
--delete1 --noexpungeaftereach --search "SENTBEFORE 31-Dec-2010" --delete1 --noexpungeaftereach --search "SENTBEFORE 31-Dec-2010"
======================================================================
Q. Is there a way to delete the destination folders when the source
folders are no longer there?
R. Yes, use --delete2folders
--delete2folders : Delete folders in host2 that are not in host1.
For safety, first try it like this, it is safe:
--delete2folders --dry --justfolders --nofoldersizes
and see what folders will be deleted.
--delete2foldersonly reg : Delete only folders matching the regex reg.
Example: --delete2foldersonly "/^Junk$|^INBOX.Junk$/"
This option activates --delete2folders
--delete2foldersbutnot reg : Do not delete folders matching the regex rex.
Example: --delete2foldersbutnot "/Tasks$|Contacts$|Foo$/"
This option activates --delete2folders
======================================================================= =======================================================================
======================================================================= =======================================================================

View File

@ -1,5 +1,5 @@
#!/bin/cat #!/bin/cat
$Id: FAQ.Flags.txt,v 1.26 2021/04/25 20:47:05 gilles Exp gilles $ $Id: FAQ.Flags.txt,v 1.28 2022/06/22 17:07:35 gilles Exp gilles $
This documentation is also available online at This documentation is also available online at
https://imapsync.lamiral.info/FAQ.d/ https://imapsync.lamiral.info/FAQ.d/
@ -22,6 +22,9 @@ Q. Exchange sends an email to any sender whose email is deleted
without reading. It's called "unread notifications". without reading. It's called "unread notifications".
How to set the \Seen flag on host1 (source system) before syncing? How to set the \Seen flag on host1 (source system) before syncing?
Q. Every single mail synced to exchange online owns the
category $MDNSent after migration. How can I avoid this?
Q. Does imapsync retain the \Answered and $Forwarded flags? Q. Does imapsync retain the \Answered and $Forwarded flags?
Q. How to fix this error: BAD Invalid system flag \FORWARDED Q. How to fix this error: BAD Invalid system flag \FORWARDED
@ -174,6 +177,18 @@ https://translate.google.com/translate?sl=auto&tl=en&u=https%3A%2F%2Fwww.ci-solu
German original: German original:
https://www.ci-solution.com/blog/artikel/ungelesen-geloescht-verhindern.html https://www.ci-solution.com/blog/artikel/ungelesen-geloescht-verhindern.html
(Link from Oliver B.) (Link from Oliver B.)
======================================================================
Q. Every single mail synced to exchange online owns the
category $MDNSent after migration. How can I avoid this?
R. To remove the flag $MDNSent from all messages, use:
imapsync ... --regexflag "s/\$MDNSent//g"
See also the document
https://imapsync.lamiral.info/FAQ.d/FAQ.Flags.txt
======================================================================= =======================================================================
Q. Does imapsync retain the \Answered and $Forwarded flags? Q. Does imapsync retain the \Answered and $Forwarded flags?
@ -305,7 +320,8 @@ You can try --nofilterflags straightaway without the
"other thunderbird" proposal. "other thunderbird" proposal.
There is also the possibility to map flags across servers There is also the possibility to map flags across servers
with --regexflags with the option --regexflag. See some --regexflag examples
above.
======================================================================= =======================================================================

View File

@ -1,5 +1,5 @@
#!/bin/cat #!/bin/cat
$Id: FAQ.Folders_Sizes.txt,v 1.5 2021/07/04 23:02:32 gilles Exp gilles $ $Id: FAQ.Folders_Sizes.txt,v 1.7 2022/04/23 13:45:15 gilles Exp gilles $
This documentation is also available online at This documentation is also available online at
https://imapsync.lamiral.info/FAQ.d/ https://imapsync.lamiral.info/FAQ.d/
@ -61,11 +61,16 @@ R. There are several reasons to explain the different counts between
found at the end on the line "Messages found duplicate on host1". found at the end on the line "Messages found duplicate on host1".
To sync duplicates, use the option --syncduplicates To sync duplicates, use the option --syncduplicates
5) There are duplicate messages on host2 so host2 is 5) There are cross-duplicate messages on host1, same messages in different
folders, and you use --gmail1 or --skipcrossduplicates, which avoid
copying cross-duplicate messages in more than one folder on host2.
Use --noskipcrossduplicates if you want imapsync to sync cross-duplicates.
6) There are duplicate messages on host2 so host2 is
bigger than host1. Solution: use --delete2duplicates to delete bigger than host1. Solution: use --delete2duplicates to delete
the host2 duplicates. the host2 duplicates.
6) Cosmic rays... 7) Cosmic rays...
The important part to take into account for a good and well done sync The important part to take into account for a good and well done sync
is the last lines of imapsync. A good sync is when you encounter the is the last lines of imapsync. A good sync is when you encounter the

View File

@ -1,5 +1,5 @@
#!/bin/cat #!/bin/cat
# $Id: FAQ.General.txt,v 1.245 2022/04/05 13:55:47 gilles Exp gilles $ # $Id: FAQ.General.txt,v 1.246 2022/06/08 10:57:52 gilles Exp gilles $
======================================================================= =======================================================================
General FAQ for imapsync General FAQ for imapsync
@ -570,20 +570,6 @@ In imapsync, you can achieve this by using the following options:
--proxyauth1 \ --proxyauth1 \
--passfile admin.txt --passfile admin.txt
======================================================================
Q. Is there a way to delete the destination folder when the source
folder is no longer there?
R. Yes, use --delete2folders
--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 <regex>: Deleted only folders matching regex.
Example: --delete2foldersonly "/^Junk$|^INBOX.Junk$/"
--delete2foldersbutnot <regex>: Do not delete folders matching regex.
Example: --delete2foldersbutnot "/Tasks$|Contacts$|Foo$/"
======================================================================= =======================================================================
Q. I would love to have a function to inject lines in the header. Q. I would love to have a function to inject lines in the header.
Things like "X-migrated-from-foo: 20100617" Things like "X-migrated-from-foo: 20100617"

View File

@ -1,5 +1,5 @@
#!/bin/cat #!/bin/cat
$Id: FAQ.Gmail.txt,v 1.87 2022/02/10 12:42:52 gilles Exp gilles $ $Id: FAQ.Gmail.txt,v 1.92 2022/06/28 11:03:40 gilles Exp gilles $
This document is also available online at This document is also available online at
https://imapsync.lamiral.info/FAQ.d/ https://imapsync.lamiral.info/FAQ.d/
@ -56,7 +56,9 @@ Q. What are the Gmail imap names of the folders
Q. Can I transfer Gmail "Chat" messages with imapsync? Q. Can I transfer Gmail "Chat" messages with imapsync?
Q. Can I safely use --useuid for Gmail transfers? Q. Can I safely use --useuid or --usecache for Gmail transfers?
Q. Can I use --syncduplicates Gmail transfers?
Q. Gmail does not really delete messages in folder [Gmail]/All Mail Q. Gmail does not really delete messages in folder [Gmail]/All Mail
What happens? What can I do? What happens? What can I do?
@ -95,77 +97,22 @@ it has to be allowed in the Gmail configuration part:
-> Click on the button "Save changes" at the bottom of the page. -> Click on the button "Save changes" at the bottom of the page.
That's not finished, there is also the authentication issue to consider. That's not finished, there is also the authentication issue to consider.
There are three different ways to authenticate to Gmail with Imapsync, There are two different ways to authenticate to Gmail with Imapsync,
either: either:
1) "Access for less secure apps" 1) "App password with 2-step verification"
2) "2-step verification"
3) XOauth2 ready for groups on any OS or or
2) XOauth2 ready for groups on any OS or
for individual Gmail authentication on Linux. for individual Gmail authentication on Linux.
For the last one, XOauth2, see the document For the second one, XOauth2, see the document
https://imapsync.lamiral.info/FAQ.d/FAQ.XOAUTH2.txt https://imapsync.lamiral.info/FAQ.d/FAQ.XOAUTH2.txt
1) "Access for less secure apps", the first way to authenticate 1) "App password with 2-step verification" is the first way to
to Gmail with Imapsync. This is the easiest way because authenticate to Gmail with Imapsync.
you just have to turn one button on.
Go to https://myaccount.google.com/
Click on the Security tab on the left menu or go directly to
https://myaccount.google.com/security?gar=1
-> Verify 2-step verification is OFF
https://myaccount.google.com/security?hl=en&pli=1&nlr=1#signin
Near the end of the page,
-> Turn ON "Access for less secure apps"
https://www.google.com/settings/security/lesssecureapps
https://support.google.com/accounts/answer/6010255?hl=en
Here is what Google add on this "Access for less secure apps":
"Some apps and devices use less secure sign-in technology, which makes your
account vulnerable. You can turn off access for these apps, which we recommend,
or turn it on if you want to use them despite the risks.
Google will automatically turn this setting OFF if its not being used."
So after a while, this button will be turned off again.
I suggest to turn it off once the job with imapsync is finished.
If you forgot to also enable imap you end up with login failure like this one:
"Host failure: Error login on [imap.gmail.com] with user [xxxx@gmail.com] auth [LOGIN]:
NO [ALERT] Your account is not enabled for IMAP use. Please visit your Gmail
settings page and enable your account for IMAP access. (Failure)"
After using imapsync on a Gmail account, sometimes you may encounter an email
with the title "Critical security alert for your linked Google Account"
and the body
"Sign-in attempt was blocked for your linked Google Account
xxxx@gmail.com
Someone just used your password to try to sign in to your account from
a non-Google app. Google blocked them, but you should check what happened.
Review your account activity to make sure that no one else has access."
Click on the button "Check Activity" and let Gmail know you were the author
of the sign in.
Sometimes, with Gsuite, the login for the users are ok with imapsync
for a while then they become forbidden with
"failure: Error login on [imap.gmail.com] with user [xxx] auth [LOGIN]:
2 NO [AUTHENTICATIONFAILED] Invalid credentials (Failure)"
In that case, use:
https://admin.google.com/AdminHome?hl=fr#ServiceSettings/notab=1&service=securitysetting&subtab=lesssecureappsaccess
to allow "Access for less secure apps to all users"
(Thanks to Sébastien R. for this input)
Remark: even if the user has enabled less secure apps at Super Admin
and reseller level, it still needs amended at
https://myaccount.google.com/security
(Thanks Tony@gle for this last tip!)
2) "2-step verification" the second way to authenticate
to Gmail with Imapsync.
Go to Go to
https://myaccount.google.com/security https://myaccount.google.com/security
@ -795,6 +742,12 @@ message, and Gmail will always accept and throw away the new copy. It
ends up with no duplicates on Gmail but a waste of bandwidth and time, ends up with no duplicates on Gmail but a waste of bandwidth and time,
which is the opposite goal of --usecache implied by --useuid. which is the opposite goal of --usecache implied by --useuid.
=======================================================================
Q. Can I use --syncduplicates Gmail transfers?
R. Yes, but Gmail will accept the new duplicate message and
throw away the new copy. It ends up with no duplicates on Gmail but
a waste of bandwidth and time.
======================================================================= =======================================================================
Q. Gmail does not really delete messages in folder [Gmail]/All Mail Q. Gmail does not really delete messages in folder [Gmail]/All Mail

View File

@ -1,5 +1,5 @@
#!/bin/cat #!/bin/cat
$Id: FAQ.ISP.txt,v 1.13 2021/12/06 20:02:39 gilles Exp gilles $ $Id: FAQ.ISP.txt,v 1.14 2022/05/22 08:04:05 gilles Exp gilles $
This document is also available online at This document is also available online at
https://imapsync.lamiral.info/FAQ.d/ https://imapsync.lamiral.info/FAQ.d/
@ -9,7 +9,8 @@ https://imapsync.lamiral.info/FAQ.d/FAQ.ISP.txt
Imapsync tips for ISP. Specific issues and solutions. Imapsync tips for ISP. Specific issues and solutions.
======================================================================= =======================================================================
* IMAPSync - usage scenario with ISP - by Flavio Zarur Lucarelli (https://www.lucanet.com.br) * IMAPSync - usage scenario with ISP - by Flavio Zarur Lucarelli
(https://www.lucanet.com.br)
I thought I had to write a quick step by step on my attempts to learn I thought I had to write a quick step by step on my attempts to learn
the imapsync features that matter the most, so it works as we expected the imapsync features that matter the most, so it works as we expected
@ -20,9 +21,10 @@ Lamiral for all his help and hard work.
First of all, remember to use --dry to test things first always and First of all, remember to use --dry to test things first always and
check the log file to see what would actually happen. check the log file to see what would actually happen.
This type of copy keeps destination exactly like source (except, it doesn't This type of copy keeps destination exactly like source (except, it
copy duplicates), so use it ONLY before changing your MX to the new server, doesn't copy duplicates), so use it ONLY before changing your MX to
as it will delete whatever is in destination which isn't in source. the new server, as it will delete whatever is in destination which
isn't in source.
imapsync --host1 imap.myisp.com --user1 user@domain.com --password1 pwd \ imapsync --host1 imap.myisp.com --user1 user@domain.com --password1 pwd \
--host2 imap.myisp.com --user2 user@domain.com --password2 pwd \ --host2 imap.myisp.com --user2 user@domain.com --password2 pwd \
@ -119,8 +121,9 @@ If your last full sync was 2 days ago, then use --maxage 2
Goal is to get all the new emails (2 last days) from source. Goal is to get all the new emails (2 last days) from source.
Another alternative for syncing after the MX change, which Lamiral Another alternative for syncing after the MX change, which Lamiral
suggests, involves deleting emails from source from the last day. suggests, involves deleting emails from source from the last day. I
I prefer the method explained above. Anyway, here is this other cenario... prefer the method explained above. Anyway, here is this other
scenario...
Something like this: Something like this:
@ -186,17 +189,50 @@ Option --automap is also good to do most of the translate job.
3) Folders to exclude, to speed up syncs, etc. 3) Folders to exclude, to speed up syncs, etc.
--exclude "^Backups" --exclude "(?i)spam" --exclude "(?i)junk" --exclude "(?i)trash" --exclude "(?i)lixeira" --exclude "(?i)Deleted Items" imapsync ... --exclude "^Backups" --exclude "(?i)spam" --exclude "(?i)junk" --exclude "(?i)trash" --exclude "(?i)lixeira" --exclude "(?i)Deleted Items"
4) Delete older than 1 year from an account. 4) Delete older than 1 year from an account.
Use the account itself as source and destination and use: Use the account itself as source and destination and use:
--minage 365 --delete1 imapsync ... --minage 365 --delete1
5) Check size of folders in an account. Use Imapsync with same account as source and destination, with this parameter: 5) Check size of folders in an account. Use Imapsync with same account
as source and destination, with this parameter:
imapsync ... --justfoldersizes
6) If you have problems copying messages that have labels which are
not supported, there are a few ways out.
We use Dovecot and it doesn't support a series of labels, except the
standard ones. By default, imapsync won't copy messages that have
labels not supported by the recipient server. For that reason, I now
always use --filterbuggyflags and tell customers that not all labels
are copied.
There are other alternatives, such as replacing problematic flags with
other names or copying just standard flags, detailing which ones to
copy, however, --filterbuggyflags was the easiest solution, which
worked fine for us.
7) Definitely worth reading about dupes, here
https://imapsync.lamiral.info/FAQ.d/FAQ.Duplicates.txt, if you have
problems. Always try to check, even if by sampling, if dupes
occur. In a big migration, when you do several passes, try to check a
few accounts.
The one issue we had with many duplicated emals in the destinatio, was
solved with the first solution in the above FAQ, using this syntax,
when copying from source to the destination, hence effectively
removing the dupes.
imapsync ... --useheader "Message-Id" --delete2duplicates
Note that --delete2duplicates is on when --delete2 is used, unless
--syncduplicates is used or --nodelete2duplicates is used.
--justfoldersizes
======================================================================= =======================================================================
======================================================================= =======================================================================

View File

@ -1,5 +1,5 @@
#!/bin/cat #!/bin/cat
$Id: FAQ.Massive.txt,v 1.32 2021/11/01 11:30:48 gilles Exp gilles $ $Id: FAQ.Massive.txt,v 1.34 2022/07/14 16:00:23 gilles Exp gilles $
This document is also available online at This document is also available online at
https://imapsync.lamiral.info/FAQ.d/ https://imapsync.lamiral.info/FAQ.d/
@ -14,7 +14,7 @@ Questions answered here are:
Q. How long will take the whole migration? Q. How long will take the whole migration?
Q. I need to migrate hundred accounts, how can I do? Q. I need to migrate hundreds of accounts, how can I do that?
Q. I have to migrate 500k users using 400 TB of disk space. Q. I have to migrate 500k users using 400 TB of disk space.
How do I proceed? How about speed? How do I proceed? How about speed?
@ -23,7 +23,7 @@ Q. How to determine where is the bottleneck in an imapsync process?
Q. Can I run several instances of imapsync in parallel on a Windows host? Q. Can I run several instances of imapsync in parallel on a Windows host?
Q. I run multiple imapsync applications at the same time then get a Q. I run multiple imapsync applications at the same time and then get a
warning "imapsync.pid already exists, overwriting it". warning "imapsync.pid already exists, overwriting it".
Is this a potential problem when trying to sync multiple Is this a potential problem when trying to sync multiple
IMAP account in parallel? IMAP account in parallel?
@ -31,17 +31,18 @@ Q. I run multiple imapsync applications at the same time then get a
======================================================================= =======================================================================
Q. How long will take the whole migration? Q. How long will take the whole migration?
R1. First you have to consider several periods. There is the global R1. First, you have to consider several periods. There is the global
period, from when the migration process is decided to the final end period, from when the migration process is decided to the end,
where all mailboxes are migrated. This global period can be divided where all mailboxes are migrated. This global period can be divided
into three smaller periods. into three smaller periods.
The first period is the analyse period: you play with the tools The first period is the analysis period: you play with the tools
available, you estimate the volume to be transferred, the number of available, you estimate the volume to be transferred, the number of
accounts, you measure how long it takes for one account under accounts, you measure how long it takes for one account under
your context. your context.
The second period is the presync period. The users are still using The second period is what I call the presyncing period.
The users are still using
the old accounts but nothing prevents you from starting to sync the old accounts but nothing prevents you from starting to sync
the old accounts, as they are, to the new accounts. the old accounts, as they are, to the new accounts.
With tons of gigabytes to transfer, this period may be the longest one. With tons of gigabytes to transfer, this period may be the longest one.
@ -49,15 +50,15 @@ R1. First you have to consider several periods. There is the global
until the round is finished. until the round is finished.
The last period is the final sync period where only the last The last period is the final sync period where only the last
changes of the mailboxes need to be synced in order to switch mailboxes' changes need to be synced before switching
the users to their new mailboxes. the users to their new mailboxes.
R2. To estimate the presync period, consider the mean imapsync transfer R2. To estimate the presyncing period, consider the mean imapsync transfer
rate to be around 340 Kbytes/s, ie, 2.8 Mbps, no matter the local rate to be around 340 Kbytes/s, ie, 2.8 Mbps, no matter the local
link bandwidth. link bandwidth.
It's a mean, measured upon various different syncs, coming from It's a mean, measured upon various syncs, coming from
the online service /X where the network card flow rate is 200 Mbps the online service /X where the network card flow rate is 200 Mbps
(Rx 100 Mps, Tx 100 Mps) and the provider bandwidth is also 200 Mbps. (Rx 100 Mbps, Tx 100 Mbps) and the provider bandwidth is also 200 Mbps.
The maximum global rate seen is 22 MiB/s (176 Mbps). The maximum global rate seen is 22 MiB/s (176 Mbps).
At 340 Kbytes/s, At 340 Kbytes/s,
@ -65,15 +66,15 @@ R2. To estimate the presync period, consider the mean imapsync transfer
At 10 transfers at a time, 1 TB will take 3.5 days. 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. At 100 transfers at a time, 1 TB will take 8 hours.
Double the time because the best scenario never happens. Double the time because the best scenario never happens.
Triple the time because, well, real world is like that. Triple the time because, well, the real world is like that.
R3. An other way to better evaluate the end of the presync period can R3. Another way to better evaluate the end of the presyncing period can
be based on your actual data. Just apply a simple rule of three be based on your actual data. Just apply a simple rule of three
on the mailboxes already migrated to estimate the global end. on the mailboxes already migrated to estimate the global end.
If it took X hours to finish Y% of the mailboxes, then it If it took X hours to finish Y% of the mailboxes, then it
will take 100*X/Y hours to finish 100% of the mailboxes. will take 100*X/Y hours to finish 100% of the mailboxes.
Following the same idea but using matematical garbage, Following the same idea but using mathematical garbage,
the ETA can be estimated like this: the ETA can be estimated like this:
t_0 = time of global start (the start of the first presync) t_0 = time of global start (the start of the first presync)
t_now = time of now. t_now = time of now.
@ -90,11 +91,11 @@ R4. To estimate the last period, the final sync, just rerun a complete
the same amount of time. the same amount of time.
======================================================================= =======================================================================
Q. I need to migrate hundred accounts, how can I do? Q. I need to migrate hundreds of accounts, how can I do that?
R. If you have many mailboxes to migrate, think about a little R. If you have many mailboxes to migrate, think about a little
script program. Write a file called file.txt (for example) script program. Write a file called file.txt (for example)
containing hosts, users and passwords on both sides. containing hosts, users, and passwords on both sides.
The separator used in this example is ";" The separator used in this example is ";"
The file.txt file contains for example: The file.txt file contains for example:
@ -105,8 +106,8 @@ host003_1;user003_1;password003_1;host003_2;user003_2;password003_2;
host004_1;user004_1;password004_1;host004_2;user004_2;password004_2; host004_1;user004_1;password004_1;host004_2;user004_2;password004_2;
etc. etc.
Most of the times, the first column (host001_1, host002_1 ...) will Most of the time, the first column (host001_1, host002_1 ...) will
contains the same value, the value of --host1 parameter. Same contain the same value, the value of --host1 parameter. Same
thing for the third column (host001_2, host002_2). thing for the third column (host001_2, host002_2).
On Unix the shell script can be: On Unix the shell script can be:
@ -147,7 +148,7 @@ becomes
host001_1;user001_1;password001_1;host001_2;user001_2;password001_2; --automap --addheader host001_1;user001_1;password001_1;host001_2;user001_2;password001_2; --automap --addheader
host002_1;user002_1;password002_1;host002_2;user002_2;password002_2; --automap --addheader host002_1;user002_1;password002_1;host002_2;user002_2;password002_2; --automap --addheader
With this solution, options can be added, changed or removed per account. With this solution, options can be added, changed, or removed per account.
Technically those options will go in %%M in the loop body Technically those options will go in %%M in the loop body
Here is a complete Windows example ready to use: Here is a complete Windows example ready to use:
@ -169,11 +170,11 @@ Q. I have to migrate 500k users using 400 TB of disk space.
R. A good 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 Since all mailboxes are functionally independent, they can be processed
independently, here comes the parallelism, ie, lunching several imapsync independently, here comes the parallelism, ie, lunching several imapsync
processes in parallel. processes in parallel.
Meanwhile, mailboxes usually belong to the same server and the syncs Meanwhile, mailboxes usually belong to the same server, and the syncs
share the same imapsync host via the same bandwidth, here come share the same imapsync host via the same bandwidth, here come
some limitations and bottlenecks. some limitations and bottlenecks.
@ -184,7 +185,7 @@ Here comes some measurements.
Since adding this way is not so easy, just look at the overall Since adding this way is not so easy, just look at the overall
network rate of the imapsync host. network rate of the imapsync host.
On Linux and FreeBSD, nload is a good candidate to measure this overall On Linux and FreeBSD, the command "nload" is a good candidate to measure this overall
network rate. For example, to measure the rate every 6 seconds (-t 6000), 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: on eth0 or em0 interface, with values in Kbytes (-u K), use:
@ -195,24 +196,26 @@ Here comes some measurements.
dstat -n -N eth0 6 # Linux only (in 2018) dstat -n -N eth0 6 # Linux only (in 2018)
Another excellent tool to measure the network trafic is iftop. Another excellent tool to measure the network traffic is iftop.
The following command will monitor imap and imaps connexions The following command will monitor imap and imaps connections
on interfce eth0, only them, and sum them up: on interface eth0, only them, and sum them up:
iftop -i eth0 -f 'port imap or port imaps' -B # Linux iftop -i eth0 -f 'port imap or port imaps' -B # Linux
iftop -i em0 -f 'port imap or port imaps' -B # FreeBSD iftop -i em0 -f 'port imap or port imaps' -B # FreeBSD
During iftop, press the h to see the display commands available, During iftop, press the h to see the display commands available,
every single feature is useful! Press h again and try each one. every single feature is useful! Press h again and try each one.
My preferred display combination is by typing My preferred display combination is by typing the keys
t p > t p >
meaning: one line per connection, show port numbers, sort by destination. t means "one line per connection"
p means "show port numbers"
> means "sort by destination"
On Windows 8.1 Windows 10 Windows 2012 R2 Windows 2016, On Windows 8.1 Windows 10 Windows 2012 R2 Windows 2016,
get the overall network rate with the classical get the overall network rate with the classical
task manager (Ctrl-Shift-Esc), there is a Performance tab task manager (Ctrl-Shift-Esc), there is a Performance tab
in it where resides a Network grap monitor. in it, where resides a Network monitor.
On Windows 7, get the overall network rate with the classical On Windows 7, get the overall network rate with the classical
task manager (Ctrl-Shift-Esc), there is a Network tab in it. task manager (Ctrl-Shift-Esc), there is a Network tab in it.
@ -224,7 +227,7 @@ Here comes some measurements.
transfer rate increase. transfer rate increase.
3) When the total transfer rate starts to diminish, stop new launches. 3) When the total transfer rate starts to diminish, stop new launches.
Note N as the number of parallel runs you got until then. Note N as the number of runs in parallel you got until then.
4) Only keep N-2 parallel runs for the future. 4) Only keep N-2 parallel runs for the future.
@ -234,15 +237,15 @@ Q. How to determine where is the bottleneck in an imapsync process?
R1. Divide and conquer. R1. Divide and conquer.
In order to detect whether host1/link1 is the bottleneck or To detect whether host1/link1 is the bottleneck or
host2/link2, we have several tests to explore: host2/link2, we have several tests to explore:
1) run a sync from host1 to host1, with a host1 test account as destination. 1) run a sync from host1 to host1, with a host1 test account as the destination.
This way, only host1+link1 are tested, host2 is not directly concerned. This way, only host1 and link1 are tested, host2 is not directly concerned.
If performances increase a lot then host2/link2 is the bottleneck. If performances increase a lot then host2/link2 is the bottleneck.
2) run a sync from host2 to host2, with a host2 test account as destination. 2) run a sync from host2 to host2, with a host2 test account as the destination.
This way, only host2+link2 are tested, host1 is not concerned. This way, only host2 and link2 are tested, host1 is not concerned.
If performances increase a lot then host1/link1 is the bottleneck. If performances increase a lot then host1/link1 is the bottleneck.
If performances increase on both tests 1) and 2), I have no clue to explain that. If performances increase on both tests 1) and 2), I have no clue to explain that.
@ -250,39 +253,39 @@ Same thing if they both decrease!
R2. Isolating and overcoming bottlenecks R2. Isolating and overcoming bottlenecks
On any process involving several mechanisms, among all elements taking In any process involving several mechanisms, among all elements taking
part on the process, there is always a bottleneck. No one knows in part in the process, there is always a bottleneck. No one knows in
advance what is the first bottleneck. The first bottleneck has to be advance what is the first bottleneck. The first bottleneck has to be
determined, by measurements, not by guesses. Once this first determined, by measurements, not by guesses. Once this first
bottleneck is known and overcome then the next bottleneck has to be bottleneck is known and overcome then the next bottleneck has to be
determined and overcome too, if needed. Repeat the process of looking determined and overcome too, if needed. Repeat the process of looking
for the next bottleneck and its elimination until you estimate the for the next bottleneck and its elimination until you estimate the
transfer rates, money costs, time spent on this, and final dates transfer rates, money costs, time spent on this, and final dates
are good enough to proceed the whole huge migration. are good enough to proceed with the whole huge migration.
Possible bottlenecks: Possible bottlenecks:
- Throttles. - Throttles.
IMAP servers have artificial limits. IMAP servers have artificial limits.
For example Gmail, Office365, Exchange have throttle limits. For example, Gmail, Office365, and Exchange have throttle limits.
- Bandwidth. - Bandwidth.
Usually available bandwidth is NOT a bottleneck. Usually, the available bandwidth is not a bottleneck.
Meanwhile, it can be a bottleneck on small Internet connexions. Meanwhile, it can be a bottleneck on small Internet connections.
Imapsync downloads messages from host1 and upload messages to host2, Imapsync downloads messages from host1 and upload messages to host2,
consider this in case the connexion are asymmetric. consider this in case the connection is asymmetric.
- I/O on disks. - I/O, aka "Input/Output" on the disks of the imap servers.
I/O are a classical bottleneck, almost always forgotten. The I/O on disks are a classical bottleneck, almost always forgotten.
Unlike CPU and RAM, Input/Output performances don't improve Unlike CPU and RAM, Input/Output performances don't improve
very much as time goes on so it's often a bottleneck. very much as time goes on so it's often a bottleneck.
To measure and overcome an I/O disk bottleneck, you need To measure and overcome an I/O disk bottleneck, you need
usually a direct access to host1 and host2. usually direct access to host1 and host2.
An I/O bottleneck where imapsync runs is possible if An I/O bottleneck where imapsync runs is possible if
--usecache or --useuid is used or with very big messages. --usecache or --useuid is used or with very big messages.
- RAM memory. - RAM.
On all sides, monitor that your systems don't swap its On all sides, monitor that your systems don't swap its
running processes on disk, because swapping running processes running processes on disk, because swapping running processes
on disks decreases performance by a factor of 20, at least. on disks decreases performance by a factor of 20, at least.
@ -291,9 +294,8 @@ Possible bottlenecks:
- CPU. - CPU.
100% CPU during a whole transfer means the system is busy. 100% CPU during a whole transfer means the system is busy.
Usually CPU is not a problem with imapsync but it can be a problem CPU can be a problem with imapsync but it can also be a problem
with one of the imap servers. with one or both of the imap servers.
Most often CPU is not the real bottleneck, I/O are.
Other possible bottlenecks: Other possible bottlenecks:
- Number of hosts available to run imapsync processes. - Number of hosts available to run imapsync processes.
@ -312,10 +314,10 @@ Q. Can I run several instances of imapsync in parallel on a Windows host?
R. Yes! R. Yes!
Q. Any performance issue? Q. Any performance issues?
You have to try and check the transfer rates, sum them up to You have to try and check the transfer rates, sum them up to
have a uniq numeric criteria. have a unique numeric criterion.
There is always a limit, depending on remote imap servers 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, CPU, memory, Inputs/Outputs are the classical bottlenecks,
@ -336,7 +338,7 @@ REM After that, just double-click on each batch file to launch each process
======================================================================= =======================================================================
Q. I run multiple imapsync applications at the same time then get a Q. I run multiple imapsync applications at the same time and then get a
warning "imapsync.pid already exists, overwriting it". warning "imapsync.pid already exists, overwriting it".
Is this a potential problem when trying to sync multiple Is this a potential problem when trying to sync multiple
IMAP account in parallel? IMAP account in parallel?
@ -346,7 +348,7 @@ by yourself.
This file can help you to manage multiple runs by sending signals This file can help you to manage multiple runs by sending signals
to the processes (sigterm or sigkill) using their PID. to the processes (sigterm or sigkill) using their PID.
Each run can have its own pid file with --pidfile option. Each run can have its pid file with --pidfile option.
The file imapsync.pid contains the PID of the current imapsync process. The file imapsync.pid contains the PID of the current imapsync process.
This file is removed at the end of a normal run. This file is removed at the end of a normal run.
You can safely ignore the warning if you don't use imapsync.pid file You can safely ignore the warning if you don't use imapsync.pid file

View File

@ -1,5 +1,5 @@
$Id: FAQ.Office365.txt,v 1.37 2022/04/06 09:58:39 gilles Exp gilles $ $Id: FAQ.Office365.txt,v 1.38 2022/06/22 17:07:35 gilles Exp gilles $
This documentation is also available online at This documentation is also available online at
https://imapsync.lamiral.info/FAQ.d/ https://imapsync.lamiral.info/FAQ.d/
@ -36,6 +36,9 @@ Q. Office365 fails with "User is authenticated but not connected".
Q. I see "NO Maximum size of appendable message has been exceeded" Q. I see "NO Maximum size of appendable message has been exceeded"
What can I do with that? What can I do with that?
Q. Every single mail synced to exchange online owns the
category $MDNSent after migration. How can I avoid this?
Q. The imap connection to Office365 is not working very efficiently, Q. The imap connection to Office365 is not working very efficiently,
is there a solution to fix that? is there a solution to fix that?
@ -334,6 +337,17 @@ values on the migration accounts in the source and target tenants.
Thanks to Sean McDougall, Ian Thomas & Matt Wilks from Toronto Thanks to Sean McDougall, Ian Thomas & Matt Wilks from Toronto
for this FAQ item. for this FAQ item.
======================================================================
Q. Every single mail synced to exchange online owns the
category $MDNSent after migration. How can I avoid this?
R. To remove the flag $MDNSent from all messages, use:
imapsync ... --regexflag "s/\$MDNSent//g"
See also the document
https://imapsync.lamiral.info/FAQ.d/FAQ.Flags.txt
====================================================================== ======================================================================
Q. The imap connection to Office365 is not working very efficiently, Q. The imap connection to Office365 is not working very efficiently,
is there a solution to fix that? is there a solution to fix that?

View File

@ -1,5 +1,5 @@
#!/bin/cat #!/bin/cat
$Id: FAQ.OnlineUI.txt,v 1.32 2022/03/23 11:00:27 gilles Exp gilles $ $Id: FAQ.OnlineUI.txt,v 1.36 2022/09/14 11:18:05 gilles Exp gilles $
This document is also available online at This document is also available online at
https://imapsync.lamiral.info/FAQ.d/ https://imapsync.lamiral.info/FAQ.d/
@ -35,23 +35,26 @@ Q. The sync stalls at the beginning, just after a line like:
"Host1: xxx says it has CAPABILITY for AUTHENTICATE LOGIN" "Host1: xxx says it has CAPABILITY for AUTHENTICATE LOGIN"
What is the problem? What is the problem?
Q. The synchronization fails with the error message like:
Err 1/1: Host1 failure: Error login on [10.1.161.155] with user [webmaster@truc.com] auth [LOGIN]: 2 NO [ALERT] LOGIN DENIED -- COUNTRY IS BLACKLISTED
Now the questions again with their answers. Now the questions again with their answers.
===================================================================== =====================================================================
Q. Can I launch several imap synchronizations on the visual Q. Can I launch several imap synchronizations on the visual
user interface /X? user interface /X?
R. Yes. Open several tabs/windows on your browser and fill each one A. Yes. Open several tabs/windows on your browser and fill each one
with different credentials. with different credentials.
===================================================================== =====================================================================
Q. How secure is the online visual user interface /X? Q. How secure is the online visual user interface /X?
R0. Well, I don't know if asking the provider whether his online A0. Well, I don't know if asking the provider whether his online
service is secure or not would be of any interest. service is secure or not would be of any interest.
Let's do it anyway, you'll be the judge. Let's do it anyway, you'll be the judge.
R1. Some figures A1. Some figures
Date of this report: 24 December 2021. Happy Christmas! Date of this report: 24 December 2021. Happy Christmas!
@ -64,7 +67,7 @@ On average, /X has 51 users per day, each user lunches on average
The total volume /X transferred so far is around 240 TiB coming The total volume /X transferred so far is around 240 TiB coming
from nearly 520 000 imap account migrations and 810 million email messages. from nearly 520 000 imap account migrations and 810 million email messages.
R2. Pros & Cons A2. Pros & Cons
The online imapsync service /X runs on HTTPS only, with a letsencrypt The online imapsync service /X runs on HTTPS only, with a letsencrypt
certificate, an up to date certificate overall rated "A+" at certificate, an up to date certificate overall rated "A+" at
@ -148,7 +151,7 @@ Q. I want to switch from the visual interface /X to the
https://imapsync.lamiral.info/#DOC_BASIC https://imapsync.lamiral.info/#DOC_BASIC
What should I know? What should I know?
R. Let's do some ascii art. A. Let's do some ascii art.
The visual interface looks roughly like this, for the textfields input part: The visual interface looks roughly like this, for the textfields input part:
+------------------------------------------+------------------------------------------+ +------------------------------------------+------------------------------------------+
@ -203,7 +206,7 @@ https://imapsync.lamiral.info/examples/imapsync_example.sh
Q. Shall I have issues with the browser timing out? Q. Shall I have issues with the browser timing out?
What happens if the browser connection is closed for whatever reason? What happens if the browser connection is closed for whatever reason?
R. A browser connection closed closes also the imapsync process, A. A browser connection closed closes also the imapsync process,
ie, the sync is ended right away. ie, the sync is ended right away.
Further comments on this behavior. Further comments on this behavior.
@ -240,7 +243,7 @@ the logfile running the sync like a "tail -f" command (isn't that magic?).
Q. Shall I have issues when the webserver times out? What happens Q. Shall I have issues when the webserver times out? What happens
if the web server closes the connection for whatever reason? if the web server closes the connection for whatever reason?
R. If the webserver closes the connection then usually it also A. If the webserver closes the connection then usually it also
kills the imapsync process and the imap connections as well. kills the imapsync process and the imap connections as well.
The current webserver timeout at The current webserver timeout at
@ -252,12 +255,46 @@ Q. The sync stalls at the beginning, just after a line like:
"Host1: xxx says it has CAPABILITY for AUTHENTICATE LOGIN" "Host1: xxx says it has CAPABILITY for AUTHENTICATE LOGIN"
What is the problem? What is the problem?
R. I've seen this issue on /X with the imap server A. I've seen this issue on /X with the imap server
CommuniGate Pro IMAP Server 6.0.11 CommuniGate Pro IMAP Server 6.0.11
The issue looks related to special characters in the password. The issue looks related to special characters in the password.
Solution for now: change the password, keep only standard (ASCII) Solution for now: change the password, keep only standard (ASCII)
alphanumeric characters ABC-YZ abc-yz 012-89. alphanumeric characters ABC-YZ abc-yz 012-89.
=====================================================================
Q. The synchronization fails with the error message like:
Err 1/1: Host1 failure: Error login on [10.1.161.155] with user [webmaster@truc.com] auth [LOGIN]: 2 NO [ALERT] LOGIN DENIED -- COUNTRY IS BLACKLISTED
A. The message "[ALERT] LOGIN DENIED -- COUNTRY IS BLACKLISTED" comes directly
from the IMAP server at 10.1.161.155
It looks like that the 10.1.161.155 imap server filters incoming
connexions based on their IPS. In that case, here are the current
IPs of the imapsync online service (September 2022):
ks5.lamiral.info has address 91.121.221.224
ks5ipv6.lamiral.info has IPv6 address 2001:41d0:2:84e0::1
ks6.lamiral.info has address 5.39.87.81
ks6ipv6.lamiral.info has IPv6 address 2001:41d0:8:9951::1
ks7.lamiral.info has address 5.135.177.225
ks7ipv6.lamiral.info has IPv6 address 2001:41d0:8:b8e1::1
i050.lamiral.info has address 213.32.72.139
i050ipv6.lamiral.info has IPv6 address 2001:41d0:302:1000::155d
vp3.lamiral.info has address 51.178.81.27
vp3ipv6.lamiral.info has IPv6 address 2001:41d0:404:200::4d81
vp4.lamiral.info has address 51.38.34.201
vp4ipv6.lamiral.info has IPv6 address 2001:41d0:305:2100::4c46
The imapsync online service may contact your imap server with one
or more of those IP addresses.
CPhulk of Cpannel has a buildin country block that can cause this behavior.
Later on you may encountered issues with maximum sessions per ip.
You can change that within cPannel.
https://support.cpanel.net/hc/en-us/articles/4406663082519-What-is-cPHulk-
https://docs.cpanel.net/whm/security-center/cphulk-brute-force-protection/
===================================================================== =====================================================================
===================================================================== =====================================================================

View File

@ -1,5 +1,5 @@
#!/bin/cat #!/bin/cat
$Id: FAQ.Release_Checklist.txt,v 1.22 2022/01/14 12:46:38 gilles Exp gilles $ $Id: FAQ.Release_Checklist.txt,v 1.27 2022/09/16 05:35:27 gilles Exp gilles $
This documentation is also available online at This documentation is also available online at
https://imapsync.lamiral.info/FAQ.d/ https://imapsync.lamiral.info/FAQ.d/
@ -17,14 +17,28 @@ Checklist before release a new release:
- Make "imapsync --tests" pass on Windows 32 bits - Make "imapsync --tests" pass on Windows 32 bits
- Make "imapsync --tests" pass on Windows 64 bits - Make "imapsync --tests" pass on Windows 64 bits
make linuxtests
make win32tests
make win64tests
make mactests
or
make -j linuxtests win32tests win64tests mactests
- Make "imapsync --testslive" pass on Linux - Make "imapsync --testslive" pass on Linux
- Make "imapsync --testslive" pass on Mac - Make "imapsync --testslive" pass on Mac
- Make "imapsync --testslive" pass on Windows 32 bits
- Make "imapsync --testslive" pass on Windows 64 bits
make linuxtestslive mactestslive mactestslive6
- Add a new section in S/news.shtml reading "rlog imapsync" - Add a new section in S/news.shtml reading "rlog imapsync"
- In case of a new dependency, add it to all the INSTALL/* files. - In case of a new dependency, add it to all the INSTALL/* files.
- Generate the README - Generate the README
make doc
- Run a spell checker on the README - Run a spell checker on the README
- Read the README again slowly. Fix all issues, all. - Read the README again slowly. Fix all issues, all.
- Read the OPTIONS section of README and read it very slowly - Read the OPTIONS section of README and read it very slowly
@ -38,8 +52,8 @@ Checklist before release a new release:
- Review the newsletter by running: - Review the newsletter by running:
m4 -P W/ml_announce.in.txt m4 -P W/ml_announce.in.txt
- Update W/rsync_exclude_dist.txt - Update the file W/rsync_exclude_dist.txt
- Update .gitignore - Update the file .gitignore
- Review the TODO file and mark done what is done. - Review the TODO file and mark done what is done.
- Review the general FAQ.d/FAQ.General.txt - Review the general FAQ.d/FAQ.General.txt

View File

@ -1,4 +1,4 @@
$Id: FAQ.Two_Ways_Sync.txt,v 1.6 2022/02/22 15:16:16 gilles Exp gilles $ $Id: FAQ.Two_Ways_Sync.txt,v 1.8 2022/07/25 14:03:49 gilles Exp gilles $
This documentation is also available online at This documentation is also available online at
https://imapsync.lamiral.info/FAQ.d/ https://imapsync.lamiral.info/FAQ.d/
@ -21,14 +21,15 @@ stateless.
Each time imapsync runs, it considers messages and folders as if it Each time imapsync runs, it considers messages and folders as if it
were the first time it encounters them. Imapsync looks at messages, were the first time it encounters them. Imapsync looks at messages,
flags, and folders as they are now, not considering what they were flags, and folders as they are now, not considering what they were
before. Imapsync has no memory outside the current running sync. before the current. Imapsync has no memory outside the current running
sync.
So now, why a stateless behavior cannot handle well a two ways sync So now, why a stateless behavior cannot handle well a two ways sync
between an account A and an account B? between an account A and an account B?
The problem arises with deletions, messages deletions, folders The problem arises with deletions, messages deletions, folders
deletions, or movings, messages movings across folders, folders deletions, or with moves, messages moves across folders, folders
movings, and also folders renamings. Deletions and moves are ambiguous moves, and also folders renamings. Deletions and moves are ambiguous
changes when combined with creations on the opposite side. changes when combined with creations on the opposite side.
For example, if a message is deleted from A by a user, then imapsync For example, if a message is deleted from A by a user, then imapsync
@ -38,18 +39,64 @@ that has to be copied from B.
But if you know the answer yourself, that missing messages on one side But if you know the answer yourself, that missing messages on one side
A are deleted messages that have to be deleted on the other side then A are deleted messages that have to be deleted on the other side then
run a sync with the --delete2 option from A to B. run a sync with the --delete2 option from A to B. This assumes there
is no new messages on B because --delete2 will delete them.
If you know that the missing messages on A are missing messages from B If you know that the missing messages on A are messages from B
that has to be copied to A then run a sync from B to A. that has to be copied to A, then run a sync from B to A.
If you know it's a mixed scenario, that there are some deletions/moves If you know it's a mixed scenario, that there are some deletions/moves
on A, and there are some deletions/moves on B, but not the same, then on A, and there are some deletions/moves on B, but not the same, then
you are in trouble and it ends up with a not very good "two ways" you are in trouble and it ends up with a not very good "two ways"
sync. In that case, two runs of imapsync, one from A to B, one from B sync. In that case, two runs of imapsync, one from A to B, one from B
to A, put the two accounts in a synchronized state. But deletions on to A, put the two accounts in a synchronized state. The deletions of
either side get cancelled and folder renamings on either side bring messages on either side get cancelled, deleted messages come back. A
messages duplicates. folder renaming on either side brings back the old folder. It's not a
good two ways synchronization.
My suggestion is:
a) Use a single active imap account that fits all your needs,
available from anywhere, at any time. Access it from both your
laptop and your iphone.
b) Feed this active account with foreign and passive accounts with any
tool that can handle the transfer, imapsync being one of them.
c) Have a slave imap backup account of the active one, available also
from anywhere, at any time. Use it only as a failsafe account, when
the active one is broken or to bring back misguidely deleted
messages to the active account. Use any tool that can handle the
synchronization, imapsync being a good one of them.
=======================================================================
Q. What can I do instead of having two ways synchronizations?
R. My suggestion is:
a) Use only one single active imap account that fits all your needs,
available from anywhere, at any time. Access it from all your
devices, laptops, phones, tablets.
b) Feed this active account with foreign and passive accounts with any
tool that can handle the transfer, imapsync being one of them.
c) Have a slave imap backup account of the active one, available also
from anywhere, at any time. Use it only as a failsafe account, when
the active one is broken or to bring back misguidely deleted
messages to the active account. Use any tool that can handle the
synchronization, imapsync being a good one of them.
=======================================================================
Q. What tools can I use to handle two ways synchronizations?
R. There are offlineimap and mbsync/isync tools:
offlineimap is located at http://www.offlineimap.org/
mbsync/isync is located at https://isync.sourceforge.io/
======================================================================= =======================================================================

View File

@ -1,5 +1,5 @@
#!/bin/cat #!/bin/cat
$Id: FAQ.User_Concurrent_Access.txt,v 1.5 2018/05/24 11:34:30 gilles Exp gilles $ $Id: FAQ.User_Concurrent_Access.txt,v 1.6 2022/05/05 13:18:29 gilles Exp gilles $
This document is also available online at This document is also available online at
https://imapsync.lamiral.info/FAQ.d/ https://imapsync.lamiral.info/FAQ.d/
@ -35,6 +35,23 @@ Details:
so --delete2 is needed to sync the deletion. so --delete2 is needed to sync the deletion.
* message flag change => will need a resync * message flag change => will need a resync
Let's more precise about timing.
Imapsync works per folder, one folder at a time.
If imapsync has already synced a folder during a run,
what happens to this folder now won't be synced by the current run.
If imapsync has not already synced a folder during a run,
what happens to this folder now will be synced by the current run.
If imapsync is syncing a folder during a run,
what happens to this folder now depends on when things happen.
Imapsync starts by listing messages and getting meta data about them,
Message-Id, Date, Size.
A message deleted just after the listing, won't be synced.
A new message arriving just after the listing, won't be synced.
* Writing at destination/host2: * Writing at destination/host2:
* adding folder => no problem, unless --delete2folders is used * adding folder => no problem, unless --delete2folders is used
* deleting folder => will reappear by a new sync * deleting folder => will reappear by a new sync
@ -42,5 +59,7 @@ Details:
* deleting message => might reappear by a new sync. * deleting message => might reappear by a new sync.
* message flag change => will be reseted by a new sync. * message flag change => will be reseted by a new sync.
======================================================================= =======================================================================
======================================================================= =======================================================================

View File

@ -1,5 +1,5 @@
$Id: FAQ.Yahoo.txt,v 1.13 2021/12/03 12:38:58 gilles Exp gilles $ $Id: FAQ.Yahoo.txt,v 1.15 2022/05/05 14:17:22 gilles Exp gilles $
This document is also available online at This document is also available online at
https://imapsync.lamiral.info/FAQ.d/ https://imapsync.lamiral.info/FAQ.d/
@ -64,7 +64,18 @@ Q. Synchronizing from XXX to Yahoo
R. Example: R. Example:
On Linux:
./imapsync \ ./imapsync \
--host1 XXX \
--user1 Billy@other.com \
--password1 billysecreta \
--host2 imap.mail.yahoo.com \
--user2 Billy@yahoo.com \
--password2 billysecretb \
--regexmess 's{(?<![\n])\z}{\r\n}gxms'
On Windows:
imapsync.exe \
--host1 XXX \ --host1 XXX \
--user1 Billy@other.com \ --user1 Billy@other.com \
--password1 billysecreta \ --password1 billysecreta \
@ -73,6 +84,8 @@ R. Example:
--password2 billysecretb \ --password2 billysecretb \
--regexmess "s{(?<![\n])\z}{\r\n}gxms" --regexmess "s{(?<![\n])\z}{\r\n}gxms"
You wonder why there is this ugly regex, what it does and where does it You wonder why there is this ugly regex, what it does and where does it
come from? come from?

24
FAQ.d/FAQ.iCloud.txt Normal file
View File

@ -0,0 +1,24 @@
#!/bin/cat
# $Id: FAQ.iCloud.txt,v 1.1 2022/04/13 11:44:19 gilles Exp gilles $
This documentation is also available online at
https://imapsync.lamiral.info/FAQ.d/
https://imapsync.lamiral.info/FAQ.d/FAQ.iCloud.txt
=======================================================================
Imapsync tips for iCloud accounts.
=======================================================================
Q. How to migrate from or to an iCloud account?
R. From https://support.apple.com/en-us/HT202304
Use "imap.mail.me.com" as the imap server and use an app password.
How to generate an app password is described at
https://support.apple.com/kb/HT204397
It's not necessary to precise the port and the ssl thing, imapsync
auto-detect this.

View File

@ -1,6 +1,6 @@
## Dockerfile for building a docker imapsync image ## Dockerfile for building a docker imapsync image
# $Id: Dockerfile,v 1.42 2022/04/04 19:16:50 gilles Exp gilles $ # $Id: Dockerfile,v 1.43 2022/05/17 14:29:36 gilles Exp gilles $
# I use the following command to build the image: # I use the following command to build the image:
# #
# docker build -t gilleslamiral/imapsync . # docker build -t gilleslamiral/imapsync .
@ -64,6 +64,7 @@ RUN set -xe && \
libparse-recdescent-perl \ libparse-recdescent-perl \
libmodule-scandeps-perl \ libmodule-scandeps-perl \
libpar-packer-perl \ libpar-packer-perl \
libproc-processtable-perl \
libreadonly-perl \ libreadonly-perl \
libregexp-common-perl \ libregexp-common-perl \
libsys-meminfo-perl \ libsys-meminfo-perl \

View File

@ -1,5 +1,5 @@
#!/bin/cat #!/bin/cat
# $Id: INSTALL.AWS_EC2.txt,v 1.8 2020/04/14 20:56:47 gilles Exp gilles $ # $Id: INSTALL.AWS_EC2.txt,v 1.9 2022/05/17 14:32:47 gilles Exp gilles $
This documentation is also located online at This documentation is also located online at
https://imapsync.lamiral.info/INSTALL.d/ https://imapsync.lamiral.info/INSTALL.d/
@ -43,7 +43,8 @@ To install a more recent imapsync
perl-Test-NoWarnings \ perl-Test-NoWarnings \
perl-Test-Simple \ perl-Test-Simple \
perl-Test-Warn \ perl-Test-Warn \
perl-Sub-Uplevel perl-Sub-Uplevel \
perl-Proc-ProcessTable
sudo cpanm Encode::IMAPUTF7 sudo cpanm Encode::IMAPUTF7
wget -N https://imapsync.lamiral.info/imapsync wget -N https://imapsync.lamiral.info/imapsync
@ -96,6 +97,7 @@ perl-Test-Requires \
perl-Try-Tiny \ perl-Try-Tiny \
perl-Unicode-String \ perl-Unicode-String \
perl-URI \ perl-URI \
perl-Proc-ProcessTable \
cpanminus cpanminus
sudo cpanm Authen::NTLM Data::Uniqid IO::Tee \ sudo cpanm Authen::NTLM Data::Uniqid IO::Tee \

View File

@ -1,5 +1,5 @@
#!/bin/cat #!/bin/cat
# $Id: INSTALL.ArchLinux.txt,v 1.5 2019/11/28 14:37:59 gilles Exp gilles $ # $Id: INSTALL.ArchLinux.txt,v 1.6 2022/05/17 14:31:44 gilles Exp gilles $
This documentation is also located online at This documentation is also located online at
https://imapsync.lamiral.info/INSTALL.d/ https://imapsync.lamiral.info/INSTALL.d/
@ -88,7 +88,8 @@ Other Perl modules, needed sometimes:
JSON::WebToken::Crypt::RSA \ JSON::WebToken::Crypt::RSA \
Test::Mock::Guard \ Test::Mock::Guard \
Test::Warn \ Test::Warn \
PAR::Packer PAR::Packer \
Proc::ProcessTable

View File

@ -1,5 +1,5 @@
#!/bin/cat #!/bin/cat
# $Id: INSTALL.Centos.txt,v 1.31 2022/02/19 20:28:13 gilles Exp gilles $ # $Id: INSTALL.Centos.txt,v 1.32 2022/05/17 14:32:47 gilles Exp gilles $
This documentation is also located online at This documentation is also located online at
https://imapsync.lamiral.info/INSTALL.d/ https://imapsync.lamiral.info/INSTALL.d/
@ -61,7 +61,9 @@ Install the powertools imapsync 1.977 release via dnf like mentioned above.
It will install the needed packages, Perl itself and Perl modules It will install the needed packages, Perl itself and Perl modules
for release 1.977. for release 1.977.
The latest imapsync 2.174 needs no more Perl modules. The imapsync 2.206 and next ones needs the Perl module:
dnf install perl-Proc-ProcessTable
wget -N https://imapsync.lamiral.info/imapsync wget -N https://imapsync.lamiral.info/imapsync
chmod +x imapsync chmod +x imapsync
@ -132,6 +134,7 @@ Then:
perl-Test-Simple \ perl-Test-Simple \
perl-Test-Warn \ perl-Test-Warn \
perl-Sub-Uplevel \ perl-Sub-Uplevel \
perl-Proc-ProcessTable \
ca-certificates ca-certificates
Also, run the following commands: Also, run the following commands:
@ -215,7 +218,8 @@ Then:
perl-Test-Requires \ perl-Test-Requires \
perl-Test-Deep \ perl-Test-Deep \
perl-File-Tail \ perl-File-Tail \
perl-Unicode-String perl-Unicode-String \
install perl-Proc-ProcessTable
wget https://imapsync.lamiral.info/imapsync wget https://imapsync.lamiral.info/imapsync

View File

@ -1,5 +1,5 @@
#!/bin/cat #!/bin/cat
# $Id: INSTALL.Darwin.txt,v 1.38 2022/04/05 19:44:30 gilles Exp gilles $ # $Id: INSTALL.Darwin.txt,v 1.39 2022/05/17 14:31:44 gilles Exp gilles $
This documentation is also located online at This documentation is also located online at
https://imapsync.lamiral.info/INSTALL.d/ https://imapsync.lamiral.info/INSTALL.d/
@ -208,6 +208,7 @@ helps to verify what is needed to install on your system
cpanm Unicode::String cpanm Unicode::String
cpanm Sys::MemInfo cpanm Sys::MemInfo
cpanm File::Tail cpanm File::Tail
cpanm Proc::ProcessTable
cpanm Test::MockObject cpanm Test::MockObject

View File

@ -1,5 +1,5 @@
#!/bin/cat #!/bin/cat
# $Id: INSTALL.Debian.txt,v 1.37 2022/03/29 11:03:55 gilles Exp gilles $ # $Id: INSTALL.Debian.txt,v 1.38 2022/05/17 14:29:36 gilles Exp gilles $
This documentation is also located online at This documentation is also located online at
https://imapsync.lamiral.info/INSTALL.d/ https://imapsync.lamiral.info/INSTALL.d/
@ -81,6 +81,7 @@ apt install -y \
libjson-webtoken-perl \ libjson-webtoken-perl \
libmail-imapclient-perl \ libmail-imapclient-perl \
libparse-recdescent-perl \ libparse-recdescent-perl \
libproc-processtable-perl \
libmodule-scandeps-perl \ libmodule-scandeps-perl \
libreadonly-perl \ libreadonly-perl \
libregexp-common-perl \ libregexp-common-perl \

View File

@ -1,5 +1,5 @@
#!/bin/cat #!/bin/cat
# $Id: INSTALL.Docker_build.txt,v 1.16 2022/04/05 13:20:24 gilles Exp gilles $ # $Id: INSTALL.Docker_build.txt,v 1.17 2022/05/17 14:29:36 gilles Exp gilles $
This documentation is also located online at This documentation is also located online at
https://imapsync.lamiral.info/INSTALL.d/ https://imapsync.lamiral.info/INSTALL.d/
@ -78,6 +78,7 @@ RUN set -xe && \
libparse-recdescent-perl \ libparse-recdescent-perl \
libmodule-scandeps-perl \ libmodule-scandeps-perl \
libpar-packer-perl \ libpar-packer-perl \
libproc-processtable-perl \
libreadonly-perl \ libreadonly-perl \
libregexp-common-perl \ libregexp-common-perl \
libsys-meminfo-perl \ libsys-meminfo-perl \

View File

@ -1,5 +1,5 @@
#!/bin/cat #!/bin/cat
# $Id: INSTALL.FreeBSD.txt,v 1.11 2019/11/28 14:38:42 gilles Exp gilles $ # $Id: INSTALL.FreeBSD.txt,v 1.12 2022/05/17 14:31:44 gilles Exp gilles $
This documentation is also located online at This documentation is also located online at
https://imapsync.lamiral.info/INSTALL.d/ https://imapsync.lamiral.info/INSTALL.d/
@ -32,5 +32,8 @@ p5-Test-MockObject
p5-CGI p5-CGI
p5-Encode-IMAPUTF7 p5-Encode-IMAPUTF7
Call to FreeBSD developer: It's also the new dependencies to add
for next the imapsync package 1.882 Call to FreeBSD developer: It's also the new Perl modules dependencies to add
for imapsync 2.206 and next ones:
Proc::ProcessTable

View File

@ -1,5 +1,5 @@
#!/bin/cat #!/bin/cat
# $Id: INSTALL.OnlineUI.txt,v 1.52 2022/03/23 11:02:05 gilles Exp gilles $ # $Id: INSTALL.OnlineUI.txt,v 1.56 2022/05/19 08:55:50 gilles Exp gilles $
This documentation is also located online at This documentation is also located online at
https://imapsync.lamiral.info/INSTALL.d/ https://imapsync.lamiral.info/INSTALL.d/
@ -22,7 +22,6 @@ Average_bandwidth_rate: 345 KiB/s ~ 2.8 Mbps.
Load mean: 0.8 on a CPU 4 cores "Intel(R) i5-2320 3.00GHz K8-class" Load mean: 0.8 on a CPU 4 cores "Intel(R) i5-2320 3.00GHz K8-class"
======================================================================= =======================================================================
Installation Installation
@ -154,7 +153,11 @@ shouldn't install this imapsync service at all.
============================================================================= =============================================================================
A) Concrete example on a Debian server with Apache: A) Concrete example on a Debian server with Apache:
Imapsync script place on the server disk is First, install Apache on your Debian system:
apt install apache2
Imapsync script place on the server disk will be
/usr/lib/cgi-bin/imapsync /usr/lib/cgi-bin/imapsync
This classical /cgi-bin directory is usually already configured This classical /cgi-bin directory is usually already configured
@ -165,7 +168,9 @@ or
This configuration file contains the following section This configuration file contains the following section
somewhere, maybe in comments for now, ie, with somewhere, maybe in comments for now, ie, with
some # characters at the beginning to make them ignored: some # characters at the beginning to make them ignored.
If you don't find the following section, keep reading,
the solution is below.
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin"> <Directory "/usr/lib/cgi-bin">
@ -191,7 +196,7 @@ stuff with the following commands:
a2enmod cgi a2enmod cgi
a2enconf serve-cgi-bin a2enconf serve-cgi-bin
/etc/init.d/apache2 reload /etc/init.d/apache2 restart
If the cgi mode and the cgi-bin configuration are not activated then If the cgi mode and the cgi-bin configuration are not activated then
you may encounter a 404 error when, later, you will run the command you may encounter a 404 error when, later, you will run the command
@ -216,6 +221,9 @@ it will work under Apache with this command:
su -s /bin/sh -c 'SERVER_SOFTWARE=foo /usr/lib/cgi-bin/imapsync' www-data su -s /bin/sh -c 'SERVER_SOFTWARE=foo /usr/lib/cgi-bin/imapsync' www-data
You should end with something like:
Exiting with return value 0 (EX_OK: successful termination)
Test that imapsync is considered a cgi with: Test that imapsync is considered a cgi with:
wget -nv -S -O- http://localhost/cgi-bin/imapsync?testslive=1 wget -nv -S -O- http://localhost/cgi-bin/imapsync?testslive=1
@ -223,8 +231,9 @@ Test that imapsync is considered a cgi with:
The last command should print something like: The last command should print something like:
Status: 200 OK to sync IMAP boxes. Load on bar is ... Status: 200 OK to sync IMAP boxes. Load on bar is ...
... ...
Exiting with return value 0 (EX_OK: successful termination)
If you get a 404 here then review the cgi installation and If you get a 404 or a 5xx here then review the cgi installation and
configuration part. configuration part.
@ -264,6 +273,12 @@ Check
or the safer or the safer
https://yourhost/X/imapsync_form_extra.html https://yourhost/X/imapsync_form_extra.html
Let's encrypt your site because crendentials should never travel in
clear form. Go to https://certbot.eff.org/instructions
See the Troubleshooting section to fix the systemd Apache
PrivateTmp=true issue.
That's all for installing a /X service on a Debian family system. That's all for installing a /X service on a Debian family system.
============================================================================= =============================================================================
@ -352,15 +367,19 @@ while maintaining SELinux in enforcing mode.
Quick solution: Quick solution:
sestatus getsebool httpd_can_network_connect # should show --> off
setenforce 0 setsebool -P httpd_can_network_connect=1
sestatus getsebool httpd_can_network_connect # should show --> on
wget -nv -S -O- http://localhost/cgi-bin/imapsync?testslive=1 # no more "Permission denied"
The -P option installs the rule permanently, even after a reboot
To go back to the previous state: To go back to the previous state:
setenforce 1 getsebool httpd_can_network_connect # should show --> on
sestatus setsebool -P httpd_can_network_connect=0
getsebool httpd_can_network_connect # should show --> off
Nota bene Nota bene
========= =========
@ -387,16 +406,18 @@ https://humdi.net/vnstat/
Vnstat is already available as a package in most Linux distros. Vnstat is already available as a package in most Linux distros.
The images are generated by the following commands, every minute: The images are generated by the following commands, every minute:
vnstati -s -o /var/www/vnstat/vnstat_s.png vnstati -s -o /var/www/html/vnstat/vnstat_s.png
vnstati -h -o /var/www/vnstat/vnstat_h.png vnstati -h -o /var/www/html/vnstat/vnstat_h.png
vnstati -hg -o /var/www/vnstat/vnstat_hg.png vnstati -hg -o /var/www/html/vnstat/vnstat_hg.png
vnstati -hs -o /var/www/vnstat/vnstat_hs.png vnstati -hs -o /var/www/html/vnstat/vnstat_hs.png
vnstati -d -o /var/www/vnstat/vnstat_d.png vnstati -d -o /var/www/html/vnstat/vnstat_d.png
vnstati -m -o /var/www/vnstat/vnstat_m.png vnstati -m -o /var/www/html/vnstat/vnstat_m.png
vnstati -y -o /var/www/vnstat/vnstat_y.png vnstati -y -o /var/www/html/vnstat/vnstat_y.png
vnstati -t -o /var/www/vnstat/vnstat_t.png vnstati -t -o /var/www/html/vnstat/vnstat_t.png
vnstati -vs -o /var/www/vnstat/vnstat_vs.png vnstati -vs -o /var/www/html/vnstat/vnstat_vs.png
vnstati -5 -o /var/www/vnstat/vnstat_5.png vnstati -5 -o /var/www/html/vnstat/vnstat_5.png
======================================================================= =======================================================================
@ -441,14 +462,22 @@ be canceled the next time the apache package is updated.
Debian: Debian:
systemctl edit apache2 systemctl edit apache2
cat /etc/systemd/system/apache2.service.d/override.conf cat /etc/systemd/system/apache2.service.d/override.conf
[Service]
PrivateTmp=false
systemctl daemon-reload systemctl daemon-reload
systemctl restart apache2 systemctl restart apache2
systemctl status apache2 systemctl status apache2
Centos: Centos:
systemctl edit httpd systemctl edit httpd
cat /etc/systemd/system/httpd.service.d/override.conf cat /etc/systemd/system/httpd.service.d/override.conf
[Service]
PrivateTmp=false
systemctl daemon-reload systemctl daemon-reload
systemctl restart httpd systemctl restart httpd
systemctl status httpd systemctl status httpd

View File

@ -1,5 +1,5 @@
#!/bin/cat #!/bin/cat
# $Id: INSTALL.Ubuntu.txt,v 1.18 2021/07/30 15:06:43 gilles Exp gilles $ # $Id: INSTALL.Ubuntu.txt,v 1.21 2022/06/03 16:58:47 gilles Exp gilles $
This documentation is also located online at This documentation is also located online at
https://imapsync.lamiral.info/INSTALL.d/ https://imapsync.lamiral.info/INSTALL.d/
@ -17,6 +17,7 @@ This command installs standard Ubuntu packages:
sudo apt-get install \ sudo apt-get install \
libauthen-ntlm-perl \ libauthen-ntlm-perl \
libclass-load-perl \ libclass-load-perl \
libcrypt-openssl-rsa-perl \
libcrypt-ssleay-perl \ libcrypt-ssleay-perl \
libdata-uniqid-perl \ libdata-uniqid-perl \
libdigest-hmac-perl \ libdigest-hmac-perl \
@ -28,11 +29,13 @@ libio-compress-perl \
libio-socket-inet6-perl \ libio-socket-inet6-perl \
libio-socket-ssl-perl \ libio-socket-ssl-perl \
libio-tee-perl \ libio-tee-perl \
libjson-webtoken-perl \
libmail-imapclient-perl \ libmail-imapclient-perl \
libmodule-scandeps-perl \ libmodule-scandeps-perl \
libnet-dbus-perl \ libnet-dbus-perl \
libnet-ssleay-perl \ libnet-ssleay-perl \
libpar-packer-perl \ libpar-packer-perl \
libproc-processtable-perl \
libreadonly-perl \ libreadonly-perl \
libregexp-common-perl \ libregexp-common-perl \
libsys-meminfo-perl \ libsys-meminfo-perl \
@ -58,11 +61,6 @@ the following command installs it "manually":
sudo cpanm Mail::IMAPClient sudo cpanm Mail::IMAPClient
In case you need to use XOAUTH2 authentication you have to install
the module JSON::WebToken with the command:
sudo cpanm JSON::WebToken
After installing the dependencies, imapsync should be working. After installing the dependencies, imapsync should be working.
You don't have to be root to test and use imapsync. You don't have to be root to test and use imapsync.

View File

@ -0,0 +1,18 @@
#!/bin/cat
# $Id: INSTALL.webserver.txt,v 1.6 2022/06/15 12:09:39 gilles Exp gilles $
This documentation is also located online at
https://imapsync.lamiral.info/INSTALL.d/
https://imapsync.lamiral.info/INSTALL.d/INSTALL.webserver.txt
The script named webserver in the top directory is a small web server
dedicated to offer the visual interface. It is experimental and it is
for now a plain text HTTP server (ie, not https).
Dependencies to run webserver on Debian/Ubuntu distributions:
sudo apt install libnet-server-perl

View File

@ -1,6 +1,6 @@
#!/bin/sh #!/bin/sh
# $Id: prerequisites_imapsync,v 1.35 2019/11/27 15:58:46 gilles Exp gilles $ # $Id: prerequisites_imapsync,v 1.36 2022/05/17 13:46:16 gilles Exp gilles $
MODULES_MANDATORY=' MODULES_MANDATORY='
App::cpanminus App::cpanminus
@ -39,6 +39,7 @@ Package::Stash::XS
PAR::Packer PAR::Packer
Parse::RecDescent Parse::RecDescent
Pod::Usage Pod::Usage
Proc::ProcessTable
Readonly Readonly
Regexp::Common Regexp::Common
Sys::MemInfo Sys::MemInfo

238
Makefile
View File

@ -1,5 +1,5 @@
# $Id: Makefile,v 1.345 2022/04/06 10:00:39 gilles Exp gilles $ # $Id: Makefile,v 1.349 2022/09/15 08:43:25 gilles Exp gilles $
.PHONY: help usage all doc .PHONY: help usage all doc
@ -109,8 +109,6 @@ VERSION: imapsync
touch -r ./imapsync ./VERSION touch -r ./imapsync ./VERSION
doc/GOOD_PRACTICES.html: doc/GOOD_PRACTICES.t2t doc/GOOD_PRACTICES.html: doc/GOOD_PRACTICES.t2t
txt2tags -i doc/GOOD_PRACTICES.t2t -t html --toc -o doc/GOOD_PRACTICES.html txt2tags -i doc/GOOD_PRACTICES.t2t -t html --toc -o doc/GOOD_PRACTICES.html
./W/tools/validate_html4 doc/GOOD_PRACTICES.html ./W/tools/validate_html4 doc/GOOD_PRACTICES.html
@ -172,18 +170,32 @@ install: testp W/imapsync.1
install W/imapsync.1 $(DESTDIR)$(PREFIX)/share/man/man1/imapsync.1 install W/imapsync.1 $(DESTDIR)$(PREFIX)/share/man/man1/imapsync.1
chmod 644 $(DESTDIR)$(PREFIX)/share/man/man1/imapsync.1 chmod 644 $(DESTDIR)$(PREFIX)/share/man/man1/imapsync.1
############### ###############
# Local goals # Local goals
############### ###############
.PHONY: prereq test tests unitests testp testf test3xx perlcritic allcritic crit compok dev cover tidy nytprof functree .PHONY: dailybuild dailytests prereq test tests unitests testp testf test3xx perlcritic allcritic crit compok dev cover tidy nytprof functree
dev: test functree crit cover nytprof bin dev: test functree crit cover nytprof bin
dailytests: linuxtests win32tests win64tests mactests
dailybuild: linuxbuild win32build win64build macbuild
linuxtests:
./imapsync --tests
linuxtestsdebug:
./imapsync --testsdebug
testsdebug: linuxtestsdebug win64testsdebug win32testsdebug mactestsdebug
testslive: mactestslive
docker: docker:
@echo "make docker_copy_to_vp3 # copy imapsync Dockerfile memo_docker to vp3" @echo "make docker_copy_to_vp3 # copy imapsync Dockerfile memo_docker to vp3"
@echo "make docker_build # build the imapsync docker image" @echo "make docker_build # build the imapsync docker image"
@ -258,7 +270,7 @@ perlcritic: W/perlcritic_3.txt W/perlcritic_2.txt
allcritic: W/perlcritic_4.txt W/perlcritic_3.txt W/perlcritic_2.txt W/perlcritic_1.txt allcritic: W/perlcritic_4.txt W/perlcritic_3.txt W/perlcritic_2.txt W/perlcritic_1.txt
W/perlcritic_1.txt: imapsync W/.compok W/perlcritic_1.txt: imapsync W/.compok
perlcritic --statistics-only -1 imapsync > W/perlcritic_1.txt.tmp || : perlcritic --statistics -1 imapsync > W/perlcritic_1.txt.tmp || :
mv W/perlcritic_1.txt.tmp W/perlcritic_1.txt mv W/perlcritic_1.txt.tmp W/perlcritic_1.txt
echo | ci -l W/perlcritic_1.txt echo | ci -l W/perlcritic_1.txt
@ -331,6 +343,7 @@ win32testsdebug:
./W/check_winerr test_testsdebug.bat ./W/check_winerr test_testsdebug.bat
.PHONY: W/*.bat examples/* .PHONY: W/*.bat examples/*
@ -451,35 +464,48 @@ imapsync_32bit.exe: imapsync
chmod a+r+x imapsync_32bit.exe chmod a+r+x imapsync_32bit.exe
(date "+%s"| tr "\n" " "; echo -n "END 32bit " $(VERSION) ": "; date) >> W/.BUILD_EXE_TIME (date "+%s"| tr "\n" " "; echo -n "END 32bit " $(VERSION) ": "; date) >> W/.BUILD_EXE_TIME
win64tests: win64tests_p26
win64tests_p24:
win64tests:
unix2dos W/test_tests.bat unix2dos W/test_tests.bat
scp imapsync W/test_tests.bat pc_HP_DV7_p24:'Desktop/imapsync_build' scp imapsync W/test_tests.bat pc_HP_DV7_p24:'Desktop/imapsync_build'
ssh 'pc HP DV7'@p24 'Desktop/imapsync_build/test_tests.bat' ssh 'pc HP DV7'@p24 'Desktop/imapsync_build/test_tests.bat'
./W/check_win64err test_tests.bat ./W/check_win64err test_tests.bat
win64testsdebug: win64testsdebug_p24:
unix2dos W/test_testsdebug.bat unix2dos W/test_testsdebug.bat
scp imapsync W/test_testsdebug.bat pc_HP_DV7_p24:'Desktop/imapsync_build' scp imapsync W/test_testsdebug.bat pc_HP_DV7_p24:'Desktop/imapsync_build'
ssh 'pc HP DV7'@p24 'Desktop/imapsync_build/test_testsdebug.bat' ssh 'pc HP DV7'@p24 'Desktop/imapsync_build/test_testsdebug.bat'
./W/check_win64err test_testsdebug.bat ./W/check_win64err test_testsdebug.bat
win64testsdebug: win64testsdebug_p26
win64testsdebug_p26: win64testsdebug_p26:
unix2dos W/test_testsdebug.bat unix2dos W/test_testsdebug.bat
scp imapsync W/test_testsdebug.bat gille@p26:'Desktop\imapsync_build' scp imapsync W/test_testsdebug.bat gille@p26:'OneDrive\Bureau\imapsync_build'
ssh gille@p26 'Desktop\imapsync_build\test_testsdebug.bat' ssh gille@p26 'OneDrive\Bureau\imapsync_build\test_testsdebug.bat'
./W/check_p26err test_testsdebug.bat ./W/check_p26err test_testsdebug.bat
win64tests_p26: win64tests_p26:
unix2dos W/test_tests.bat unix2dos W/test_tests.bat
scp imapsync W/test_tests.bat gille@p26:'Desktop\imapsync_build' scp imapsync W/test_tests.bat gille@p26:'OneDrive\Bureau\imapsync_build'
ssh gille@p26 'Desktop\imapsync_build\test_tests.bat' ssh gille@p26 'OneDrive\Bureau\imapsync_build\test_tests.bat'
./W/check_p26err test_tests.bat ./W/check_p26err test_tests.bat
win64_test_exe_always_fail_p26:
unix2dos W/test_exe_always_fail.bat
scp W/test_exe_always_fail.bat gille@p26:'OneDrive\Bureau\imapsync_build'
ssh gille@p26 'OneDrive\Bureau\imapsync_build\test_exe_always_fail.bat'
./W/check_p26err test_exe_always_fail.bat
win64_test_always_fail_p26:
unix2dos W/test_exe_always_fail.bat
scp imapsync W/test_always_fail.bat gille@p26:'OneDrive\Bureau\imapsync_build'
ssh gille@p26 'OneDrive\Bureau\imapsync_build\test_always_fail.bat'
./W/check_p26err test_always_fail.bat
zzz: zzz:
unix2dos W/build_exe.bat W/install_module_one.bat unix2dos W/build_exe.bat W/install_module_one.bat
scp imapsync W/build_exe.bat W/install_module_one.bat W/test_exe_testsdebug.bat pc_HP_DV7_p24:'Desktop/imapsync_build' scp imapsync W/build_exe.bat W/install_module_one.bat W/test_exe_testsdebug.bat pc_HP_DV7_p24:'Desktop/imapsync_build'
@ -543,19 +569,46 @@ win64prepa: winprepalocal
ssh 'pc HP DV7'@p24 'Desktop/imapsync_build/build_exe.bat' ssh 'pc HP DV7'@p24 'Desktop/imapsync_build/build_exe.bat'
./W/check_win64err build_exe.bat ./W/check_win64err build_exe.bat
win64build: winprepalocal win64build_p24: winprepalocal
scp imapsync W/build_exe.bat W/install_modules.bat pc_HP_DV7_p24:'Desktop/imapsync_build' scp imapsync W/build_exe.bat W/install_modules.bat pc_HP_DV7_p24:'Desktop/imapsync_build'
ssh 'pc HP DV7'@p24 'Desktop/imapsync_build/build_exe.bat' ssh 'pc HP DV7'@p24 'Desktop/imapsync_build/build_exe.bat'
./W/check_win64err build_exe.bat ./W/check_win64err build_exe.bat
imapsync.exe: imapsync_64bit.exe_p26 imapsync.exe: imapsync_64bit.exe_p26
cp -a imapsync_64bit.exe imapsync.exe cp -a imapsync_64bit.exe_p26 imapsync.exe
win64build: imapsync_64bit.exe_p26
win64build_p26: winprepalocal
scp imapsync W/build_exe.bat W/install_modules.bat gille@p26:'OneDrive\Bureau\imapsync_build'
ssh gille@p26 'OneDrive\Bureau\imapsync_build\build_exe.bat'
./W/check_win64err build_exe.bat
.PHONY: imapsync_64bit.exe_p24 imapsync_64bit.exe_p26 .PHONY: imapsync_64bit.exe_p24 imapsync_64bit.exe_p26
64exe: imapsync_64bit.exe_p26
imapsync_64bit.exe_p26: imapsync
(date "+%s"| tr "\n" " "; echo -n "BEGIN 64bit " $(VERSION) ": "; date) >> W/.BUILD_EXE_TIME
unix2dos W/build_exe.bat W/test_exe.bat W/install_modules.bat W/install_module_one.bat
ssh gille@p26 'perl -V'
ssh gille@p26 'if not exist OneDrive\Bureau\imapsync_build mkdir OneDrive\Bureau\imapsync_build'
scp imapsync W/build_exe.bat W/install_modules.bat W/install_module_one.bat \
W/test_exe_tests.bat W/test_exe_testsdebug.bat W/test_exe.bat \
gille@p26:'OneDrive\Bureau\imapsync_build'
ssh gille@p26 'OneDrive\Bureau\imapsync_build\build_exe.bat'
./W/check_p26err build_exe.bat
scp ../../var/pass/secret.tata ../../var/pass/secret.titi gille@p26:'OneDrive\Bureau\imapsync_build'
ssh gille@p26 'OneDrive\Bureau\imapsync_build\test_exe.bat'
./W/check_p26err test_exe.bat
rm -f imapsync_64bit.exe
scp -T gille@p26:'OneDrive\Bureau\imapsync_build\imapsync_64bit.exe' .
chmod a+r+x imapsync_64bit.exe
(date "+%s"| tr "\n" " "; echo -n "END 64bit " $(VERSION) ": "; date) >> W/.BUILD_EXE_TIME
imapsync_64bit.exe_p24: imapsync imapsync_64bit.exe_p24: imapsync
(date "+%s"| tr "\n" " "; echo -n "BEGIN 64bit " $(VERSION) ": "; date) >> W/.BUILD_EXE_TIME (date "+%s"| tr "\n" " "; echo -n "BEGIN 64bit " $(VERSION) ": "; date) >> W/.BUILD_EXE_TIME
@ -573,26 +626,8 @@ imapsync_64bit.exe_p24: imapsync
chmod a+r+x imapsync_64bit.exe chmod a+r+x imapsync_64bit.exe
(date "+%s"| tr "\n" " "; echo -n "END 64bit " $(VERSION) ": "; date) >> W/.BUILD_EXE_TIME (date "+%s"| tr "\n" " "; echo -n "END 64bit " $(VERSION) ": "; date) >> W/.BUILD_EXE_TIME
imapsync_64bit.exe: imapsync
(date "+%s"| tr "\n" " "; echo -n "BEGIN 64bit " $(VERSION) ": "; date) >> W/.BUILD_EXE_TIME
unix2dos W/build_exe.bat W/test_exe.bat W/install_modules.bat W/install_module_one.bat
ssh gille@p26 'perl -V'
ssh gille@p26 'if not exist Desktop\imapsync_build mkdir Desktop\imapsync_build'
scp imapsync W/build_exe.bat W/install_modules.bat W/install_module_one.bat \
W/test_exe_tests.bat W/test_exe_testsdebug.bat W/test_exe.bat \
gille@p26:'Desktop\imapsync_build'
ssh gille@p26 'Desktop\imapsync_build\build_exe.bat'
./W/check_p26err build_exe.bat
scp ../../var/pass/secret.tata ../../var/pass/secret.titi gille@p26:'Desktop\imapsync_build'
ssh gille@p26 'Desktop\imapsync_build\test_exe.bat'
./W/check_p26err test_exe.bat
rm -f imapsync_64bit.exe
scp -T gille@p26:'Desktop\imapsync_build\imapsync_64bit.exe' .
chmod a+r+x imapsync_64bit.exe
(date "+%s"| tr "\n" " "; echo -n "END 64bit " $(VERSION) ": "; date) >> W/.BUILD_EXE_TIME
zip: dosify_bat cidone
zip: dosify_bat
rm -rfv ../prepa_zip/imapsync_$(VERSION)/ rm -rfv ../prepa_zip/imapsync_$(VERSION)/
mkdir -p ../prepa_zip/imapsync_$(VERSION)/FAQ.d/ ../prepa_zip/imapsync_$(VERSION)/Cook/ mkdir -p ../prepa_zip/imapsync_$(VERSION)/FAQ.d/ ../prepa_zip/imapsync_$(VERSION)/Cook/
cp -av examples/imapsync_example.bat examples/sync_loop_windows.bat examples/file.txt ../prepa_zip/imapsync_$(VERSION)/ cp -av examples/imapsync_example.bat examples/sync_loop_windows.bat examples/file.txt ../prepa_zip/imapsync_$(VERSION)/
@ -614,9 +649,9 @@ zip: dosify_bat
mac: imapsync_bin_Darwin mac: imapsync_bin_Darwin
macstadiumcopy: macstadiumcopy:
rsync -v imapsync W/build_mac.sh INSTALL.d/prerequisites_imapsync webserver administrator@macstadium.lamiral.info: rsync -pv imapsync W/build_mac.sh INSTALL.d/prerequisites_imapsync webserver administrator@macstadium.lamiral.info:
rsync -v examples/file.txt examples/sync_loop_darwin.sh administrator@macstadium.lamiral.info:examples/ rsync -pv examples/file.txt examples/sync_loop_darwin.sh administrator@macstadium.lamiral.info:examples/
rsync -v X/ administrator@macstadium.lamiral.info:X/ rsync -pv X/ administrator@macstadium.lamiral.info:X/
maccopy: maccopy:
rsync -v -p -e 'ssh -4 -p 995' imapsync W/build_mac.sh INSTALL.d/prerequisites_imapsync webserver \ rsync -v -p -e 'ssh -4 -p 995' imapsync W/build_mac.sh INSTALL.d/prerequisites_imapsync webserver \
@ -648,6 +683,16 @@ mactestslive6:
rsync -p -e 'ssh -4 -p 995' imapsync gilleslamira@gate.polarhome.com: 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' ssh -4 -p 995 gilleslamira@gate.polarhome.com '. .bash_profile; perl imapsync --testslive6'
macstests:
rsync -pv imapsync administrator@macstadium.lamiral.info:
ssh administrator@macstadium.lamiral.info '. .bash_profile; perl imapsync --tests'
macstestsdebug:
rsync -pv imapsync administrator@macstadium.lamiral.info:
ssh administrator@macstadium.lamiral.info '. .bash_profile; perl imapsync --testsdebug'
.PHONY: bin win lin win32 win64 .PHONY: bin win lin win32 win64
bin: mac win bin: mac win
@ -660,6 +705,10 @@ win32: imapsync_32bit.exe
win64: imapsync_64bit.exe win64: imapsync_64bit.exe
win32build: imapsync_32bit.exe
linuxbuild: lin
$(BIN_NAME): imapsync $(BIN_NAME): imapsync
rcsdiff imapsync rcsdiff imapsync
@ -893,15 +942,19 @@ upload_latest: unitests ci_imapsync bin
.PHONY: upload_cgi upload_cgi_ks5 upload_cgi_memo upload_cgi_vp3 upload_cgi_vp4 upload_cgi_ks6 .PHONY: upload_cgi upload_cgi_ks5 upload_cgi_memo upload_cgi_vp3 upload_cgi_vp4 upload_cgi_ks6 upload_tmphash_all
upload_cgi: upload_cgi_ks5 upload_cgi_vp3 upload_cgi_vp4 upload_cgi_ks6
upload_cgi_ks5: ci_imapsync unitests ks5tests upload_proximapsync:
rsync -P imapsync root@ks5.lamiral.info:/home/www/apache24/cgi-bin/imapsync_new rcsdiff W/learn/proximapsync
curl -v --data 'testslive=1' https://imapsync.lamiral.info/cgi-bin/imapsync_new | grep 'Exiting with return value 0' W/learn/proximapsync --tests
rsync -P imapsync root@ks5.lamiral.info:/home/www/apache24/cgi-bin/imapsync W/learn/proximapsync --testslive | grep 'Exiting with return value 0'
curl -v --data 'testslive=1' https://imapsync.lamiral.info/cgi-bin/imapsync | grep 'Exiting with return value 0' rsync -P W/learn/proximapsync root@ks5.lamiral.info:/home/www/apache24/cgi-bin/proximapsync_new
ssh root@ks5.lamiral.info '/home/www/apache24/cgi-bin/proximapsync_new --tests'
ssh root@ks5.lamiral.info '/home/www/apache24/cgi-bin/proximapsync_new --testslive' | grep 'Exiting with return value 0'
curl -v --data 'testslive=1' https://imapsync.lamiral.info/cgi-bin/proximapsync_new 2>/dev/null | grep 'Exiting with return value 0'
rsync -P W/learn/proximapsync root@ks5.lamiral.info:/home/www/apache24/cgi-bin/proximapsync
curl -v --data 'testslive=1' https://imapsync.lamiral.info/cgi-bin/proximapsync 2>/dev/null | grep 'Exiting with return value 0'
upload_cgi_memo: upload_cgi_memo:
dos2unix X/stat_patterns.txt X/server_survey_patterns.txt dos2unix X/stat_patterns.txt X/server_survey_patterns.txt
@ -909,31 +962,73 @@ upload_cgi_memo:
rsync -av X/cgi_memo X/stat_patterns.txt X/server_survey_patterns.txt root@ks5:/var/tmp/imapsync_cgi/ rsync -av X/cgi_memo X/stat_patterns.txt X/server_survey_patterns.txt root@ks5:/var/tmp/imapsync_cgi/
upload_cgi_memo_all: upload_cgi_memo_all:
rsync -av X/cgi_memo root@ks5:/var/tmp/imapsync_cgi/ rsync -av X/cgi_memo X/stat_patterns.txt X/server_survey_patterns.txt root@ks5:/var/tmp/imapsync_cgi/
rsync -av X/cgi_memo root@ks6:/var/tmp/imapsync_cgi/ rsync -av X/cgi_memo X/stat_patterns.txt X/server_survey_patterns.txt root@ks6:/var/tmp/imapsync_cgi/
rsync -av X/cgi_memo root@vp3:/var/tmp/imapsync_cgi/ rsync -av X/cgi_memo X/stat_patterns.txt X/server_survey_patterns.txt root@ks7:/var/tmp/imapsync_cgi/
rsync -av X/cgi_memo root@vp4:/var/tmp/imapsync_cgi/ rsync -av X/cgi_memo X/stat_patterns.txt X/server_survey_patterns.txt root@vp3:/var/tmp/imapsync_cgi/
rsync -av X/cgi_memo X/stat_patterns.txt X/server_survey_patterns.txt root@vp4:/var/tmp/imapsync_cgi/
! ping -c1 -W1 cl1 || rsync -av X/cgi_memo X/stat_patterns.txt X/server_survey_patterns.txt root@cl1:/var/tmp/imapsync_cgi/
upload_tmphash_all:
scp /var/tmp/imapsync_hash root@ks5:/var/tmp/imapsync_hash && ssh root@ks5 chgrp www /var/tmp/imapsync_hash
scp /var/tmp/imapsync_hash root@ks6:/var/tmp/imapsync_hash && ssh root@ks6 chgrp www-data /var/tmp/imapsync_hash
scp /var/tmp/imapsync_hash root@vp3:/var/tmp/imapsync_hash && ssh root@vp3 chgrp www-data /var/tmp/imapsync_hash
scp /var/tmp/imapsync_hash root@vp4:/var/tmp/imapsync_hash && ssh root@vp4 chgrp apache /var/tmp/imapsync_hash
scp /var/tmp/imapsync_hash root@i050:/var/tmp/imapsync_hash && ssh root@i050 chgrp www-data /var/tmp/imapsync_hash
test_cgi_all:
curl -v --data 'testslive=1;exitonload=0' https://imapsync.lamiral.info/cgi-bin/imapsync 2>/dev/null | grep 'Exiting with return value 0' # ks5
curl -v --data 'testslive=1;exitonload=0' https://i006.lamiral.info/cgi-bin/imapsync 2>/dev/null | grep 'Exiting with return value 0'
curl -v --data 'testslive=1;exitonload=0' https://i007.lamiral.info/cgi-bin/imapsync 2>/dev/null | grep 'Exiting with return value 0'
curl -v --data 'testslive=1;exitonload=0' https://i013.lamiral.info/cgi-bin/imapsync 2>/dev/null | grep 'Exiting with return value 0'
curl -v --data 'testslive=1;exitonload=0' https://i014.lamiral.info/cgi-bin/imapsync 2>/dev/null | grep 'Exiting with return value 0'
upload_cgi: upload_cgi_ks5 upload_cgi_vp3 upload_cgi_vp4 upload_cgi_ks6 upload_cgi_ks7
# FreeBSD
upload_cgi_ks5: ci_imapsync unitests ks5tests
rsync -P imapsync root@ks5.lamiral.info:/home/www/apache24/cgi-bin/imapsync_new
curl -v --data 'testslive=1;exitonload=0' https://imapsync.lamiral.info/cgi-bin/imapsync_new 2>/dev/null | grep 'Exiting with return value 0'
rsync -P imapsync root@ks5.lamiral.info:/home/www/apache24/cgi-bin/imapsync
curl -v --data 'testslive=1;exitonload=0' https://imapsync.lamiral.info/cgi-bin/imapsync 2>/dev/null | grep 'Exiting with return value 0'
# Debian # Debian
upload_cgi_vp3: ci_imapsync vp3tests upload_cgi_vp3: ci_imapsync vp3tests
rsync -P imapsync root@vp3.lamiral.info:/usr/lib/cgi-bin/imapsync_new rsync -P imapsync root@vp3.lamiral.info:/usr/lib/cgi-bin/imapsync_new
curl -v --data 'testslive=1' https://vp3.lamiral.info/cgi-bin/imapsync_new | grep 'Exiting with return value 0' curl -v --data 'testslive=1;exitonload=0' https://vp3.lamiral.info/cgi-bin/imapsync_new 2>/dev/null | grep 'Exiting with return value 0'
rsync -P imapsync root@vp3.lamiral.info:/usr/lib/cgi-bin/imapsync rsync -P imapsync root@vp3.lamiral.info:/usr/lib/cgi-bin/imapsync
curl -v --data 'testslive=1' https://vp3.lamiral.info/cgi-bin/imapsync | grep 'Exiting with return value 0' curl -v --data 'testslive=1;exitonload=0' https://vp3.lamiral.info/cgi-bin/imapsync 2>/dev/null | grep 'Exiting with return value 0'
# Centos # Centos
upload_cgi_vp4: ci_imapsync vp4tests upload_cgi_vp4: ci_imapsync vp4tests
rsync -P imapsync root@vp4.lamiral.info:/var/www/cgi-bin/imapsync_new rsync -P imapsync root@vp4.lamiral.info:/var/www/cgi-bin/imapsync_new
curl -v --data 'testslive=1' https://vp4.lamiral.info/cgi-bin/imapsync_new | grep 'Exiting with return value 0' curl -v --data 'testslive=1;exitonload=0' https://vp4.lamiral.info/cgi-bin/imapsync_new 2>/dev/null | grep 'Exiting with return value 0'
rsync -P imapsync root@vp4.lamiral.info:/var/www/cgi-bin/imapsync rsync -P imapsync root@vp4.lamiral.info:/var/www/cgi-bin/imapsync
curl -v --data 'testslive=1' https://vp4.lamiral.info/cgi-bin/imapsync | grep 'Exiting with return value 0' curl -v --data 'testslive=1;exitonload=0' https://vp4.lamiral.info/cgi-bin/imapsync 2>/dev/null | grep 'Exiting with return value 0'
# Debian # Debian
upload_cgi_ks6: ci_imapsync ks6tests upload_cgi_ks6: ci_imapsync ks6tests
rsync -P imapsync root@ks6.lamiral.info:/usr/lib/cgi-bin/imapsync_new rsync -P imapsync root@ks6.lamiral.info:/usr/lib/cgi-bin/imapsync_new
curl -v --data 'testslive=1' https://ks6.lamiral.info/cgi-bin/imapsync_new | grep 'Exiting with return value 0' curl -v --data 'testslive=1;exitonload=0' https://ks6.lamiral.info/cgi-bin/imapsync_new 2>/dev/null | grep 'Exiting with return value 0'
rsync -P imapsync root@ks6.lamiral.info:/usr/lib/cgi-bin/imapsync rsync -P imapsync root@ks6.lamiral.info:/usr/lib/cgi-bin/imapsync
curl -v --data 'testslive=1' https://ks6.lamiral.info/cgi-bin/imapsync | grep 'Exiting with return value 0' curl -v --data 'testslive=1;exitonload=0' https://ks6.lamiral.info/cgi-bin/imapsync 2>/dev/null | grep 'Exiting with return value 0'
# Promox/Debian
upload_cgi_ks7: ci_imapsync ks7tests
rsync -P imapsync root@ks7.lamiral.info:/usr/lib/cgi-bin/imapsync_new
curl -v --data 'testslive=1;exitonload=0' https://ks7.lamiral.info/cgi-bin/imapsync_new 2>/dev/null | grep 'Exiting with return value 0'
rsync -P imapsync root@ks7.lamiral.info:/usr/lib/cgi-bin/imapsync
curl -v --data 'testslive=1;exitonload=0' https://ks7.lamiral.info/cgi-bin/imapsync 2>/dev/null | grep 'Exiting with return value 0'
# Debian
upload_cgi_cl1: ci_imapsync cl1tests
rsync -P imapsync root@cl1.lamiral.info:/usr/lib/cgi-bin/imapsync_new
curl -v --data 'testslive=1;exitonload=0' https://cl1.lamiral.info/cgi-bin/imapsync_new 2>/dev/null | grep 'Exiting with return value 0'
rsync -P imapsync root@cl1.lamiral.info:/usr/lib/cgi-bin/imapsync
curl -v --data 'testslive=1;exitonload=0' https://cl1.lamiral.info/cgi-bin/imapsync 2>/dev/null | grep 'Exiting with return value 0'
.PHONY: vp3tests vp4tests ks6tests .PHONY: vp3tests vp4tests ks6tests
@ -952,10 +1047,29 @@ ks6tests:
ssh root@ks6.lamiral.info ./imapsync --tests ssh root@ks6.lamiral.info ./imapsync --tests
ssh root@ks6.lamiral.info ./imapsync --testslive6 ssh root@ks6.lamiral.info ./imapsync --testslive6
ks7tests:
rsync -P imapsync root@ks7.lamiral.info:imapsync
ssh root@ks7.lamiral.info ./imapsync --tests
ssh root@ks7.lamiral.info ./imapsync --testslive6
cl1tests:
rsync -P imapsync root@cl1.lamiral.info:imapsync
ssh root@cl1.lamiral.info ./imapsync --tests
ssh root@cl1.lamiral.info ./imapsync --testslive6
upload_imapsync_all:
scp imapsync INSTALL.d/prerequisites_imapsync W/learn/processtable root@i005.lamiral.info:
scp imapsync INSTALL.d/prerequisites_imapsync W/learn/processtable root@i006.lamiral.info:
scp imapsync INSTALL.d/prerequisites_imapsync W/learn/processtable root@i013.lamiral.info:
scp imapsync INSTALL.d/prerequisites_imapsync W/learn/processtable root@i014.lamiral.info:
upload_X: upload_X:
./W/tools/validate_xml_html5 X/index.html X/imapsync_form.html X/imapsync_form_extra.html X/imapsync_form_extra_free.html X/imapsync_form_wrapper.html ./W/tools/validate_xml_html5 X/imapsync_form.html X/imapsync_form_extra.html X/imapsync_form_extra_free.html X/imapsync_form_wrapper.html X/proximapsync_form_extra_free.html
rcsdiff X/imapsync_form.html X/imapsync_form_extra.html X/imapsync_form_extra_free.html X/imapsync_form_wrapper.html X/imapsync_form.css X/noscript.css rcsdiff X/imapsync_form.html X/imapsync_form_extra.html X/imapsync_form_extra_free.html X/imapsync_form_wrapper.html X/proximapsync_form_extra_free.html
rcsdiff X/imapsync_form.js X/imapsync_form_wrapper.js rcsdiff X/imapsync_form.css X/noscript.css
rcsdiff X/imapsync_form.js X/imapsync_form_wrapper.js X/proximapsync_form.js
rcsdiff INSTALL.d/INSTALL.OnlineUI.txt rcsdiff INSTALL.d/INSTALL.OnlineUI.txt
rsync -a ./INSTALL.d/INSTALL.OnlineUI.txt ../imapsync_website/INSTALL.d/INSTALL.OnlineUI.txt rsync -a ./INSTALL.d/INSTALL.OnlineUI.txt ../imapsync_website/INSTALL.d/INSTALL.OnlineUI.txt
rsync -av --delete X/ ../imapsync_website/X/ rsync -av --delete X/ ../imapsync_website/X/
@ -977,6 +1091,10 @@ upload_FAQ:
rsync -avH --delete ./doc/ ../imapsync_website/doc/ rsync -avH --delete ./doc/ ../imapsync_website/doc/
rsync -aHvz --delete ../imapsync_website/ root@ks5.lamiral.info:/usr/local/www/apache24/data/imapsync/ rsync -aHvz --delete ../imapsync_website/ root@ks5.lamiral.info:/usr/local/www/apache24/data/imapsync/
upload_oauth2:
rm -f oauth2/D_oauth2_*
rsync -aHv --delete ./oauth2/ ../imapsync_website/oauth2/
rsync -aHvz --delete ../imapsync_website/ root@ks5.lamiral.info:/usr/local/www/apache24/data/imapsync/
upload_ks_W_memo: upload_ks_W_memo:
rsync -av W/memo gilles@ks.lamiral.info:public_html/imapsync/W/memo rsync -av W/memo gilles@ks.lamiral.info:public_html/imapsync/W/memo

17
README
View File

@ -6,7 +6,7 @@ NAME
VERSION VERSION
This documentation refers to Imapsync $Revision: 2.200 $ This documentation refers to Imapsync $Revision: 2.229 $
USAGE USAGE
@ -225,7 +225,7 @@ OPTIONS
It will be combined with the --user1 value to form the It will be combined with the --user1 value to form the
string to pass with XOAUTH2 authentication. string to pass with XOAUTH2 authentication.
The password given by --password1 or --passfile1 The password given by --password1 or --passfile1
is ignored. is ignored but needed on the command line.
Instead of the access token itself, the value can be a Instead of the access token itself, the value can be a
file containing the access token on the first line. file containing the access token on the first line.
If the value is a file, imapsync reads its first line If the value is a file, imapsync reads its first line
@ -239,7 +239,8 @@ OPTIONS
--oauthdirect1 str : The direct string to pass with XOAUTH2 authentication. --oauthdirect1 str : The direct string to pass with XOAUTH2 authentication.
The password given by --password1 or --passfile1 and The password given by --password1 or --passfile1 and
the user given by --user1 are ignored. the user given by --user1 are ignored but they are
needed to be on the command line. Consider it a bug.
--oauthdirect2 str : same thing as oauthdirect1 --oauthdirect2 str : same thing as oauthdirect1
@ -368,7 +369,7 @@ OPTIONS
2019_12_22_23_57_59_532 is nearly the date of the start 2019_12_22_23_57_59_532 is nearly the date of the start
YYYY_MM_DD_HH_MM_SS_mmm YYYY_MM_DD_HH_MM_SS_mmm
year_month_day_hour_minute_seconde_millisecond year_month_day_hour_minute_second_millisecond
and user1 user2 are the --user1 --user2 values. and user1 user2 are the --user1 --user2 values.
@ -617,7 +618,7 @@ OPTIONS
Default is 120 and 0 means no timeout at all. Default is 120 and 0 means no timeout at all.
Caveat, under CGI context, you may encounter a timeout Caveat, under CGI context, you may encounter a timeout
from the webserver, killing imapsync and the imap connexions. from the webserver, killing imapsync and the imap connections.
See the document INSTALL.OnlineUI.txt and search See the document INSTALL.OnlineUI.txt and search
for "Timeout" for how to deal with this issue. for "Timeout" for how to deal with this issue.
@ -653,6 +654,12 @@ OPTIONS
it's an http request to it's an http request to
http://imapsync.lamiral.info/prj/imapsync/VERSION http://imapsync.lamiral.info/prj/imapsync/VERSION
--emailreport1 : Put the email final report in host1 INBOX
--emailreport2 : Put the email final report in host2 INBOX
--noemailreport1 : Do not put the email final report in host1 INBOX
--noemailreport2 : Do not put the email final report in host2 INBOX
--noid : Do not send/receive IMAP "ID" command to imap servers. --noid : Do not send/receive IMAP "ID" command to imap servers.
--justconnect : Just connect to both servers and print useful --justconnect : Just connect to both servers and print useful

View File

@ -4,7 +4,7 @@
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" id="TOP"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" id="TOP">
<head> <head>
<title>Imapsync list of the 86 imap server software applications supported</title> <title>Imapsync list of the 88 imap server software applications supported</title>
<meta name="generator" content="Bluefish 2.2.2" /> <meta name="generator" content="Bluefish 2.2.2" />
<meta name="author" content="Gilles LAMIRAL" /> <meta name="author" content="Gilles LAMIRAL" />
<meta name="date" content="2016-04-10T00:24:15+0200" /> <meta name="date" content="2016-04-10T00:24:15+0200" />
@ -27,12 +27,13 @@
<body> <body>
<h1>Imapsync list of the 86 imap server software applications supported (and the broken ones) <h1>Imapsync list of the 88 imap server software applications supported (and the broken ones)
<a id="imap_server_success" href="../#TOP"><small>(back to menu)</small></a> <a id="imap_server_success" href="../#TOP"><small>(back to menu)</small></a>
</h1> </h1>
<p>To know whether your IMAP server is a widespread choice, <p>To know whether your IMAP server is a widespread choice,
take a look at <a href="http://openemailsurvey.org/">http://openemailsurvey.org/</a><br/> take a look at <a href="http://openemailsurvey.org/">http://openemailsurvey.org/</a> or
the <a href="https://www.shodan.io/search/facet?query=imap&amp;facet=product">Shodan imap query result</a>.<br/>
The short answer is that if you're not using the famous <b>Dovecot</b> then you're in a niche! The short answer is that if you're not using the famous <b>Dovecot</b> then you're in a niche!
</p> </p>
@ -128,6 +129,9 @@ imapsync --host1 imap.gmail.com
<li>GMX IMAP4 StreamProxy. (<a href="http://www.gmx.com/">http://www.gmx.com/</a>) </li> <li>GMX IMAP4 StreamProxy. (<a href="http://www.gmx.com/">http://www.gmx.com/</a>) </li>
<li>Godaddy IMAP (since Godaddy runs Courier) (<a href="https://www.godaddy.com/">https://www.godaddy.com/</a>) </li> <li>Godaddy IMAP (since Godaddy runs Courier) (<a href="https://www.godaddy.com/">https://www.godaddy.com/</a>) </li>
<li>Gromox/Grammm IMAP server (<a href="https://docs.grammm.com/">https://docs.grammm.com/</a>)</li> <li>Gromox/Grammm IMAP server (<a href="https://docs.grammm.com/">https://docs.grammm.com/</a>)</li>
<li>Grommunio (<a href="https://grommunio.com/">https://grommunio.com/</a>)</li>
<li>Groupwise IMAP (Novell) 6.x and 7.0. Buggy so see the <a href="../FAQ.d/FAQ.Various_Software_Servers.txt">FAQ item about Groupwise</a> <li>Groupwise IMAP (Novell) 6.x and 7.0. Buggy so see the <a href="../FAQ.d/FAQ.Various_Software_Servers.txt">FAQ item about Groupwise</a>
(<a href="http://www.novell.com/products/groupwise/">http://www.novell.com/products/groupwise/</a>) </li> (<a href="http://www.novell.com/products/groupwise/">http://www.novell.com/products/groupwise/</a>) </li>
<li>hMailServer 5.40-B1950 [host12], 5.3.3 [host2], 4.4.1 [host1], 5.3.2-B1769 [host2], 5.6 [host2] <li>hMailServer 5.40-B1950 [host12], 5.3.3 [host2], 4.4.1 [host1], 5.3.2-B1769 [host2], 5.6 [host2]
@ -185,6 +189,8 @@ imapsync --host1 imap.gmail.com
<li>SunONE Messaging server 5.2, 6.0 (SUN JES - Java Enterprise System) (<a href="http://www.oracle.com/">http://www.oracle.com/</a>) </li> <li>SunONE Messaging server 5.2, 6.0 (SUN JES - Java Enterprise System) (<a href="http://www.oracle.com/">http://www.oracle.com/</a>) </li>
<li>Sun Java(tm) System Messaging Server 6.2-2.05, 6.2-7.05, 6.3 (<a href="http://www.oracle.com/">http://www.oracle.com/</a>) </li> <li>Sun Java(tm) System Messaging Server 6.2-2.05, 6.2-7.05, 6.3 (<a href="http://www.oracle.com/">http://www.oracle.com/</a>) </li>
<li>Surgemail 3.6f5-5, 6.3d-72 [host2] (<a href="http://netwinsite.com/surgemail/">http://netwinsite.com/surgemail/</a>) </li> <li>Surgemail 3.6f5-5, 6.3d-72 [host2] (<a href="http://netwinsite.com/surgemail/">http://netwinsite.com/surgemail/</a>) </li>
<li>Tegu mail server (<a href="https://mbk-lab.ru/">https://mbk-lab.ru/</a>)</li>
<li>UW-imap servers (imap-2000b) rijkkramer IMAP4rev1 2000.287 <li>UW-imap servers (imap-2000b) rijkkramer IMAP4rev1 2000.287
(RedHat uses UW like 2003.338rh), v12.264 Solaris 5.7 (OSI Approved) (RedHat uses UW like 2003.338rh), v12.264 Solaris 5.7 (OSI Approved)
(<a href="http://www.washington.edu/imap/">http://www.washington.edu/imap/</a>) </li> (<a href="http://www.washington.edu/imap/">http://www.washington.edu/imap/</a>) </li>
@ -246,7 +252,7 @@ alt="Viewable With Any Browser" />
<!--#config timefmt="%D" --> <!--#config timefmt="%D" -->
<!--#config timefmt="%A %B %d, %Y" --> <!--#config timefmt="%A %B %d, %Y" -->
<b>This document last modified on <!--#echo var="LAST_MODIFIED" --></b> <b>This document last modified on <!--#echo var="LAST_MODIFIED" --></b>
($Id: imapservers.shtml,v 1.56 2021/06/08 09:56:54 gilles Exp gilles $)<br/> ($Id: imapservers.shtml,v 1.59 2022/06/02 10:45:27 gilles Exp gilles $)<br/>
<a href="#TOP">Top of the page</a> <a href="#TOP">Top of the page</a>
</p> </p>

View File

@ -58,11 +58,11 @@ If you are very interrested in those projects, don't hesitate to solicit me!
<!-- <!--
<ul> <ul>
<li><b>2.xxx</b></li> <li><b>2.230</b></li>
<li><b>General</b>: </li> <li><b>General</b>: </li>
<li><b>Dependencies removed</b>: None </li>
<li><b>Dependencies added</b>: None </li> <li><b>Dependencies added</b>: None </li>
<li><b>Dependencies removed</b>: None </li>
<li><b>Enhancement</b>: </li> <li><b>Enhancement</b>: </li>
<li><b>Enhancement</b>: </li> <li><b>Enhancement</b>: </li>
@ -82,9 +82,38 @@ If you are very interrested in those projects, don't hesitate to solicit me!
<li><b>Portability</b>: </li> <li><b>Portability</b>: </li>
<li><b>Portability</b>: </li> <li><b>Portability</b>: </li>
<li><b>CGI context</b>: </li>
<li><b>CGI context</b>: </li>
<li><b>CGI context</b>: </li>
<li><b>CGI context</b>: </li>
</ul> </ul>
--> -->
<ul>
<li><b>2.229</b></li>
<li><b>General</b>: </li>
<li><b>Dependencies added</b>: Proc::ProcessTable </li>
<li><b>Dependencies removed</b>: None </li>
<li><b>Enhancement</b>: Added a stat value: memory footprint times time spent during the sync. The unity is MiB * hour. The stat line is "Memory consumption at the end".</li>
<li><b>Enhancement</b>: Filtering buggy flags is now case insensitive. \Junk or \JUNK or \jUnK etc. (sub tests_filterbuggyflags)</li>
<li><b>Enhancement</b>: Added --memorystress to check memory crunching in normal run.</li>
<li><b>Usability</b>: Do not email final reports by default. Use --emailreport1 and --emailreport2 to add final emails reports in each INBOX.</li>
<li><b>CGI context</b>:
<ul>
<li>Refuse to serve when the cpu load is greater than 1 per cpu. A load of 3.9 with 4 cores is ok, 4.1 is not. (sub heavy_load_reached_by_cpu)</li>
<li>Refuse to serve when the RAM memory available for imapsync processes is less than 1 GB, presented by percentage on the first line like "64.80% used by processes". (sub heavy_load_percent_threshold)</li>
<li>When refuse to serve, exits with value 69 EX_UNAVAILABLE</li>
</ul>
</li>
<li><b>Testing</b>: 1992 unit tests</li>
</ul>
<ul> <ul>
<li><b>2.200</b></li> <li><b>2.200</b></li>
<li><b>Dependencies removed</b>: None </li> <li><b>Dependencies removed</b>: None </li>
@ -1039,7 +1068,7 @@ by ignoring PERMANENTFLAGS (Exchange tests)</li>
<!--#config timefmt="%D" --> <!--#config timefmt="%D" -->
<!--#config timefmt="%A %B %d, %Y" --> <!--#config timefmt="%A %B %d, %Y" -->
<b>This document last modified on <!--#echo var="LAST_MODIFIED" --></b> <b>This document last modified on <!--#echo var="LAST_MODIFIED" --></b>
($Id: news.shtml,v 1.84 2022/04/04 16:11:25 gilles Exp gilles $)<br /> ($Id: news.shtml,v 1.87 2022/09/15 08:42:40 gilles Exp gilles $)<br />
<a href="#TOP">Top of the page</a> <a href="#TOP">Top of the page</a>
</p> </p>
</body></html> </body></html>

View File

@ -41,7 +41,7 @@ to view details of this transaction (if you have a Paypal account).
</p> </p>
<p>Now you have access to the <b>full unlimited imapsync <p>Now you have access to the <b>full unlimited imapsync
<a href="https://imapsync.lamiral.info/X/imapsync_form_extra.html">online service /X</a></b>. <a href="https://imapsync.lamiral.info/X/u.html">online service /X</a></b>.
This online imapsync service doesn't require any installation on your side, just use it as it is.</p> This online imapsync service doesn't require any installation on your side, just use it as it is.</p>
<p>Also, in case you want to <b>run imapsync by yourself</b>, you will find <b>imapsync</b> <p>Also, in case you want to <b>run imapsync by yourself</b>, you will find <b>imapsync</b>
@ -112,7 +112,7 @@ src="S/images/ab_jlh.png"
<!--#config timefmt="%D" --> <!--#config timefmt="%D" -->
<!--#config timefmt="%A %B %d, %Y" --> <!--#config timefmt="%A %B %d, %Y" -->
<b>This document last modified on <!--#echo var="LAST_MODIFIED" --></b> <b>This document last modified on <!--#echo var="LAST_MODIFIED" --></b>
($Id: paypal_return.shtml,v 1.39 2020/10/13 16:25:09 gilles Exp gilles $) ($Id: paypal_return.shtml,v 1.40 2022/05/04 10:23:52 gilles Exp gilles $)
</p> </p>
<script type="text/javascript" src="S/conversion_data.js"> <script type="text/javascript" src="S/conversion_data.js">

28
TODO
View File

@ -1,5 +1,5 @@
#!/bin/cat #!/bin/cat
# $Id: TODO,v 1.265 2022/02/22 15:16:48 gilles Exp gilles $ # $Id: TODO,v 1.269 2022/07/22 09:51:06 gilles Exp gilles $
This documentation is also at http://imapsync.lamiral.info/#doc This documentation is also at http://imapsync.lamiral.info/#doc
@ -9,6 +9,24 @@ TODO file for imapsync
https://imapsync.lamiral.info/TODO https://imapsync.lamiral.info/TODO
SUGGESTED 2022_07_22 by Flavio
Have a parameter to reconnect in case of failure
Exiting with return value 102 (EXIT_CONNECTION_FAILURE_HOST2)
SUGGESTED 2022_01_04 by Franck
It might be even more efficient if at the end there was a summary in
categories for mails that did not transfer, e.g.:
xx number of mails not transferred due to missing header: use --addheader to transfer
xx number of duplicate mails not transferred: use ... to force transfer
... etc
Thus one would not have to scroll through the log unless there
were particular mails to be inspected as to problems.
SUGGESTED 2022_05_05 by mao13820
https://github.com/imapsync/imapsync/issues/330#issuecomment-1118190081
Try IO::Socket::Socks::Wrapper
on Socks server.
SUGGESTED 2022_02_19 SUGGESTED 2022_02_19
Talk about size discrepencies. Talk about size discrepencies.
@ -76,7 +94,7 @@ to sync only the Sent folder.
SUGGESTED 2020_11_30 by Gilles SUGGESTED 2020_11_30 by Gilles
Add a FAQ.Invalid_Argument.txt Add a FAQ.Invalid_Argument.txt
This error is a low level connexion issue, either ipv6 or dns resolution of This error is a low level connection issue, either ipv6 or dns resolution of
the name. the name.
@ -727,7 +745,7 @@ See https://metacpan.org/pod/Mail::IMAPClient#Keepalive
DONE revision 2.159 date: 2021/11/19 14:29:31 DONE revision 2.159 date: 2021/11/19 14:29:31
SUGGESTED 2021_11_18 by Justas Umbrasas SUGGESTED 2021_11_18 by Justas Umbrasas
Add COMPRESS to imap connexions Add COMPRESS to imap connections
--compress1 --compress2 --compress1 --compress2
DONE 2021/04/30 revision 2.111 by Gilles DONE 2021/04/30 revision 2.111 by Gilles
@ -896,7 +914,7 @@ Inline help when Ctrl-c is hit
SUGGESTED 2016_07_15 by Alan Williams SUGGESTED 2016_07_15 by Alan Williams
DONE 2016_07_20 for IO::Socket::SSL DONE 2016_07_20 for IO::Socket::SSL
Add --inet4 --inet6 to force AF_INET or AF_INET6 ip connexion, Add --inet4 --inet6 to force AF_INET or AF_INET6 ip connection,
aka ipv4 or ipv6. aka ipv4 or ipv6.
SUGGESTED 2016_06_24 by Jean-Dominique Delyon SUGGESTED 2016_06_24 by Jean-Dominique Delyon
@ -981,7 +999,7 @@ Option name: --pipemess "command arg1 arg2 ..."
DONE. Transform messages with too long linelength. DONE. Transform messages with too long linelength.
Office365 and Exchange abort connexion Office365 and Exchange abort connection
when they encounter a message with more than 10000 characters on a single line. when they encounter a message with more than 10000 characters on a single line.
Could be done with the previous --pipemess with reformime. Could be done with the previous --pipemess with reformime.
Thanks to Larry Moore for suggesting reformime tool! Thanks to Larry Moore for suggesting reformime tool!

View File

@ -1 +1 @@
2.200 2.229

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,5 @@
// $Id: imapsync_form.js,v 1.27 2022/01/30 20:57:46 gilles Exp gilles $ // $Id: imapsync_form.js,v 1.28 2022/04/16 16:51:07 gilles Exp gilles $
/*jslint browser: true*/ /*global $*/ /*jslint browser: true*/ /*global $*/
@ -751,9 +751,6 @@ $(document).ready(
if ( "imapsync.lamiral.info" === location.hostname ) if ( "imapsync.lamiral.info" === location.hostname )
{ {
// $( "#status_24h" ).attr('src', 'https://lstu.fr/imapsync_online_status_24h_1200x70') ;
// $( "#status_7d" ).attr('src', 'https://lstu.fr/imapsync_online_status_7d') ;
// $( "#status_2m" ).attr('src', 'https://lstu.fr/imapsync_online_status_2months_1200x70') ;
$( "#local_bandwidth" ).collapse( "show" ) ; $( "#local_bandwidth" ).collapse( "show" ) ;
$( "#local_status_dbmon" ).collapse( "show" ) ; $( "#local_status_dbmon" ).collapse( "show" ) ;
$( "#local_status_hetrix" ).collapse( "show" ) ; $( "#local_status_hetrix" ).collapse( "show" ) ;
@ -762,7 +759,6 @@ $(document).ready(
} }
else if ( "lamiral.info" === location.hostname ) else if ( "lamiral.info" === location.hostname )
{ {
$( "#local_bandwidth" ).collapse( "show" ) ; $( "#local_bandwidth" ).collapse( "show" ) ;
$( "#local_status_dbmon" ).collapse( "show" ) ; $( "#local_status_dbmon" ).collapse( "show" ) ;
$( "#local_status_hetrix" ).collapse( "show" ) ; $( "#local_status_hetrix" ).collapse( "show" ) ;

View File

@ -1,6 +1,6 @@
<!DOCTYPE html> <!DOCTYPE html>
<!-- $Id: imapsync_form_extra.html,v 1.25 2022/02/18 17:06:24 gilles Exp gilles $ --> <!-- $Id: imapsync_form_extra.html,v 1.28 2022/05/07 13:51:28 gilles Exp gilles $ -->
<html lang="en" id="top"> <html lang="en" id="top">
@ -323,8 +323,8 @@
<div class="row scripton" id="consoles" > <div class="row scripton" id="consoles" >
<span id="imapsync_current" class="center-block text-center"></span> <pre id="imapsync_current" class="center-block text-center"></pre>
<span id="imapsync_advice_hours" class="text-center collapse"> <span id="imapsync_advice_hours" class="text-center collapse">
Best <a href="#local_bandwidth"><b>bandwidth available hours</b></a> are from <b>11h PM to 11h AM UTC</b> on Mondays to Fridays, <b>all hours</b> on Saturdays and <b>Sundays</b>. Best <a href="#local_bandwidth"><b>bandwidth available hours</b></a> are from <b>11h PM to 11h AM UTC</b> on Mondays to Fridays, <b>all hours</b> on Saturdays and <b>Sundays</b>.
</span> </span>
@ -418,8 +418,8 @@
<p class="text-center"> <p class="text-center">
The service is down? For how long? How often? Take also a look at the The service is down? For how long? How often? Take also a look at the
<a href="https://hetrixtools.com/report/uptime/7908dea8f3ff86eabdef6146307afd5f/414322.html">Imapsync Online Status</a> <a href="https://hetrixtools.com/report/uptime/873a2356aea43055204b59f562b5ad52/414322.html">Imapsync Online Status</a>
monitor page powered by the <a href="https://hetrixtools.com/uptime-monitor/414322.html">HetrixTools</a> company. monitor page powered by the <a href="https://hetrixtools.com/414322.html">HetrixTools</a> company.
</p> </p>
</div> </div>
@ -442,7 +442,7 @@ monitor page powered by the <a href="https://hetrixtools.com/uptime-monitor/4143
<!-- <a href="#buttons" class="btn btn-info scripton" role="button">Consoles</a> --> <!-- <a href="#buttons" class="btn btn-info scripton" role="button">Consoles</a> -->
<a href="#bottom" title="Bottom of the page" class="btn btn-info active" role="button">Bottom</a> <a href="#bottom" title="Bottom of the page" class="btn btn-info active" role="button">Bottom</a>
<br> <br>
<small> ($Id: imapsync_form_extra.html,v 1.25 2022/02/18 17:06:24 gilles Exp gilles $) </small><br> <small> ($Id: imapsync_form_extra.html,v 1.28 2022/05/07 13:51:28 gilles Exp gilles $) </small><br>
Terms and conditions for anything: <a href="https://imapsync.lamiral.info/LICENSE">No limits to do anything with this work and this license!</a><br> Terms and conditions for anything: <a href="https://imapsync.lamiral.info/LICENSE">No limits to do anything with this work and this license!</a><br>
</div> </div>
</div> </div>

View File

@ -1,6 +1,6 @@
<!DOCTYPE html> <!DOCTYPE html>
<!-- $Id: imapsync_form_extra_free.html,v 1.27 2022/02/20 09:37:45 gilles Exp gilles $ --> <!-- $Id: imapsync_form_extra_free.html,v 1.30 2022/05/07 13:51:28 gilles Exp gilles $ -->
<html lang="en" id="top"> <html lang="en" id="top">
@ -382,7 +382,7 @@ It's <b>ok</b> if you <b>don't</b> have a VAT number.<br />
<div class="row scripton" id="consoles" > <div class="row scripton" id="consoles" >
<span id="imapsync_current" class="center-block text-center"></span> <pre id="imapsync_current" class="center-block text-center"></pre>
<span id="imapsync_advice_hours" class="text-center collapse"> <span id="imapsync_advice_hours" class="text-center collapse">
Best <a href="#local_bandwidth"><b>bandwidth available hours</b></a> are from <b>11h PM to 11h AM UTC</b> on Mondays to Fridays, <b>all hours</b> on Saturdays and <b>Sundays</b>. Best <a href="#local_bandwidth"><b>bandwidth available hours</b></a> are from <b>11h PM to 11h AM UTC</b> on Mondays to Fridays, <b>all hours</b> on Saturdays and <b>Sundays</b>.
@ -477,8 +477,8 @@ It's <b>ok</b> if you <b>don't</b> have a VAT number.<br />
<p class="text-center"> <p class="text-center">
The service is down? For how long? How often? Take also a look at the The service is down? For how long? How often? Take also a look at the
<a href="https://hetrixtools.com/report/uptime/7908dea8f3ff86eabdef6146307afd5f/414322.html">Imapsync Online Status</a> <a href="https://hetrixtools.com/report/uptime/873a2356aea43055204b59f562b5ad52/414322.html">Imapsync Online Status</a>
monitor page powered by the <a href="https://hetrixtools.com/uptime-monitor/414322.html">HetrixTools</a> company. monitor page powered by the <a href="https://hetrixtools.com/414322.html">HetrixTools</a> company.
</p> </p>
</div> </div>
@ -501,7 +501,7 @@ monitor page powered by the <a href="https://hetrixtools.com/uptime-monitor/4143
<!-- <a href="#buttons" class="btn btn-info scripton" role="button">Consoles</a> --> <!-- <a href="#buttons" class="btn btn-info scripton" role="button">Consoles</a> -->
<a href="#bottom" title="Bottom of the page" class="btn btn-info active" role="button">Bottom</a> <a href="#bottom" title="Bottom of the page" class="btn btn-info active" role="button">Bottom</a>
<br> <br>
<small> ($Id: imapsync_form_extra_free.html,v 1.27 2022/02/20 09:37:45 gilles Exp gilles $) </small><br> <small> ($Id: imapsync_form_extra_free.html,v 1.30 2022/05/07 13:51:28 gilles Exp gilles $) </small><br>
Terms and conditions for anything: <a href="https://imapsync.lamiral.info/LICENSE">No limits to do anything with this work and this license!</a><br> Terms and conditions for anything: <a href="https://imapsync.lamiral.info/LICENSE">No limits to do anything with this work and this license!</a><br>
</div> </div>
</div> </div>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

View File

@ -1 +1 @@
imapsync_form_extra_free.html proximapsync_form_extra_free.html

View File

@ -1,5 +1,5 @@
// $Id: imapsync_form_new.js,v 1.12 2019/07/29 22:42:19 gilles Exp gilles $ // $Id: proximapsync_form.js,v 1.2 2022/05/04 00:40:46 gilles Exp gilles $
/*jslint browser: true*/ /*global $*/ /*jslint browser: true*/ /*global $*/
@ -19,7 +19,7 @@ $(document).ready(
"4": "Finished and response is ready" "4": "Finished and response is ready"
} ; } ;
var refresh_interval_ms = 5000 ; var refresh_interval_ms = 6000 ;
var refresh_interval_s = refresh_interval_ms / 1000 ; var refresh_interval_s = refresh_interval_ms / 1000 ;
var test = { var test = {
counter_all : 0 , counter_all : 0 ,
@ -51,8 +51,36 @@ $(document).ready(
} }
$("#tests").append( message ) ; $("#tests").append( message ) ;
} ; } ;
var note = function note( message )
{
$("#tests").append( message ) ;
} ;
function last_eta( string )
var tests_last_x_lines = function tests_last_x_lines()
{
is( "", last_x_lines(), "last_x_lines: no args => empty string" ) ;
is( "", last_x_lines(""), "last_x_lines: empty string => empty string" ) ;
is( "abc", last_x_lines("abc"), "last_x_lines: abc => abc" ) ;
is( "abc\ndef", last_x_lines("abc\ndef"), "last_x_lines: abc\ndef => abc\ndef" ) ;
is( "def", last_x_lines("abc\ndef", -1), "last_x_lines: abc\ndef -1 => def\n" ) ;
is( "", last_x_lines("abc\ndef", 0), "last_x_lines: abc\ndef 0 => empty string" ) ;
is( "abc\ndef", last_x_lines("abc\ndef", -10), "last_x_lines: last 10 of 2 lines => 2 lines" ) ;
is( "4\n5\n", last_x_lines("1\n2\n3\n4\n5\n", -3), "last_x_lines: last 3 lines of 5 lines" ) ;
is( "3\n4\n5", last_x_lines("1\n2\n3\n4\n5", -3), "last_x_lines: last 3 lines of 5 lines" ) ;
} ;
var last_x_lines = function last_x_lines( string, num )
{
if ( undefined === string || 0 === num )
{
return "" ;
}
return string.split(/\r?\n/).slice(num).join("\n") ;
} ;
var last_eta = function last_eta( string )
{ {
// return the last occurrence of the substring "ETA: ...\n" // return the last occurrence of the substring "ETA: ...\n"
// or "ETA: unknown" or "" // or "ETA: unknown" or ""
@ -77,8 +105,10 @@ $(document).ready(
return "ETA: unknown" ; return "ETA: unknown" ;
} }
} }
function tests_last_eta() var tests_last_eta = function tests_last_eta()
{ {
is( "", last_eta( ), "last_eta: no args => empty string" ) ; is( "", last_eta( ), "last_eta: no args => empty string" ) ;
@ -252,7 +282,7 @@ $(document).ready(
} }
else else
{ {
slice_length = -240 ; slice_length = -2400 ;
} }
slice_log = xhr.responseText.slice( slice_length ) ; slice_log = xhr.responseText.slice( slice_length ) ;
eta_str = last_eta( slice_log ) ; eta_str = last_eta( slice_log ) ;
@ -278,11 +308,13 @@ $(document).ready(
return ; return ;
} ; } ;
function refreshLog( xhr ) var refreshLog = function refreshLog( xhr )
{ {
var eta_obj ; var eta_obj ;
var eta_str ; var eta_str ;
$( "#imapsync_current" ).load( "imapsync_current.txt" ) ;
eta_obj = extract_eta( xhr ) ; eta_obj = extract_eta( xhr ) ;
progress_bar_update( eta_obj ) ; progress_bar_update( eta_obj ) ;
@ -290,25 +322,25 @@ $(document).ready(
if ( xhr.readyState === 4 ) if ( xhr.readyState === 4 )
{ {
// end of sync // end of sync
$("#progress-txt").text( $("#progress-txt").text(
"Ended. It remains " "Ended. It remains "
+ eta_obj.msgs_left + " messages to be synced" ) ; + eta_obj.msgs_left + " messages to be synced" ) ;
$( "#output" ).text( xhr.responseText ) ;
} }
else else
{ {
eta_str = eta_obj.str + " (refresh every " + refresh_interval_s + " s)" ; eta_str = eta_obj.str + " (refresh every " + refresh_interval_s + " s)" ;
eta_str = eta_str.replace(/(\r\n|\n|\r)/gm, "") ; // trim newline eta_str = eta_str.replace(/(\r\n|\n|\r)/gm, "") ; // trim newlines
//$("#tests").append( "refreshLog eta_str: " + eta_str + "\n" ) ; //$("#tests").append( "refreshLog eta_str: " + eta_str + "\n" ) ;
$("#progress-txt").text( eta_str ) ; $( "#progress-txt" ).text( eta_str ) ;
var last_lines = last_x_lines( xhr.responseText.slice(-2000), -10)
$( "#output" ).text( last_lines ) ;
} }
$( "#output" ).text( xhr.responseText ) ;
} }
var handleRun = function handleRun(xhr, timerRefreshLog)
function handleRun(xhr, timerRefreshLog)
{ {
$("#console").text( $("#console").text(
@ -319,15 +351,17 @@ $(document).ready(
// var headers = xhr.getAllResponseHeaders(); // var headers = xhr.getAllResponseHeaders();
// $("#console").append(headers); // $("#console").append(headers);
// $("#console").append("See the completed log\n"); // $("#console").append("See the completed log\n");
$("#link_to_bottom").show() ;
clearInterval( timerRefreshLog ) ; clearInterval( timerRefreshLog ) ;
refreshLog( xhr ) ; // a last time refreshLog( xhr ) ; // a last time
// back to enable state for next run // back to enable state for next run
$("#bt-sync").prop("disabled", false) ; $("#bt-sync").prop("disabled", false) ;
$( "#imapsync_current" ).load( "imapsync_current.txt" ) ;
} }
} }
function imapsync() var imapsync = function imapsync()
{ {
var querystring = $("#form").serialize() ; var querystring = $("#form").serialize() ;
$("#abort").text("\n\n") ; // clean abort console $("#abort").text("\n\n") ; // clean abort console
@ -351,6 +385,8 @@ $(document).ready(
{ {
querystring = querystring + "&office2=on" ; querystring = querystring + "&office2=on" ;
} }
// querystring = querystring + "&tmphash=" + tmphash( ) ;
var xhr ; var xhr ;
@ -366,14 +402,14 @@ $(document).ready(
handleRun( xhr, timerRefreshLog ) ; handleRun( xhr, timerRefreshLog ) ;
} ; } ;
xhr.open( "POST", "/cgi-bin/imapsync", true ) ; xhr.open( "POST", "/cgi-bin/proximapsync", true ) ;
xhr.setRequestHeader( "Content-type", xhr.setRequestHeader( "Content-type",
"application/x-www-form-urlencoded" ) ; "application/x-www-form-urlencoded" ) ;
xhr.send( querystring ) ; xhr.send( querystring ) ;
} }
function handleAbort( xhr ) var handleAbort = function handleAbort( xhr )
{ {
$( "#abort" ).text( $( "#abort" ).text(
@ -388,7 +424,7 @@ $(document).ready(
} }
} }
function abort() var abort = function abort()
{ {
var querystring = $("#form").serialize() + "&abort=on"; var querystring = $("#form").serialize() + "&abort=on";
var xhr; var xhr;
@ -397,12 +433,12 @@ $(document).ready(
{ {
handleAbort(xhr); handleAbort(xhr);
}; };
xhr.open("POST", "/cgi-bin/imapsync", true); xhr.open("POST", "/cgi-bin/proximapsync", true);
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhr.send(querystring); xhr.send(querystring);
} }
function store( id ) var store = function store( id )
{ {
var stored ; var stored ;
//$( "#tests" ).append( "Eco: " + id + " type is " + $( id ).attr( "type" ) + "\n" ) ; //$( "#tests" ).append( "Eco: " + id + " type is " + $( id ).attr( "type" ) + "\n" ) ;
@ -420,7 +456,7 @@ $(document).ready(
return stored ; return stored ;
} }
function retrieve( id ) var retrieve = function retrieve( id )
{ {
var retrieved ; var retrieved ;
//$( "#tests" ).append( "Eco: " + id + " type is " + $( id ).attr( "type" ) + " length is " + $( id ).length + "\n" ) ; //$( "#tests" ).append( "Eco: " + id + " type is " + $( id ).attr( "type" ) + " length is " + $( id ).length + "\n" ) ;
@ -438,7 +474,7 @@ $(document).ready(
return retrieved ; return retrieved ;
} }
function tests_store_retrieve() var tests_store_retrieve = function tests_store_retrieve()
{ {
if ( $("#tests").length !== 0 ) if ( $("#tests").length !== 0 )
{ {
@ -479,7 +515,7 @@ $(document).ready(
} }
function store_form() var store_form = function store_form()
{ {
if ( Storage !== "undefined") if ( Storage !== "undefined")
{ {
@ -506,7 +542,7 @@ $(document).ready(
} }
} }
function show_extra_if_needed() var show_extra_if_needed = function show_extra_if_needed()
{ {
if ( $("#subfolder1").length && $("#subfolder1").val().length > 0 ) if ( $("#subfolder1").length && $("#subfolder1").val().length > 0 )
{ {
@ -518,7 +554,7 @@ $(document).ready(
} }
} }
function retrieve_form() var retrieve_form = function retrieve_form()
{ {
if ( Storage !== "undefined" ) if ( Storage !== "undefined" )
{ {
@ -555,14 +591,14 @@ $(document).ready(
localStorage.account2_background_color ) ; localStorage.account2_background_color ) ;
} }
// Show the extra parameters if they are not empty because it would be dangerous // Show the extra parameters if they are not empty because it would
// to retrieve them without knowing // be dangerous to retrieve them without showing them
show_extra_if_needed() ; show_extra_if_needed() ;
} }
} }
function showpassword( id, button ) var showpassword = function showpassword( id, button )
{ {
var x = document.getElementById( id ); var x = document.getElementById( id );
if ( button.checked ) if ( button.checked )
@ -573,16 +609,73 @@ $(document).ready(
} }
} }
function init()
var tests_cryptojs = function tests_cryptojs()
{
if ( $("#tests").length !== 0 )
{
if (typeof CryptoJS === 'undefined')
{
is( true, typeof CryptoJS !== 'undefined', "CryptoJS is available" ) ;
note( "CryptoJS is not available on this site. Ask the admin to fix this.\n" ) ;
}
else if (typeof CryptoJS.SHA256 !== "function")
{
is( "function", typeof CryptoJS.SHA256, "CryptoJS.SHA256 is a function" ) ;
note( "CryptoJS.SHA256 function is not available on this site. Ask the admin to fix this.\n" ) ;
}
else
{
// safe to use the function
is( "function", typeof CryptoJS.SHA256, "CryptoJS.SHA256 is a function" ) ;
is( "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f91", sha256("Message"), "sha256 Message" ) ;
is( "26429a356b1d25b7d57c0f9a6d5fed8a290cb42374185887dcd2874548df0779", sha256("caca"), "sha256 caca" ) ;
is( "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", sha256(""), "sha256 ''" ) ;
is( tmphash(), tmphash(), "tmphash" ) ;
$("#user1").val("test1") ;
$("#password1").val("secret1") ;
$("#host1").val("test1.lamiral.info") ;
$("#user2").val("test2") ;
$("#password2").val("secret2") ;
$("#host2").val("test2.lamiral.info") ;
is( "20d2b4917cf69114876b4c8779af543e89c5871c6ada68107619722e55af1101", tmphash(), "tmphash like testslive" ) ;
$("#user1").val("") ;
$("#password1").val("") ;
$("#host1").val("") ;
$("#user2").val("") ;
$("#password2").val("") ;
$("#host2").val("") ;
}
}
}
var sha256 = function sha256( string )
{
var hash = CryptoJS.SHA256( string ) ;
var hash_hex = hash.toString( CryptoJS.enc.Hex ) ;
return( hash_hex ) ;
}
var tmphash = function tmphash()
{
var string = "" ;
string = string.concat(
$("#user1").val(), $("#password1").val(), $("#host1").val(),
$("#user2").val(), $("#password2").val(), $("#host2").val(),
)
return( sha256( string ) ) ;
}
var init = function init()
{ {
// in case of a manual refresh, start with // in case of a manual refresh, start with
$("#bt-sync").prop("disabled", false); $("#bt-sync").prop("disabled", false);
$("#bt-abort").prop("disabled", false); $("#bt-abort").prop("disabled", false);
$("#link_to_bottom").hide();
$("#progress-bar-left").css( "width", 100 + "%" ).attr( "aria-valuenow", 100 ) ; $("#progress-bar-left").css( "width", 100 + "%" ).attr( "aria-valuenow", 100 ) ;
retrieve_form();
$("#showpassword1").click( $("#showpassword1").click(
function ( event ) function ( event )
{ {
@ -605,9 +698,9 @@ $(document).ready(
$("#bt-sync").click( $("#bt-sync").click(
function () function ()
{ {
$( "#imapsync_current" ).load( "imapsync_current.txt" ) ;
$("#bt-sync").prop("disabled", true) ; $("#bt-sync").prop("disabled", true) ;
$("#bt-abort").prop("disabled", false) ; $("#bt-abort").prop("disabled", false) ;
$("#link_to_bottom").hide() ;
$("#progress-txt").text( "ETA: coming soon" ) ; $("#progress-txt").text( "ETA: coming soon" ) ;
store_form() ; store_form() ;
imapsync() ; imapsync() ;
@ -617,9 +710,11 @@ $(document).ready(
$("#bt-abort").click( $("#bt-abort").click(
function () function ()
{ {
$( "#imapsync_current" ).load( "imapsync_current.txt" ) ;
$("#bt-sync").prop("disabled", true); $("#bt-sync").prop("disabled", true);
$("#bt-abort").prop("disabled", true); $("#bt-abort").prop("disabled", true);
abort(); abort();
$( "#imapsync_current" ).load( "imapsync_current.txt" ) ;
} }
); );
@ -653,12 +748,29 @@ $(document).ready(
showpassword( "password2", $("#showpassword2")[0] ) ; showpassword( "password2", $("#showpassword2")[0] ) ;
} }
) ; ) ;
if ( "imapsync.lamiral.info" === location.hostname )
{
$( "#local_bandwidth" ).collapse( "show" ) ;
$( "#local_status_dbmon" ).collapse( "show" ) ;
$( "#local_status_hetrix" ).collapse( "show" ) ;
$( "#imapsync_advice_hours" ).collapse( "show" ) ;
$( "#imapsync_current" ).load( "imapsync_current.txt" ) ;
}
else if ( "lamiral.info" === location.hostname )
{
$( "#local_bandwidth" ).collapse( "show" ) ;
$( "#local_status_dbmon" ).collapse( "show" ) ;
$( "#local_status_hetrix" ).collapse( "show" ) ;
$( "#imapsync_advice_hours" ).collapse( "show" ) ;
$( "#imapsync_current" ).load( "imapsync_current.txt" ) ;
}
} }
var tests_bilan = function tests_bilan() var tests_bilan = function tests_bilan( nb_attended_test )
{ {
// attended number of tests // attended number of tests: nb_attended_test
var nb_attended_test = 29 ;
$("#tests").append( "1.." + test.counter_all + "\n" ) ; $("#tests").append( "1.." + test.counter_all + "\n" ) ;
if ( test.counter_nok > 0 ) if ( test.counter_nok > 0 )
{ {
@ -681,22 +793,32 @@ $(document).ready(
} }
} ; } ;
function tests() var tests = function tests( nb_attended_test )
{ {
if ( $("#tests").length !== 0 ) if ( $("#tests").length !== 0 )
{ {
tests_store_retrieve( ) ; tests_store_retrieve( ) ;
tests_last_eta( ) ; tests_last_eta( ) ;
tests_decompose_eta_line( ) ; tests_decompose_eta_line( ) ;
tests_last_x_lines( ) ;
// tests_cryptojs( ) ;
// The following test can be used to check that if a test fails
// then all the tests are shown to the user.
//is( 0, 1, "this test always fails" ) ; //is( 0, 1, "this test always fails" ) ;
tests_bilan( ) ;
tests_bilan( nb_attended_test ) ;
// If you want to always see the tests, uncomment the following
// line
//$("#tests").collapse("show") ; //$("#tests").collapse("show") ;
} }
} }
init( ) ; init( ) ;
tests( ) ; tests( 38 ) ;
retrieve_form( ) ;
} }

View File

@ -0,0 +1,476 @@
<!DOCTYPE html>
<!-- $Id: proximapsync_form_extra.html,v 1.2 2022/05/07 13:53:00 gilles Exp gilles $ -->
<html lang="en" id="top">
<head>
<!--
<script
data-ad-client="ca-pub-3325993554161060"
async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js">
</script>
-->
<title>Imapsync Online Unlimited</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css"
integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp" crossorigin="anonymous">
<link rel="stylesheet" href="imapsync_form.css">
<link rel="stylesheet" href="../S/style.css" type="text/css" />
<link rel="license" href="https://imapsync.lamiral.info/NOLIMIT">
<noscript>
<link rel="stylesheet" href="noscript.css">
</noscript>
</head>
<body>
<div class="scripton">
<!-- will appear if some tests fail -->
<pre id="tests" class="collapse"></pre>
<!-- hidden stuff that must exit for the tests -->
<div class="hidden">
<input type="checkbox" id="test_checkbox">
<input type="text" id="test_text">
<input type="radio" id="test_radio1" name="test_radio" value="first" >
<input type="radio" id="test_radio2" name="test_radio" value="second" >
</div>
</div>
<div class="container-fluid" >
<div class="row">
<div class="text-center">
<a href="https://imapsync.lamiral.info/">
<img alt="Imapsync home" title="Imapsync home page" src="https://imapsync.lamiral.info/X/logo_imapsync_Xn.png" height="38" width="60">
</a>
<a href="#top" title="Top of the page" class="btn btn-info " role="button">Top</a>
<a href="#bottom" title="Bottom of the page" class="btn btn-info active" role="button">Bottom</a>
</div>
</div>
<h1 class="text-center">Imapsync Online Unlimited</h1>
<p class="text-center larger"> <strong>Copy</strong>/synchronize a <strong>complete</strong> Mailbox to another, without <strong>duplicates!</strong></p>
<form id="form" action="/cgi-bin/proximapsync" method="post" autocomplete="on">
<div id="form_row" class="row">
<div id="account1" class="col-md-5" >
<fieldset>
<legend class="text-center h2">IMAP source Mailbox</legend>
<label for="user1">Login</label> (usually an email address)
<div class="input-group form-group">
<span class="input-group-addon"><i class="glyphicon glyphicon-user"> </i></span>
<input
data-toggle="tooltip" data-placement="bottom" title="It is usually an email address or its left part before @"
type="text" class="form-control input-lg" id="user1" name="user1" tabindex="1"
placeholder="Enter login name">
</div>
<label for="password1">Password</label>
<label class="checkbox-inline out">
<input type="checkbox" id="showpassword1"> show password
</label>
<div class="input-group form-group">
<span class="input-group-addon"><i class="glyphicon glyphicon-lock"></i></span>
<input
data-toggle="tooltip" data-placement="bottom" title="Passwords are not stored on the server"
type="password" class="form-control input-lg" id="password1" name="password1" tabindex="2"
placeholder="Enter password">
</div>
<label for="host1">IMAP Server hostname</label> (or its IP address)
<div class="input-group form-group">
<span class="input-group-addon"><i class="glyphicon glyphicon-cloud"></i></span>
<input
data-toggle="tooltip" data-placement="bottom" title="IMAP transfers are done with encryption if the servers support it."
list="servers1" type="text" class="form-control input-lg" id="host1" name="host1" tabindex="3"
placeholder="Enter IMAP source server name or IP address">
<datalist id="servers1">
<option value="imap.gmail.com">
<option value="outlook.office365.com">
<option value="imap.hostinger.com">
<option value="ssl0.ovh.net">
<option value="email-ssl.com.br">
<option value="imap.mail.yahoo.com">
</datalist>
</div>
<div class="form-group collapse extra_param">
<label class="checkbox-inline">
<input
data-toggle="tooltip" data-placement="bottom" title="Be careful with this option"
type="checkbox" id="delete1" name="delete1">Move sync. Deletes messages on source mailbox after a successful transfer.
</label>
</div>
<div class="form-group collapse extra_param" >
<label for="subfolder1">Sub-folder</label>
<div class="input-group form-group">
<span class="input-group-addon"><i class="glyphicon glyphicon-folder-open"></i></span>
<input
data-toggle="tooltip" data-placement="bottom" title="A subfolder where all the source mailbox comes from."
type="text" class="form-control input-lg" id="subfolder1" name="subfolder1"
placeholder="Enter sub-folder name">
</div>
</div>
<div>
<br>
</div>
</fieldset>
</div>
<div id="parameters" class="col-md-2" >
<div>
<br>
</div>
<div>
<label class="checkbox-inline">
<input
data-toggle="tooltip" data-placement="bottom" title="Shows what would be done without really doing it."
type="checkbox" id="dry" name="dry" >Just verbose, no real sync.
</label>
</div>
<div>
<label class="checkbox-inline">
<input
data-toggle="tooltip" data-placement="bottom" title="Checks credentials without syncing anything."
type="checkbox" id="justlogin" name="justlogin" >Just checks credentials.
</label>
</div>
<div>
<label class="checkbox-inline">
<input
data-toggle="tooltip" data-placement="bottom" title="Shows folders sizes and exits."
type="checkbox" id="justfoldersizes" name="justfoldersizes" >Just presents folders sizes.
</label>
</div>
<div>
<label class="checkbox-inline">
<input
data-toggle="tooltip" data-placement="bottom" title="Just create the folder hierarchy, messages are not synced."
type="checkbox" id="justfolders" name="justfolders" >Just create folders.
</label>
</div>
<div>
<br>
</div>
<div id="button_extra_param" class="text-center scripton">
<button type="button" class="btn btn-default btn-block" data-toggle="collapse"
data-target=".extra_param">Show / Hide extra parameters</button>
</div>
<div>
<br>
</div>
<div id="button_swap" class="text-center scripton">
<button type="button" class="btn btn-default btn-block" id="swap">
Swap Source <span class="glyphicon glyphicon-transfer"></span> Destination
</button>
</div>
<div>
<br>
</div>
</div>
<div id="account2" class="col-md-5" >
<fieldset>
<legend class="text-center h2">IMAP destination Mailbox</legend>
<label for="user2">Login</label> (usually an email address)
<div class="input-group form-group">
<span class="input-group-addon"><i class="glyphicon glyphicon-user"></i></span>
<input
data-toggle="tooltip" data-placement="bottom" title="It is usually an email address or its left part before @"
type="text" class="form-control input-lg" id="user2" name="user2" tabindex="6"
placeholder="Enter login name">
</div>
<label for="password2">Password</label>
<label class="checkbox-inline out">
<input type="checkbox" id="showpassword2"> show password
</label>
<div class="input-group form-group">
<span class="input-group-addon"><i class="glyphicon glyphicon-lock"></i></span>
<input
data-toggle="tooltip" data-placement="bottom" title="Passwords are not stored on the server"
type="password" class="form-control input-lg" id="password2" name="password2" tabindex="7"
placeholder="Enter password">
</div>
<label for="host2">IMAP Server hostname</label> (or its IP address)
<div class="input-group form-group">
<span class="input-group-addon"><i class="glyphicon glyphicon-cloud"></i></span>
<input
data-toggle="tooltip" data-placement="bottom" title="IMAP transfers are done with encryption if the servers support it."
list="servers2" type="text" class="form-control input-lg" id="host2" name="host2" tabindex="8"
placeholder="Enter IMAP destination server name or IP address">
<datalist id="servers2">
<option value="imap.gmail.com">
<option value="outlook.office365.com">
<option value="imap.hostinger.com">
<option value="ssl0.ovh.net">
<option value="email-ssl.com.br">
<option value="imap.mail.yahoo.com">
</datalist>
</div>
<!-- -->
<div class="form-group collapse extra_param">
<label class="checkbox-inline">
<input
data-toggle="tooltip" data-placement="bottom" title="Be careful with this option"
type="checkbox" id="delete2" name="delete2" tabindex="9">Strict sync. Deletes messages on destination mailbox that are not at the source mailbox.
</label>
</div>
<div class="form-group collapse extra_param" id="extra_subfolder2" >
<label for="subfolder2">Sub-folder</label>
<div class="input-group form-group">
<span class="input-group-addon"><i class="glyphicon glyphicon-folder-open"></i></span>
<input
data-toggle="tooltip" data-placement="bottom" title="A subfolder where all the source mailbox will go."
type="text" class="form-control input-lg" id="subfolder2" name="subfolder2"
placeholder="Enter sub-folder name">
</div>
</div>
<!-- -->
<div>
<br>
</div>
</fieldset>
</div>
</div>
<input type="hidden" name="automap" value="on">
<input type="hidden" name="addheader" value="on">
<!-- -#->
<input type="hidden" name="simulong" value="360">
<!-#- -->
<a id="buttons"></a>
<hr>
<div class="text-center center-block">
If you <b>close</b> this <b>window</b> (or tab) <b>during</b> the synchronization,
it will <b>abort</b> the synchronization, it's like <b>hitting</b> the red button <b>"Abort!"</b> below.
</div>
<!-- Classical button to go to the log only, when javascript is turned off -->
<noscript>
<div class="row">
<div class="col-sm-12 padd0" >
<button type="submit" class="btn btn-success btn-lg center-block btn-block">Go sync!</button>
</div>
</div>
</noscript>
<!-- Javascript buttons using xhr -->
<div class="row scripton">
<div class="col-sm-6 padd0" >
<button id="bt-sync" type="button"
class="btn btn-success btn-lg center-block btn-block"
tabindex="11"
data-toggle="tooltip" data-placement="top"
title="Launch the sync! You can abort the sync with the red Abort button nearby or by closing the tab/window."
>
Sync or resync!<br>
<span class="glyphicon glyphicon-envelope"></span>
<span class="glyphicon glyphicon-arrow-right"></span>
<span class="glyphicon glyphicon-envelope"></span>
</button>
</div>
<div class="col-sm-6 padd0" >
<button id="bt-abort" type="button"
class="btn btn-danger btn-lg center-block btn-block" tabindex="12"
data-toggle="tooltip" data-placement="top"
title="Abort the sync! You can restart the sync later, no duplicates should happen."
>
Abort!<br>
<span class="glyphicon glyphicon-scissors"></span>
</button>
</div>
</div>
</form>
<div class="row scripton" id="consoles" >
<pre id="imapsync_current" class="center-block text-center"></pre>
<span id="imapsync_advice_hours" class="text-center collapse">
Best <a href="#local_bandwidth"><b>bandwidth available hours</b></a> are from <b>11h PM to 11h AM UTC</b> on Mondays to Fridays, <b>all hours</b> on Saturdays and <b>Sundays</b>.
</span>
<pre id="progress-txt">ETA: Estimation Time of Arrival</pre>
<div class="progress">
<div id="progress-bar-done" class="progress-bar progress-bar-success" role="progressbar">
Progress bar
</div>
<div id="progress-bar-left" class="progress-bar progress-bar-info" role="progressbar">
Progress bar
</div>
</div>
<div class="col-sm-6 well">
<h2 class="text-center">Console of imapsync launch</h2>
<pre id="console">
</pre>
</div>
<div class="col-sm-6 well">
<h2 class="text-center">Console of abort</h2>
<pre id="abort">
</pre>
</div>
</div>
</div>
<h2 id="imapsync_log_beginning" class="text-center scripton">Log of imapsync run</h2>
<div class="text-center scripton">
<a href="#imapsync_log_bottom">Link to the <b>bottom</b> of the imapsync log file</a>
</div>
<pre id="output" class="scripton">
</pre>
<div id="imapsync_log_bottom" class="text-center scripton">
<a href="#imapsync_log_beginning">Link to the <b>beginning</b> of the imapsync log file</a>
</div>
<div id="local_bandwidth" class="collapse">
<hr>
<p class="text-center">
<b>Local bandwidth statistics</b><br>
<a href="/vnstat/vnstati.html">
<img alt="Local bandwidth statistics" src="/vnstat/vnstat_vs.png" >
</a>
</p>
</div>
<div id="local_status_dbmon" class="collapse">
<hr>
<p class="text-center">
Imapsync <b>Online Status</b> over the <b>last 24h</b><br>
<a href="imapsync_online_status.html"><img id="status_24h" class="img-responsive center-block" alt="Imapsync Online Status over the last 24h" src="https://sup.lamiral.info/dbmon/cgi-bin/rrdview.cgi?child=yes&rrdfile=%2Fvar%2Ftmp%2Fdbmon%2Ftests%2Frrdbases%2Flocalhost~2583~LAMIRAL~Imapsync_Online~LAMIRAL%2CImapsync_Online~opstatus~300~.rrd;interval_vue=p86400;date_given_by=now;date_means=end;dsname=opstatus;width=1200;hight=70;lower=0;upper=100;rigid=on;Beautiful%20Image%21.x=128;Beautiful%20Image%21.y=30;title=Service%20Status;owner=Imapsync_Online;caption=Status%20in%20%25;monitor=https.rrdrt.monitor%20--rrdrt%20imapsync.lamiral.info%2Fcgi-bin%2Fimapsync%20%3B%3B">
</a>
</p>
</div>
<div id="local_status_hetrix" class="collapse">
<hr>
<p class="text-center">
The service is down? For how long? How often? Take also a look at the
<a href="https://hetrixtools.com/report/uptime/873a2356aea43055204b59f562b5ad52/414322.html">Imapsync Online Status</a>
monitor page powered by the <a href="https://hetrixtools.com/414322.html">HetrixTools</a> company.
</p>
</div>
<a id="bottom"></a>
<hr>
<p class="text-center">Feel free to contact
<strong><a href="https://imapsync.lamiral.info/#AUTHOR" target="_blank">Gilles LAMIRAL</a></strong>
</p>
<div class="container-fluid" >
<div class="row">
<div class="text-center">
<a href="https://imapsync.lamiral.info/">
<img alt="Imapsync home page" src="https://imapsync.lamiral.info/X/logo_imapsync_Xn.png" height="38" width="60">
</a>
<a href="#top" title="Top of the page" class="btn btn-info " role="button">Top</a>
<!-- <a href="#buttons" class="btn btn-info scripton" role="button">Consoles</a> -->
<a href="#bottom" title="Bottom of the page" class="btn btn-info active" role="button">Bottom</a>
<br>
<small> ($Id: proximapsync_form_extra.html,v 1.2 2022/05/07 13:53:00 gilles Exp gilles $) </small><br>
Terms and conditions for anything: <a href="https://imapsync.lamiral.info/LICENSE">No limits to do anything with this work and this license!</a><br>
</div>
</div>
</div>
<script
src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"
integrity="sha384-xBuQ/xzmlsLoJpyjoggmTEz8OWUFM0/RC5BsqQBDX2v5cMvDHcMakNTNrHIW2I5f"
crossorigin="anonymous"
>
</script>
<script
src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"
integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa"
crossorigin="anonymous"
>
</script>
<!--
<script src="crypto-js/core.js"></script>
<script src="crypto-js/sha256.js"></script>
-->
<script
src="proximapsync_form.js"
>
</script>
</body>
</html>

View File

@ -0,0 +1,536 @@
<!DOCTYPE html>
<!-- $Id: proximapsync_form_extra_free.html,v 1.3 2022/05/07 13:53:00 gilles Exp gilles $ -->
<html lang="en" id="top">
<head>
<!--
<script
data-ad-client="ca-pub-3325993554161060"
async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js">
</script>
-->
<title>Mailbox Imapsync Online</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css"
integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp" crossorigin="anonymous">
<link rel="stylesheet" href="imapsync_form.css">
<link rel="stylesheet" href="../S/style.css" type="text/css" />
<link rel="license" href="https://imapsync.lamiral.info/NOLIMIT">
<noscript>
<link rel="stylesheet" href="noscript.css">
</noscript>
</head>
<body>
<div class="scripton">
<!-- will appear if some tests fail -->
<pre id="tests" class="collapse"></pre>
<!-- hidden stuff that must exit for the tests -->
<div class="hidden">
<input type="checkbox" id="test_checkbox">
<input type="text" id="test_text">
<input type="radio" id="test_radio1" name="test_radio" value="first" >
<input type="radio" id="test_radio2" name="test_radio" value="second" >
</div>
</div>
<div class="container-fluid" >
<div class="row">
<div class="text-center">
<a href="https://imapsync.lamiral.info/">
<img alt="Imapsync home" title="Imapsync home page" src="https://imapsync.lamiral.info/X/logo_imapsync_Xn.png" height="38" width="60">
</a>
<a href="#top" title="Top of the page" class="btn btn-info " role="button">Top</a>
<a href="#payment" class="btn btn-success" data-toggle="collapse">Pricing</a>
<!-- <a href="#buttons" class="btn btn-info scripton" role="button">Consoles</a> -->
<a href="#bottom" title="Bottom of the page" class="btn btn-info active" role="button">Bottom</a>
</div>
</div>
<h1 class="text-center">Mailbox Imapsync Online</h1>
<p class="text-center larger"><strong>Copy/synchronize</strong> a <strong>Mailbox</strong> (below 3 GB) to another,
without <strong>duplicates!</strong><br>
<strong>Buying</strong> gives <strong>unlimited</strong> syncs of <strong>any size</strong>.</p>
<!-- Paypal part start
new: NDGMR6TLFZ926
old: H2YTURNFT4XT4
-->
<!-- A button above the pricing form, not very beautiful...
I should give it a try anyway because nearly no one buy this service...
<div class="text-center">
<a href="#payment" class="btn btn-warning btn-lg" data-toggle="collapse">Pricing</a>
</div>
-->
<!-- the "in" makes the form not collapsed by default
Remove the "in" in order to mask the pricing section
<div id="payment" class="well text-center collapse in" >
<div id="payment" class="well text-center collapse out" > -->
<div id="payment" class="well text-center collapse out" >
<p class="lead">Pay by usage type</p>
<form action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_blank">
<input type="hidden" name="cmd" value="_s-xclick" />
<input type="hidden" name="hosted_button_id" value="H2YTURNFT4XT4" />
<input type="hidden" name="on0" value="imapsync choice" />
<fieldset>
<!--
<label data-toggle="tooltip" data-placement="top" title="Fair enough"
class="radio-inline"><input type="radio" name="os0" value="Tiny" > €1,00 </label>
<label data-toggle="tooltip" data-placement="top" title="A big mailbox"
class="radio-inline"><input type="radio" name="os0" value="Small" checked > €6,00 </label>
-->
<label data-toggle="tooltip" data-placement="top" title="Many mailboxes to migrate"
class="radio-inline"><input type="radio" name="os0" value="High" checked > €120,00 </label>
<label data-toggle="tooltip" data-placement="top" title="Some big mailboxes to migrate"
class="radio-inline"><input type="radio" name="os0" value="Normal" > €30,00 </label>
<br>
<input type="hidden" name="currency_code" value="EUR" />
<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_buynowCC_LG.gif" name="submit" alt="PayPal - A safe, easy way to pay online!" />
</fieldset>
<p>
<strong>30-day money back guarantee!</strong> <br>
<em><b>No question</b> nor condition to get a <b>refund</b>, really, <b>just request</b> it and you'll <b>sure</b> get a refund!</em>
</p>
<p>
<input type="hidden" value="VAT if professional in Europe" name="on1" />
If you're a <b>European professional</b> buyer, please enter your <b>VAT number</b>:
<input type="text" maxlength="17" size="17" name="os1" />
It's for the <b>invoice</b> and customs declaration.<br />
It's <b>ok</b> if you <b>don't</b> have a VAT number.<br />
</p>
</form>
</div>
<!-- Paypal part end -->
<form id="form" action="/cgi-bin/proximapsync" method="post" autocomplete="on">
<div id="form_row" class="row">
<div id="account1" class="col-md-5" >
<fieldset>
<legend class="text-center h2">IMAP source Mailbox</legend>
<label for="user1">Login</label> (usually an email address)
<div class="input-group form-group">
<span class="input-group-addon"><i class="glyphicon glyphicon-user"> </i></span>
<input
data-toggle="tooltip" data-placement="bottom" title="It is usually an email address or its left part before @"
type="text" class="form-control input-lg" id="user1" name="user1" tabindex="1"
placeholder="Enter login name">
</div>
<label for="password1">Password</label>
<label class="checkbox-inline out">
<input type="checkbox" id="showpassword1"> show password
</label>
<div class="input-group form-group">
<span class="input-group-addon"><i class="glyphicon glyphicon-lock"></i></span>
<input
data-toggle="tooltip" data-placement="bottom" title="Passwords are not stored on the server"
type="password" class="form-control input-lg" id="password1" name="password1" tabindex="2"
placeholder="Enter password">
</div>
<label for="host1">IMAP Server hostname</label> (or its IP address)
<div class="input-group form-group">
<span class="input-group-addon"><i class="glyphicon glyphicon-cloud"></i></span>
<input
data-toggle="tooltip" data-placement="bottom" title="IMAP transfers are done with encryption if the servers support it."
list="servers1" type="text" class="form-control input-lg" id="host1" name="host1" tabindex="3"
placeholder="Enter IMAP source server name or IP address">
<datalist id="servers1">
<option value="imap.gmail.com">
<option value="outlook.office365.com">
<option value="imap.hostinger.com">
<option value="ssl0.ovh.net">
<option value="email-ssl.com.br">
<option value="imap.mail.yahoo.com">
</datalist>
</div>
<div class="form-group collapse extra_param">
<label class="checkbox-inline">
<input
data-toggle="tooltip" data-placement="bottom" title="Be careful with this option"
type="checkbox" id="delete1" name="delete1">Move sync. Deletes messages on source mailbox after a successful transfer.
</label>
</div>
<div class="form-group collapse extra_param" >
<label for="subfolder1">Sub-folder</label>
<div class="input-group form-group">
<span class="input-group-addon"><i class="glyphicon glyphicon-folder-open"></i></span>
<input
data-toggle="tooltip" data-placement="bottom" title="A subfolder where all the source mailbox comes from."
type="text" class="form-control input-lg" id="subfolder1" name="subfolder1"
placeholder="Enter sub-folder name">
</div>
</div>
<div>
<br>
</div>
</fieldset>
</div>
<div id="parameters" class="col-md-2" >
<div>
<br>
</div>
<div>
<label class="checkbox-inline">
<input
data-toggle="tooltip" data-placement="bottom" title="Shows what would be done without really doing it."
type="checkbox" id="dry" name="dry" >Just verbose, no real sync.
</label>
</div>
<div>
<label class="checkbox-inline">
<input
data-toggle="tooltip" data-placement="bottom" title="Checks credentials without syncing anything."
type="checkbox" id="justlogin" name="justlogin" >Just checks credentials.
</label>
</div>
<div>
<label class="checkbox-inline">
<input
data-toggle="tooltip" data-placement="bottom" title="Shows folders sizes and exits."
type="checkbox" id="justfoldersizes" name="justfoldersizes" >Just presents folders sizes.
</label>
</div>
<div>
<label class="checkbox-inline">
<input
data-toggle="tooltip" data-placement="bottom" title="Just create the folder hierarchy, messages are not synced."
type="checkbox" id="justfolders" name="justfolders" >Just create folders.
</label>
</div>
<div>
<br>
</div>
<div id="button_extra_param" class="text-center scripton">
<button type="button" class="btn btn-default btn-block" data-toggle="collapse"
data-target=".extra_param">Show / Hide extra parameters</button>
</div>
<div>
<br>
</div>
<div id="button_swap" class="text-center scripton">
<button type="button" class="btn btn-default btn-block" id="swap">
Swap Source <span class="glyphicon glyphicon-transfer"></span> Destination
</button>
</div>
<div>
<br>
</div>
</div>
<div id="account2" class="col-md-5" >
<fieldset>
<legend class="text-center h2">IMAP destination Mailbox</legend>
<label for="user2">Login</label> (usually an email address)
<div class="input-group form-group">
<span class="input-group-addon"><i class="glyphicon glyphicon-user"></i></span>
<input
data-toggle="tooltip" data-placement="bottom" title="It is usually an email address or its left part before @"
type="text" class="form-control input-lg" id="user2" name="user2" tabindex="6"
placeholder="Enter login name">
</div>
<label for="password2">Password</label>
<label class="checkbox-inline out">
<input type="checkbox" id="showpassword2"> show password
</label>
<div class="input-group form-group">
<span class="input-group-addon"><i class="glyphicon glyphicon-lock"></i></span>
<input
data-toggle="tooltip" data-placement="bottom" title="Passwords are not stored on the server"
type="password" class="form-control input-lg" id="password2" name="password2" tabindex="7"
placeholder="Enter password">
</div>
<label for="host2">IMAP Server hostname</label> (or its IP address)
<div class="input-group form-group">
<span class="input-group-addon"><i class="glyphicon glyphicon-cloud"></i></span>
<input
data-toggle="tooltip" data-placement="bottom" title="IMAP transfers are done with encryption if the servers support it."
list="servers2" type="text" class="form-control input-lg" id="host2" name="host2" tabindex="8"
placeholder="Enter IMAP destination server name or IP address">
<datalist id="servers2">
<option value="imap.gmail.com">
<option value="outlook.office365.com">
<option value="imap.hostinger.com">
<option value="ssl0.ovh.net">
<option value="email-ssl.com.br">
<option value="imap.mail.yahoo.com">
</datalist>
</div>
<!-- -->
<div class="form-group collapse extra_param">
<label class="checkbox-inline">
<input
data-toggle="tooltip" data-placement="bottom" title="Be careful with this option"
type="checkbox" id="delete2" name="delete2" tabindex="9">Strict sync. Deletes messages on destination mailbox that are not at the source mailbox.
</label>
</div>
<div class="form-group collapse extra_param" id="extra_subfolder2" >
<label for="subfolder2">Sub-folder</label>
<div class="input-group form-group">
<span class="input-group-addon"><i class="glyphicon glyphicon-folder-open"></i></span>
<input
data-toggle="tooltip" data-placement="bottom" title="A subfolder where all the source mailbox will go."
type="text" class="form-control input-lg" id="subfolder2" name="subfolder2"
placeholder="Enter sub-folder name">
</div>
</div>
<!-- -->
<div>
<br>
</div>
</fieldset>
</div>
</div>
<input type="hidden" name="automap" value="on">
<input type="hidden" name="addheader" value="on">
<input type="hidden" name="exitwhenover" value="3000000000">
<!-- -#->
<input type="hidden" name="simulong" value="360">
<!-#- -->
<a id="buttons"></a>
<hr>
<div class="text-center center-block">
If you <b>close</b> this <b>window</b> (or tab) <b>during</b> the synchronization,
it will <b>abort</b> the synchronization, it's like <b>hitting</b> the red button <b>"Abort!"</b> below.
</div>
<!-- Classical button to go to the log only, when javascript is turned off -->
<noscript>
<div class="row">
<div class="col-sm-12 padd0" >
<button type="submit" class="btn btn-success btn-lg center-block btn-block">Go sync!</button>
</div>
</div>
</noscript>
<!-- Javascript buttons using xhr -->
<div class="row scripton">
<div class="col-sm-6 padd0" >
<button id="bt-sync" type="button"
class="btn btn-success btn-lg center-block btn-block"
tabindex="11"
data-toggle="tooltip" data-placement="top"
title="Launch the sync! You can abort the sync with the red Abort button nearby or by closing the tab/window."
>
Sync or resync!<br>
<span class="glyphicon glyphicon-envelope"></span>
<span class="glyphicon glyphicon-arrow-right"></span>
<span class="glyphicon glyphicon-envelope"></span>
</button>
</div>
<div class="col-sm-6 padd0" >
<button id="bt-abort" type="button"
class="btn btn-danger btn-lg center-block btn-block" tabindex="12"
data-toggle="tooltip" data-placement="top"
title="Abort the sync! You can restart the sync later, no duplicates should happen."
>
Abort!<br>
<span class="glyphicon glyphicon-scissors"></span>
</button>
</div>
</div>
</form>
<div class="row scripton" id="consoles" >
<pre id="imapsync_current" class="center-block text-center"></pre>
<span id="imapsync_advice_hours" class="text-center collapse">
Best <a href="#local_bandwidth"><b>bandwidth available hours</b></a> are from <b>11h PM to 11h AM UTC</b> on Mondays to Fridays, <b>all hours</b> on Saturdays and <b>Sundays</b>.
</span>
<pre id="progress-txt">ETA: Estimation Time of Arrival</pre>
<div class="progress">
<div id="progress-bar-done" class="progress-bar progress-bar-success" role="progressbar">
Progress bar
</div>
<div id="progress-bar-left" class="progress-bar progress-bar-info" role="progressbar">
Progress bar
</div>
</div>
<div class="col-sm-6 well">
<h2 class="text-center">Console of imapsync launch</h2>
<pre id="console">
</pre>
</div>
<div class="col-sm-6 well">
<h2 class="text-center">Console of abort</h2>
<pre id="abort">
</pre>
</div>
</div>
</div>
<h2 id="imapsync_log_beginning" class="text-center scripton">Log of imapsync run</h2>
<div class="text-center scripton">
<a href="#imapsync_log_bottom">Link to the <b>bottom</b> of the imapsync log file</a>
</div>
<pre id="output" class="scripton">
</pre>
<div id="imapsync_log_bottom" class="text-center scripton">
<a href="#imapsync_log_beginning">Link to the <b>beginning</b> of the imapsync log file</a>
</div>
<div id="local_bandwidth" class="collapse">
<hr>
<p class="text-center">
<b>Local bandwidth statistics</b><br>
<a href="/vnstat/vnstati.html">
<img alt="Local bandwidth statistics" src="/vnstat/vnstat_vs.png" >
</a>
</p>
</div>
<div id="local_status_dbmon" class="collapse">
<hr>
<p class="text-center">
Imapsync <b>Online Status</b> over the <b>last 24h</b><br>
<a href="imapsync_online_status.html"><img id="status_24h" class="img-responsive center-block" alt="Imapsync Online Status over the last 24h" src="https://sup.lamiral.info/dbmon/cgi-bin/rrdview.cgi?child=yes&rrdfile=%2Fvar%2Ftmp%2Fdbmon%2Ftests%2Frrdbases%2Flocalhost~2583~LAMIRAL~Imapsync_Online~LAMIRAL%2CImapsync_Online~opstatus~300~.rrd;interval_vue=p86400;date_given_by=now;date_means=end;dsname=opstatus;width=1200;hight=70;lower=0;upper=100;rigid=on;Beautiful%20Image%21.x=128;Beautiful%20Image%21.y=30;title=Service%20Status;owner=Imapsync_Online;caption=Status%20in%20%25;monitor=https.rrdrt.monitor%20--rrdrt%20imapsync.lamiral.info%2Fcgi-bin%2Fimapsync%20%3B%3B">
</a>
</p>
</div>
<div id="local_status_hetrix" class="collapse">
<hr>
<p class="text-center">
The service is down? For how long? How often? Take also a look at the
<a href="https://hetrixtools.com/report/uptime/873a2356aea43055204b59f562b5ad52/414322.html">Imapsync Online Status</a>
monitor page powered by the <a href="https://hetrixtools.com/414322.html">HetrixTools</a> company.
</p>
</div>
<a id="bottom"></a>
<hr>
<p class="text-center">Feel free to contact
<strong><a href="https://imapsync.lamiral.info/#AUTHOR" target="_blank">Gilles LAMIRAL</a></strong>
</p>
<div class="container-fluid" >
<div class="row">
<div class="text-center">
<a href="https://imapsync.lamiral.info/">
<img alt="Imapsync home page" src="https://imapsync.lamiral.info/X/logo_imapsync_Xn.png" height="38" width="60">
</a>
<a href="#top" title="Top of the page" class="btn btn-info " role="button">Top</a>
<!-- <a href="#buttons" class="btn btn-info scripton" role="button">Consoles</a> -->
<a href="#bottom" title="Bottom of the page" class="btn btn-info active" role="button">Bottom</a>
<br>
<small> ($Id: proximapsync_form_extra_free.html,v 1.3 2022/05/07 13:53:00 gilles Exp gilles $) </small><br>
Terms and conditions for anything: <a href="https://imapsync.lamiral.info/LICENSE">No limits to do anything with this work and this license!</a><br>
</div>
</div>
</div>
<script
src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"
integrity="sha384-xBuQ/xzmlsLoJpyjoggmTEz8OWUFM0/RC5BsqQBDX2v5cMvDHcMakNTNrHIW2I5f"
crossorigin="anonymous"
>
</script>
<script
src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"
integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa"
crossorigin="anonymous"
>
</script>
<!--
<script src="crypto-js/core.js"></script>
<script src="crypto-js/sha256.js"></script>
-->
<script
src="proximapsync_form.js"
>
</script>
</body>
</html>

View File

@ -1,6 +1,5 @@
^Here is imapsync ^Here is imapsync
^Load end is ^Load .*is
^Load is
^Server is on heavy load ^Server is on heavy load
^Temp directory is ^Temp directory is
^Current directory is ^Current directory is

View File

@ -1 +1 @@
imapsync_form_extra.html proximapsync_form_extra.html

1542
aa Normal file

File diff suppressed because it is too large Load Diff

1752
imapsync

File diff suppressed because it is too large Load Diff

View File

@ -54,7 +54,7 @@
<li><a rel="help" href="#install">Installation</a></li> <li><a rel="help" href="#install">Installation</a></li>
<li><a rel="help" href="#doc" class="larger" >Documentation</a></li> <li><a rel="help" href="#doc" class="larger" >Documentation</a></li>
<li><a href="S/news.shtml">News about imapsync <!--#exec cmd="cat ./VERSION| tr -d '\n'" -->, previous and next releases</a></li> <li><a href="S/news.shtml">News about imapsync <!--#exec cmd="cat ./VERSION| tr -d '\n'" -->, previous and next releases</a></li>
<li><a href="S/imapservers.shtml">List of the 86 imap software server applications <b>supported</b></a> by imapsync</li> <li><a href="S/imapservers.shtml">List of the 88 imap software server applications <b>supported</b></a> by imapsync</li>
<li><a href="S/external.shtml">Similar software tools and external services</a></li> <li><a href="S/external.shtml">Similar software tools and external services</a></li>
<li><a href="S/mailing_list.shtml">Discuss or search on the mailing-list</a></li> <li><a href="S/mailing_list.shtml">Discuss or search on the mailing-list</a></li>
<li><a href="S/terms_and_conditions.shtml">Imapsync Terms and Conditions</a></li> <li><a href="S/terms_and_conditions.shtml">Imapsync Terms and Conditions</a></li>
@ -294,7 +294,7 @@ but <b>without</b> the 3 GB limit.
<li>Imapsync Perl <b>source code</b> for any operating system, Unix, Windows, OS X.</li> <li>Imapsync Perl <b>source code</b> for any operating system, Unix, Windows, OS X.</li>
<li>The <b>visual interface</b>, similar to <b><a href="https://imapsync.lamiral.info/X/">/X</a></b>, <li>The <b>visual interface</b>, similar to <b><a href="https://imapsync.lamiral.info/X/">/X</a></b>,
to install the service on your own <b>Linux server</b> (not working on Windows yet).</li> to <a href="INSTALL.d/INSTALL.OnlineUI.txt">install the service</a> on your own <b>Linux server</b> (not working on Windows yet).</li>
<li><b>Lifetime</b> of imapsync <b>updates</b> without extra payment.</li> <li><b>Lifetime</b> of imapsync <b>updates</b> without extra payment.</li>
@ -470,88 +470,139 @@ Maybe one day those little crypto coins will be like gold? (I will like that!)
</h2> </h2>
<!-- <!--
gilles@i005:~/imapsync_stats 14$ date gilles@i005:~/imapsync_stats 43$ date
Tue Jan 12 12:01:08 CET 2021 Mon Apr 11 14:56:10 UTC 2022
gilles@i005:~/imapsync_stats 44$
gilles@i005:~/imapsync_stats 44$ statistics_VERSION_synthesis 2021
==== Nb users each month in 2021
7443 stats_imapsync_2021_01.ip
7007 stats_imapsync_2021_02.ip
7231 stats_imapsync_2021_03.ip
7877 stats_imapsync_2021_04.ip
6379 stats_imapsync_2021_05.ip
6124 stats_imapsync_2021_06.ip
6130 stats_imapsync_2021_07.ip
6849 stats_imapsync_2021_08.ip
6434 stats_imapsync_2021_09.ip
6487 stats_imapsync_2021_10.ip
6774 stats_imapsync_2021_11.ip
6547 stats_imapsync_2021_12.ip
81282 total
gilles@i005:~/imapsync_stats 13$ statistics_VERSION_synthesis 2020 ==== Nb runs each month in 2021
stats_imapsync_2021_01.runs : 13000556 total
stats_imapsync_2021_02.runs : 10554624 total
stats_imapsync_2021_03.runs : 11580320 total
stats_imapsync_2021_04.runs : 9887130 total
stats_imapsync_2021_05.runs : 10969660 total
stats_imapsync_2021_06.runs : 11696577 total
stats_imapsync_2021_07.runs : 12015972 total
stats_imapsync_2021_08.runs : 18112580 total
stats_imapsync_2021_09.runs : 18364370 total
stats_imapsync_2021_10.runs : 16272699 total
stats_imapsync_2021_11.runs : 15176645 total
stats_imapsync_2021_12.runs : 13599796 total
==== Nb users each month in 2020 ==== % Operating systems in 2021
6261 stats_imapsync_2020_01.ip Linux 66.70 %
6660 stats_imapsync_2020_02.ip Win32 19.05 %
6727 stats_imapsync_2020_03.ip Darwin 10.98 %
6362 stats_imapsync_2020_04.ip FreeBSD 3.19 %
6841 stats_imapsync_2020_05.ip Solaris .03 %
6195 stats_imapsync_2020_06.ip OpenBSD .01 %
7025 stats_imapsync_2020_07.ip
6221 stats_imapsync_2020_08.ip
6450 stats_imapsync_2020_09.ip
6686 stats_imapsync_2020_10.ip
6929 stats_imapsync_2020_11.ip
6902 stats_imapsync_2020_12.ip
79259 total
==== Nb runs each month in 2020
stats_imapsync_2020_01.runs : 11844697 total
stats_imapsync_2020_02.runs : 10658279 total
stats_imapsync_2020_03.runs : 10691171 total
stats_imapsync_2020_04.runs : 9902899 total
stats_imapsync_2020_05.runs : 9389412 total
stats_imapsync_2020_06.runs : 10841772 total
stats_imapsync_2020_07.runs : 11650852 total
stats_imapsync_2020_08.runs : 10138316 total
stats_imapsync_2020_10.runs : 11040092 total
stats_imapsync_2020_11.runs : 15849476 total
stats_imapsync_2020_12.runs : 12920080 total
==== % Operating systems in 2020
Linux 67.96 %
Win32 18.15 %
Darwin 12.38 %
FreeBSD 1.43 %
Solaris .02 %
OpenBSD .03 %
Cygwin 0.00 % Cygwin 0.00 %
Unknown 0.00 % Unknown 0.00 %
Other .01 % Other .01 %
==== Perl releases in 2020 ==== Perl releases in 2021
statistics_perl_from_files_cumul_percentage 48786 stats_imapsync_2020.ip 5.10 1%
5.10 2%
5.12 3% 5.12 3%
5.14 0% 5.14 0%
5.16 35% 5.16 27%
5.18 9% 5.18 3%
5.20 0% 5.20 0%
5.22 1% 5.22 1%
5.24 6% 5.24 3%
5.26 15% 5.26 17%
5.28 11% 5.28 15%
5.30 12% 5.30 16%
5.31 0% 5.31 0%
5.32 0% 5.32 8%
5.34 0%
5.8 0% 5.8 0%
==== Biggest users in 2021
1930148 static.113.204.47.78.clients.your-server.de "imapsync/1.945 (linux perl 5.28.1, 3.42 imapsync)"
2004486 al.cloud.ec "imapsync/1.983 (linux perl 5.28.1, 3.42 imapsync Docker)"
2029974 host246-57-234-109.static.ehiweb.it "imapsync/1.727 (linux perl 5.16.3, 3.37 imapsync)"
2202168 185.241.64.162 "imapsync/1.945 (MSWin32 perl 5.26.0, 3.42 imapsync.exe)"
2560648 130.61.71.204 "imapsync/1.727 (linux perl 5.16.3, 3.37 imapsync)"
2686078 90.188.4-135.xdsl.ab.ru "imapsync/1.727 (linux perl 5.16.3, 3.37 imapsync)"
3953406 v2202011133577132761.hotsrv.de "imapsync/1.983 (linux perl 5.28.1, 3.42 imapsync Docker)"
3954493 srv.saiu.it "imapsync/1.727 (linux perl 5.16.3, 3.37 imapsync)"
4984373 imap.datacom.eu "imapsync/1.977 (freebsd perl 5.32.1, 3.42 imapsync Standard)"
5539904 mail.kami.ru.com "imapsync/1.727 (linux perl 5.16.3, 3.37 imapsync)"
6384848 ip185.ip-137-74-211.eu "imapsync/1.957 (linux perl 5.24.1, 3.38 imapsync Docker)"
7918261 90.188.4-135.xdsl.ab.ru "imapsync/2.107 (linux perl 5.26.3, 3.43 imapsync Standard)"
9556282 mz-liberec.onice.io "imapsync/2.148 (linux perl 5.16.3, 3.37 imapsync Standard)"
11809945 41.72.193.38.liquidtelecom.net "imapsync/1.727 (linux perl 5.16.3, 3.37 imapsync)"
12144716 62.94.96.164 "imapsync/1.727 (linux perl 5.16.3, 3.37 imapsync)"
==== Biggest users this month
254561 srv.saiu.it "imapsync/1.727 (linux perl 5.16.3, 3.37 imapsync)"
259123 130.136.151.203.sta.inet.co.th "imapsync/2.148 (linux perl 5.26.3, 3.43 imapsync Standard)"
290133 41.72.193.38.liquidtelecom.net "imapsync/1.727 (linux perl 5.16.3, 3.37 imapsync)"
306768 62.94.96.164 "imapsync/1.727 (linux perl 5.16.3, 3.37 imapsync)"
308055 90.188.4-135.xdsl.ab.ru "imapsync/2.107 (linux perl 5.26.3, 3.43 imapsync Standard)"
==== Most releases used in 2020 ==== Biggest users previous month
230 1.957 875457 130.136.151.203.sta.inet.co.th "imapsync/2.148 (linux perl 5.26.3, 3.43 imapsync Standard)"
301 1.644 994371 90.188.4-135.xdsl.ab.ru "imapsync/2.107 (linux perl 5.26.3, 3.43 imapsync Standard)"
361 1.484 999072 41.72.193.38.liquidtelecom.net "imapsync/1.727 (linux perl 5.16.3, 3.37 imapsync)"
450 1.979 1040081 62.94.96.164 "imapsync/1.727 (linux perl 5.16.3, 3.37 imapsync)"
745 1.997 1098073 srv.saiu.it "imapsync/1.727 (linux perl 5.16.3, 3.37 imapsync)"
887 1.684
1092 1.998
1175 1.921
1563 1.967
1871 1.836
2273 1.983
2629 1.882
3483 1.945
11019 1.977
17660 1.727
==== Most releases used in 2021
103 1.979
119 1.957
122 1.637
132 1.678
187 1.644
427 1.921
434 1.684
602 1.997
726 1.998
1084 1.945
1098 1.836
1909 1.882
3111 1.983
11368 1.977
16062 1.727
==== Most releases used the previous month
53 1.921
57 1.684
69 1.997
71 1.836
77 1.998
113 1.945
130 1.983
196 1.882
762 1.977
2363 1.727
==== Most releases used this month
15 1.997
25 1.921
29 1.644
34 1.836
52 1.945
52 1.998
58 1.983
66 1.882
276 1.977
1153 1.727
==== Nb users each year ==== Nb users each year
9640 stats_imapsync_2011.ip 9640 stats_imapsync_2011.ip
@ -564,8 +615,9 @@ statistics_perl_from_files_cumul_percentage 48786 stats_imapsync_2020.ip
44116 stats_imapsync_2018.ip 44116 stats_imapsync_2018.ip
48103 stats_imapsync_2019.ip 48103 stats_imapsync_2019.ip
49562 stats_imapsync_2020.ip 49562 stats_imapsync_2020.ip
3273 stats_imapsync_2021.ip 51639 stats_imapsync_2021.ip
390881 total 19442 stats_imapsync_2022.ip
458689 total
==== Nb runs each year : ==== Nb runs each year :
2010: 0 2010: 0
@ -579,37 +631,35 @@ statistics_perl_from_files_cumul_percentage 48786 stats_imapsync_2020.ip
2018: 108047481 2018: 108047481
2019: 158971132 2019: 158971132
2020: 135913391 2020: 135913391
2021: 4428153 2021: 161230929
2022: 47853753
2021~~134689380
Done 2021/01/18
2022~~172936635
--> -->
<ul> <ul>
<li>There are <b>6000 to 7000 </b> imapsync users per month (50 000 users for the year 2021). <li>There are <b>6000 to 8000</b> imapsync users per month (52 000 users for the year 2021).
Well, if all users could be buyers! Well, if all users could be buyers!
</li> </li>
<li>9 M to 16 M mailboxes transfers per month during 2020.</li> <li>10 M to 18 M mailboxes transfers per month during 2021.</li>
<li><b>136 M</b> transfers for 2020, <li><b>161 M</b> transfers for 2021,
that is <b>4 whole mailboxes completely synced each second</b> on average (136*10^6/365/24/3600 ~ 4), that is <b>5 whole mailboxes completely synced each second</b> on average (161*10^6/365/24/3600 ~ 5),
and an estimation of <b>60 Petabytes transferred in 2020</b> ( 1 PiB = 2^50 bytes = 1024^5 ~ 10^15), and an estimation of <b>69 Petabytes transferred in 2021</b> ( 1 PiB = 2^50 bytes = 1024^5 ~ 10^15),
taking a mean of 500 Megabytes per transfer (an estimated mean given by online /X real stats). taking a mean of 500 Megabytes per transfer (an estimated mean given by online /X real stats).
60 Petabytes = 500*10^6*136*10^6. The 2020 global internet traffic was 2580 Exabytes 69 Petabytes = 480*10^6*161*10^6. The 2021 global internet traffic was 2580 Exabytes
(2580 ~ <a href="https://en.wikipedia.org/wiki/Internet_traffic#Global_Internet_traffic">(174+41)</a> * 12 ) (3312 ~ <a href="https://en.wikipedia.org/wiki/Internet_traffic#Global_Internet_traffic">(219+57)</a> * 12 )
(1 EiB = 2^60 bytes = 1024^6 ~ 10^18) so imapsync is a very very tiny thing (23 per million, 60/2580000). (1 EiB = 2^60 bytes = 1024^6 ~ 10^18) so imapsync is a very very tiny thing (21 per million, 69/3312000).
</li> </li>
<li> <li>
Let's see it another way, imapsync did 136 M transfers for 2020, Let's see it another way, imapsync did 161 M transfers for 2021,
that's nearly <b>492 M email messages transferred every day</b> (136*1325/366) that's nearly <b>611 M email messages transferred every day</b> (161*1388/366)
taking a mean of 1325 messages per transfer (an estimated mean given by online /X real stats). taking a mean of 1388 messages per transfer (an estimated mean given by online /X 2021 real stats).
The internet global estimated number of messages sent every day is The internet global estimated number of messages sent every day is
<a href="https://www.statista.com/statistics/456500/daily-number-of-e-mails-worldwide/">306 billions</a> in 2020 <a href="https://www.statista.com/statistics/456500/daily-number-of-e-mails-worldwide/">320 billions</a> in 2021
(55% being spam but that's another story...). (55% being spam but that's another story...).
So imapsync does 0.16% (492/306000*100) of all email traffic, not that bad for a command-line tool! So imapsync does 0.19% (611/320000*100) of all email traffic, not that bad for a command-line tool!
</li> </li>
<li> <li>
@ -617,16 +667,16 @@ See the Wikipedia <a href="https://en.wikipedia.org/wiki/Byte#Multiple-byte_unit
</li> </li>
<li><b>Operating systems</b> run by command line imapsync users (in 2020): <li><b>Operating systems</b> run by command line imapsync users (in 2021):
<ul> <ul>
<li><b>Linux: 68%</b></li> <li><b>Linux: 67%</b></li>
<li><b>Win32: 18%</b></li> <li><b>Win32: 19%</b></li>
<li><b>Darwin: 12%</b></li> <li><b>Darwin: 11%</b></li>
<li><b>FreeBSD: 1.43%</b></li> <li><b>FreeBSD: 3.19%</b></li>
<li>Solaris: 0.02%</li> <li>Solaris: 0.03%</li>
<li>OpenBSD: 0.03%</li> <li>OpenBSD: 0.01%</li>
<li>Other: 0.01%</li> <li>Other: 0.01%</li>
<li>Cygwin: 0%</li> <li>Cygwin: 0%</li>
<li>Unknown: 0%</li> <li>Unknown: 0%</li>
@ -636,12 +686,16 @@ See the Wikipedia <a href="https://en.wikipedia.org/wiki/Byte#Multiple-byte_unit
<li><b>Highest use rate</b>: about <b>56 M</b> IMAP mailbox transfers by just one host (it was in 2014).</li> <li><b>Highest use rate</b>: about <b>56 M</b> IMAP mailbox transfers by just one host (it was in 2014).</li>
<li><b>Biggest known account</b> migrated: <b>2.4 M folders</b> (figure independently reported).</li> <li><b>Biggest known account</b> migrated: <b>2.4 M folders</b> (figure independently reported).</li>
<li><b>Operating systems</b> run by the visual /X online imapsync users: <li><b>Operating systems</b> run by the visual /X online imapsync users in 2021:
<ul> <ul>
<li><b>Windows 70%</b></li> <li><b>Windows 71%</b></li>
<li><b>Macintosh 23%</b></li> <li><b>Macintosh 22%</b></li>
<li><b>Linux 7%</b></li> <li><b>Linux 7%</b></li>
<li><b>iPhone 0.22%</b></li>
<li><b>iPad 0.03%</b></li>
<li><b>Android 0.02%</b></li>
</ul> </ul>
</li> </li>
@ -869,6 +923,7 @@ you some struggling hours later</b>, believe me. So read the three columns main
</li> </li>
<li> <a href="FAQ.d/FAQ.Office365.txt">Office365</a>. </li> <li> <a href="FAQ.d/FAQ.Office365.txt">Office365</a>. </li>
<li> <a href="FAQ.d/FAQ.Exchange.txt">Exchange 20xx</a>. </li> <li> <a href="FAQ.d/FAQ.Exchange.txt">Exchange 20xx</a>. </li>
<li> <a href="FAQ.d/FAQ.iCloud.txt">iCloud</a>. </li>
<li> <a href="FAQ.d/FAQ.Yahoo.txt">Yahoo</a>. </li> <li> <a href="FAQ.d/FAQ.Yahoo.txt">Yahoo</a>. </li>
<li> <a href="FAQ.d/FAQ.Domino.txt">Domino</a>. </li> <li> <a href="FAQ.d/FAQ.Domino.txt">Domino</a>. </li>
<li> <a href="FAQ.d/FAQ.Zimbra.txt">Zimbra</a>. </li> <li> <a href="FAQ.d/FAQ.Zimbra.txt">Zimbra</a>. </li>
@ -989,7 +1044,7 @@ like written in the <a href="LICENSE">https://imapsync.lamiral.info/LICENSE</a>
<!--#config timefmt="%D" --> <!--#config timefmt="%D" -->
<!--#config timefmt="%A %B %d, %Y" --> <!--#config timefmt="%A %B %d, %Y" -->
<b>This document last modified on <!--#echo var="LAST_MODIFIED" --></b> <b>This document last modified on <!--#echo var="LAST_MODIFIED" --></b>
($Id: index.shtml,v 1.511 2022/04/06 10:38:35 gilles Exp gilles $)<br /> ($Id: index.shtml,v 1.516 2022/05/24 11:58:23 gilles Exp gilles $)<br />
<a href="#TOP">Top of the page</a> <a href="#TOP">Top of the page</a>
</p> </p>

5
oauth2/README_OAUTH2.txt Executable file → Normal file
View File

@ -1,5 +1,5 @@
# $Id: README_OAUTH2.txt,v 1.1 2021/07/06 01:45:43 gilles Exp gilles $ # $Id: README_OAUTH2.txt,v 1.2 2022/07/25 16:44:43 gilles Exp gilles $
1) Do you have a refresh_token? 1) Do you have a refresh_token?
Yes: Good! Yes: Good!
@ -12,8 +12,7 @@ No: Get one. How? Run the commands:
You will be asked to go to a long url with a browser, like this: You will be asked to go to a long url with a browser, like this:
To authorize token, visit this url and follow the directions: To authorize token, visit this url and follow the directions:
https://accounts.google.com/o/oauth2/auth?client_id=108687549524-86sjq07f3ch8otl9fnr56mjnniltdrvn.apps.googleusercontent.com&redirect_uri=urn%3Aietf% https://accounts.google.com/o/oauth2/auth?client_id=108687549524-86sjq07f3ch8otl9fnr56mjnniltdrvn.apps.googleusercontent.com&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&response_type=code&scope=https%3A%2F%2Fmail.google.com%2F
3Awg%3Aoauth%3A2.0%3Aoob&response_type=code&scope=https%3A%2F%2Fmail.google.com%2F
Go to this url, the url above should be the same as presented by the script. Go to this url, the url above should be the same as presented by the script.

View File

@ -1,6 +1,6 @@
#!/bin/sh #!/bin/sh
# $Id: tests.sh,v 1.372 2022/04/06 10:07:32 gilles Exp gilles $ # $Id: tests.sh,v 1.374 2022/09/15 08:43:20 gilles Exp gilles $
# To run these tests, you need a running imap server somewhere # To run these tests, you need a running imap server somewhere
# with several accounts. And be on Linux or Unix. # with several accounts. And be on Linux or Unix.
@ -3604,7 +3604,7 @@ ll_useheader_noheader()
--passfile2 ../../var/pass/secret.titi \ --passfile2 ../../var/pass/secret.titi \
--folder INBOX.yop.yap \ --folder INBOX.yop.yap \
--useheader 'NoExist' \ --useheader 'NoExist' \
--debug --delete2 --debug --delete2 --addheader
echo 'rm /home/vmail/titi/.yop.yap/cur/*' echo 'rm /home/vmail/titi/.yop.yap/cur/*'
} }
@ -5528,11 +5528,12 @@ easygmail_gmail1_gmail2() {
--justfolders --justfolders
} }
easygmail_gmail2() { easygmail_gmail2()
{
$CMD_PERL ./imapsync \ $CMD_PERL ./imapsync \
--user1 gilles.lamiral@gmail.com \ --user1 gilles.lamiral@gmail.com \
--passfile1 ../../var/pass/secret.gilles_gmail \ --passfile1 ../../var/pass/secret.gilles_gmail \
--host1 imap.gmail.com --ssl1 \ --host1 imap.gmail.com \
--gmail2 \ --gmail2 \
--user2 imapsync.gl@gmail.com \ --user2 imapsync.gl@gmail.com \
--passfile2 ../../var/pass/secret.imapsync.gl_gmail \ --passfile2 ../../var/pass/secret.imapsync.gl_gmail \
@ -5611,7 +5612,6 @@ all_login_tests()
} }
gmail_glX_all_justlogin() gmail_glX_all_justlogin()
{ {
error_list="" error_list=""
@ -5626,9 +5626,29 @@ test "X$error_list" = X;
} }
gmail_glX_all_justfolderlist()
{
error_list=""
for X in "" 0 1 2 3; do
$CMD_PERL ./imapsync \
--gmail1 --user1 imapsync.gl${X}@gmail.com --passfile1 ../../var/pass/secret.imapsync.gl${X}_gmail \
--gmail2 --user2 imapsync.gl${X}@gmail.com --passfile2 ../../var/pass/secret.imapsync.gl${X}_gmail \
--no-modulesversion --justfolderlists --nocheckfoldersexist || { error_list="${error_list}[imapsync.gl${X}@gmail.com] " ; }
done
echo3 "error_list=$error_list"
test "X$error_list" = X;
}
gmail_gmail() { gmail_gmail_slash_in_foldername()
{
./imapsync --gmail1 --user1 imapsync.gl1@gmail.com --passfile1 ../../var/pass/secret.imapsync.gl1_gmail \
--gmail2 --user2 imapsync.gl2@gmail.com --passfile2 ../../var/pass/secret.imapsync.gl2_gmail \
--no-modulesversion --dry --justfolders
}
gmail_gmail()
{
! ping -c1 imap.gmail.com || $CMD_PERL ./imapsync \ ! ping -c1 imap.gmail.com || $CMD_PERL ./imapsync \
--host1 imap.gmail.com \ --host1 imap.gmail.com \
--user1 gilles.lamiral@gmail.com \ --user1 gilles.lamiral@gmail.com \
@ -5636,9 +5656,37 @@ gmail_gmail() {
--host2 imap.gmail.com \ --host2 imap.gmail.com \
--user2 imapsync.gl@gmail.com \ --user2 imapsync.gl@gmail.com \
--passfile2 ../../var/pass/secret.imapsync.gl_gmail \ --passfile2 ../../var/pass/secret.imapsync.gl_gmail \
--justfolders --exclude Gmail --exclude "blanc\ $" --justfolders --exclude Gmail --exclude "blanc\ $"
} }
gmail_gmail_exclude()
{
! ping -c1 imap.gmail.com || $CMD_PERL ./imapsync \
--host1 imap.gmail.com \
--user1 gilles.lamiral@gmail.com \
--passfile1 ../../var/pass/secret.gilles_gmail \
--host2 imap.gmail.com \
--user2 imapsync.gl@gmail.com \
--passfile2 ../../var/pass/secret.imapsync.gl_gmail \
--justfolders --exclude "/Trash"
}
gmail_gmail_inet4() {
! ping -c1 imap.gmail.com || $CMD_PERL ./imapsync \
--host1 imap.gmail.com \
--user1 gilles.lamiral@gmail.com \
--passfile1 ../../var/pass/secret.gilles_gmail \
--host2 imap.gmail.com \
--user2 imapsync.gl@gmail.com \
--passfile2 ../../var/pass/secret.imapsync.gl_gmail \
--justlogin --inet4
}
gmail_gmail_ipv6() { gmail_gmail_ipv6() {
! ping6 -c1 imap.gmail.com || $CMD_PERL ./imapsync \ ! ping6 -c1 imap.gmail.com || $CMD_PERL ./imapsync \