Compare commits
23 Commits
imapsync-2
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8c82976c3f | ||
|
|
fe237e3308 | ||
|
|
c558ffcb11 | ||
|
|
cd17a623e5 | ||
|
|
023535075c | ||
|
|
0da5cfa4fb | ||
|
|
0dd79e7e52 | ||
|
|
5b92e1d908 | ||
|
|
a5ea7625a7 | ||
|
|
9fc8afcae5 | ||
|
|
b0619eb2c8 | ||
|
|
c6d3925c68 | ||
|
|
7d7110d331 | ||
|
|
ed4816f3b1 | ||
|
|
a877e6f162 | ||
|
|
5d6bc8149f | ||
|
|
abe8fd2b0b | ||
|
|
4ec979525b | ||
|
|
399651d088 | ||
|
|
e2c23d57d6 | ||
|
|
42dd32ab62 | ||
|
|
8e4211e86d | ||
|
|
2f815205a9 |
2
CREDITS
2
CREDITS
@ -124,7 +124,7 @@ Suggested default --useheader 'Message-ID' --useheader 'Received'
|
||||
|
||||
Ameir Abdeldayem
|
||||
Gave a patch to sync messages lacking Message-ID
|
||||
http://www.linux-france.org/prj/imapsync_list/msg01151.html
|
||||
https://web.archive.org/web/20160913193638/http://www.linux-france.org/prj/imapsync_list/msg01151.html
|
||||
|
||||
Yousaf Shah
|
||||
Contributed by giving the book
|
||||
|
||||
392
ChangeLog
392
ChangeLog
@ -1,17 +1,401 @@
|
||||
|
||||
RCS file: RCS/imapsync,v
|
||||
Working file: imapsync
|
||||
head: 2.140
|
||||
head: 2.229
|
||||
branch:
|
||||
locks: strict
|
||||
gilles: 2.140
|
||||
gilles: 2.229
|
||||
access list:
|
||||
symbolic names:
|
||||
keyword substitution: kv
|
||||
total revisions: 1040; selected revisions: 1040
|
||||
total revisions: 1129; selected revisions: 1129
|
||||
description:
|
||||
----------------------------
|
||||
revision 2.140 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
|
||||
typo. "check the certificate server" => "check the server certificate."
|
||||
----------------------------
|
||||
revision 2.199
|
||||
date: 2022/04/01 19:45:33; author: gilles; state: Exp; lines: +15 -14
|
||||
Enhancement. Added the local ip address for the imap connexions. It can help configuring firewalls to allow the imap source IP.
|
||||
----------------------------
|
||||
revision 2.198
|
||||
date: 2022/04/01 11:13:01; author: gilles; state: Exp; lines: +10 -12
|
||||
Added SERVER_NAME SERVER_ADDR SERVER_ADMIN variables and values to the output.
|
||||
----------------------------
|
||||
revision 2.197
|
||||
date: 2022/03/30 10:43:22; author: gilles; state: Exp; lines: +29 -28
|
||||
Bugfix. --tests --testslive was listing 0 folders.
|
||||
Added message "Use --noemailreport1 to avoid it" after putting the email final report in INBOX.
|
||||
----------------------------
|
||||
revision 2.196
|
||||
date: 2022/03/25 20:35:59; author: gilles; state: Exp; lines: +120 -67
|
||||
Bugfix. Dates were not displayed under Windows because POSIX::strftime %e is not portable.
|
||||
Bugfix. Several other places where dates were wrong on Windows.
|
||||
----------------------------
|
||||
revision 2.195
|
||||
date: 2022/03/24 10:00:09; author: gilles; state: Exp; lines: +26 -29
|
||||
Added warning "parsing headers of folder ... It can take time for huge folders. Be patient."
|
||||
----------------------------
|
||||
revision 2.194
|
||||
date: 2022/03/17 11:04:16; author: gilles; state: Exp; lines: +16 -15
|
||||
Bugfix. --var HTTP_COOKIE=proximapsync_runs=31 was not working because of the second =
|
||||
----------------------------
|
||||
revision 2.193
|
||||
date: 2022/03/15 11:30:02; author: gilles; state: Exp; lines: +101 -105
|
||||
Refactor. Deglobalized $debuglist $debugflags
|
||||
Refactor. Added sync->{ permanentflags2 }
|
||||
----------------------------
|
||||
revision 2.192
|
||||
date: 2022/03/11 18:26:06; author: gilles; state: Exp; lines: +88 -46
|
||||
Bugfix. Do not allow --skipcrossduplicates and --usecache. Exit EX_USAGE 64
|
||||
----------------------------
|
||||
revision 2.191
|
||||
date: 2022/03/08 10:55:21; author: gilles; state: Exp; lines: +131 -48
|
||||
Added --var to pass values from proximapsync for variables REMOTE_ADDR REMOTE_HOST HTTP_REFERER HTTP_USER_AGENT SERVER_SOFTWARE SERVER_PORT HTTP_COOKIE
|
||||
----------------------------
|
||||
revision 2.190
|
||||
date: 2022/03/01 21:48:11; author: gilles; state: Exp; lines: +31 -8
|
||||
Bugfix. Do not turn on --delete2duplicates when --syncduplicates is on, unless --delete2duplicates is given.
|
||||
----------------------------
|
||||
revision 2.189
|
||||
date: 2022/02/28 18:10:10; author: gilles; state: Exp; lines: +9 -11
|
||||
Upped ERRORS_MAX_CGI from 20 to 500
|
||||
----------------------------
|
||||
revision 2.188
|
||||
date: 2022/02/26 22:43:55; author: gilles; state: Exp; lines: +182 -100
|
||||
Refactor. Changed setlogfile() to be usable for different logs by proximapsync.
|
||||
----------------------------
|
||||
revision 2.187
|
||||
date: 2022/02/23 12:01:25; author: gilles; state: Exp; lines: +26 -7
|
||||
Documented why total sizes can differ even when the sync is perfect.
|
||||
----------------------------
|
||||
revision 2.186
|
||||
date: 2022/02/22 22:39:50; author: gilles; state: Exp; lines: +27 -21
|
||||
Bugfix. Redirect STDERR to STDOUT in all cases, --log or --nolog
|
||||
----------------------------
|
||||
revision 2.185
|
||||
date: 2022/02/11 21:36:18; author: gilles; state: Exp; lines: +19 -11
|
||||
Added option --emailreport1 and --emailreport2. On by default. Use --noemailreport1 and --noemailreport2 to avoid final emails reports in each INBOX.
|
||||
----------------------------
|
||||
revision 2.184
|
||||
date: 2022/02/10 17:37:57; author: gilles; state: Exp; lines: +91 -31
|
||||
Added final report to source account also.
|
||||
----------------------------
|
||||
revision 2.183
|
||||
date: 2022/02/06 13:14:33; author: gilles; state: Exp; lines: +29 -29
|
||||
Added folder name in the debug output of header identificators
|
||||
----------------------------
|
||||
revision 2.182
|
||||
date: 2022/02/01 20:49:51; author: gilles; state: Exp; lines: +10 -10
|
||||
Bugfix. GMT is good but the tests had to be changed also...
|
||||
----------------------------
|
||||
revision 2.181
|
||||
date: 2022/02/01 20:19:22; author: gilles; state: Exp; lines: +23 -10
|
||||
Bugfix. Use GMT in tests_email_report_message_id
|
||||
Bugfix. Make the email report w3c validated. Crazy man!
|
||||
----------------------------
|
||||
revision 2.180
|
||||
date: 2022/02/01 15:14:51; author: gilles; state: Exp; lines: +373 -30
|
||||
Enhancement. Append a final email report on account2 at the end of the synchronization. Will be optionnal soon.
|
||||
----------------------------
|
||||
revision 2.179
|
||||
date: 2022/01/26 14:32:19; author: gilles; state: Exp; lines: +134 -139
|
||||
README reread, grammarly on it.
|
||||
Added "Posta inviata" so \Sent with --automap
|
||||
----------------------------
|
||||
revision 2.178
|
||||
date: 2022/01/12 21:28:37; author: gilles; state: Exp; lines: +75 -13
|
||||
Added tests_compress_ssl()
|
||||
----------------------------
|
||||
revision 2.177
|
||||
date: 2021/12/23 20:38:44; author: gilles; state: Exp; lines: +8 -8
|
||||
Bugfix. 1849 -> 1848 unit tests
|
||||
----------------------------
|
||||
revision 2.176
|
||||
date: 2021/12/23 20:19:04; author: gilles; state: Exp; lines: +35 -23
|
||||
Bugfix. memory consumption on Mac was not relevant. Use RSS instead of VSZ, on Mac only. Linux stays with VSZ.
|
||||
----------------------------
|
||||
revision 2.175
|
||||
date: 2021/12/21 17:46:14; author: gilles; state: Exp; lines: +23 -21
|
||||
Bugix. Darwin, fixed loadavg tests, no more W/t/loadavg.out needed.
|
||||
----------------------------
|
||||
revision 2.174
|
||||
date: 2021/12/14 15:51:58; author: gilles; state: Exp; lines: +62 -17
|
||||
Added advice for:
|
||||
ERR_APPEND_SIZE
|
||||
ERR_CONNECTION_FAILURE_HOST1
|
||||
ERR_CONNECTION_FAILURE_HOST2
|
||||
ERR_AUTHENTICATION_FAILURE_USER1
|
||||
ERR_AUTHENTICATION_FAILURE_USER2
|
||||
----------------------------
|
||||
revision 2.173
|
||||
date: 2021/12/09 18:30:34; author: gilles; state: Exp; lines: +61 -40
|
||||
Bugfix. Made reconnect mechanism works with --oauthdirect1 --oauthdirect2 --oauthaccesstoken1 --oauthaccesstoken2
|
||||
----------------------------
|
||||
revision 2.172
|
||||
date: 2021/12/07 18:19:42; author: gilles; state: Exp; lines: +27 -17
|
||||
Added some tests to tests_get_options_from_string() and tests_get_options_extra()
|
||||
I can not have the unknown options back with Getopt::Long::GetOptionsFromString(), just the unknown values, ie, caca but not --caca
|
||||
----------------------------
|
||||
revision 2.171
|
||||
date: 2021/12/07 17:50:12; author: gilles; state: Exp; lines: +14 -8
|
||||
Added --ssl1 --ssl2 --tls1 --tls2 --compress1 --compress2 to get_options_from_string()
|
||||
----------------------------
|
||||
revision 2.170
|
||||
date: 2021/12/07 17:19:44; author: gilles; state: Exp; lines: +12 -8
|
||||
Added --keepalive1 --keepalive2 --reconnectretry1 --reconnectretry2 in get_options_from_string()
|
||||
----------------------------
|
||||
revision 2.169
|
||||
date: 2021/12/07 17:13:44; author: gilles; state: Exp; lines: +101 -36
|
||||
Added --keepalive1 and --keepalive2 options. On by default.
|
||||
See https://metacpan.org/pod/Mail::IMAPClient#Keepalive
|
||||
Use --nokeepalive1 and --nokeepalive2 to disable Keepalive.
|
||||
----------------------------
|
||||
revision 2.168
|
||||
date: 2021/12/05 23:27:27; author: gilles; state: Exp; lines: +29 -11
|
||||
Added --debugflags --errorsmax --folder --timeout in options from file
|
||||
----------------------------
|
||||
revision 2.167
|
||||
date: 2021/12/02 16:59:51; author: gilles; state: Exp; lines: +9 -9
|
||||
Moved the call to extra options after the chdir of the CGI context.
|
||||
----------------------------
|
||||
revision 2.166
|
||||
date: 2021/12/02 15:23:37; author: gilles; state: Exp; lines: +107 -9
|
||||
Now read extra options on the first line of the file ./options_extra.txt if it is present and readable.
|
||||
----------------------------
|
||||
revision 2.165
|
||||
date: 2021/11/30 20:27:38; author: gilles; state: Exp; lines: +30 -11
|
||||
cpu_time rounded with 2 decimals.
|
||||
Added 4 tests when no compression is on.
|
||||
----------------------------
|
||||
revision 2.164
|
||||
date: 2021/11/24 21:26:46; author: gilles; state: Exp; lines: +12 -11
|
||||
Compression no more on by default. Just to see.
|
||||
----------------------------
|
||||
revision 2.163
|
||||
date: 2021/11/20 20:11:46; author: gilles; state: Exp; lines: +8 -7
|
||||
Bugfix. imapsync --version was buggy in docker context.
|
||||
----------------------------
|
||||
revision 2.162
|
||||
date: 2021/11/20 10:16:33; author: gilles; state: Exp; lines: +14 -12
|
||||
Docker. Current working directory changed from /var/tmp to /var/tmp/uid_$EFFECTIVE_USER_ID
|
||||
----------------------------
|
||||
revision 2.161
|
||||
date: 2021/11/19 18:17:48; author: gilles; state: Exp; lines: +8 -8
|
||||
Bugfix. inline doc mentioned always --nocompress1
|
||||
----------------------------
|
||||
revision 2.160
|
||||
date: 2021/11/19 14:40:58; author: gilles; state: Exp; lines: +10 -7
|
||||
Added inline documentation about --nocompress1 and --nocompress2
|
||||
----------------------------
|
||||
revision 2.159
|
||||
date: 2021/11/19 14:29:31; author: gilles; state: Exp; lines: +113 -12
|
||||
Dependency. Added use Compress::Zlib
|
||||
Enhancement. Added compression in imap. On by default no matter the capability announced. Use --nocompress1 and --nocompress2 to turn it off.
|
||||
----------------------------
|
||||
revision 2.158
|
||||
date: 2021/11/13 20:01:35; author: gilles; state: Exp; lines: +13 -7
|
||||
Added README help for --truncmess
|
||||
----------------------------
|
||||
revision 2.157
|
||||
date: 2021/10/23 21:51:43; author: gilles; state: Exp; lines: +61 -16
|
||||
Refactor. Deglobalized $debugcontent. Added debugcontent() function.
|
||||
1800 unit tests.
|
||||
----------------------------
|
||||
revision 2.156
|
||||
date: 2021/10/12 13:36:36; author: gilles; state: Exp; lines: +72 -71
|
||||
Added comment for ERR_FLAGS "Many STORE errors with FLAGS. Retry with the option --noresyncflags"
|
||||
Refactored errors_incr() and errors_listing()
|
||||
Bugfix. errors_incr() existed with CATCH_ALL
|
||||
----------------------------
|
||||
revision 2.155
|
||||
date: 2021/10/01 07:46:55; author: gilles; state: Exp; lines: +9 -8
|
||||
Like --useheader X-Gmail-Received --useheader Message-Id when --gmail1 --gmail2
|
||||
----------------------------
|
||||
revision 2.154
|
||||
date: 2021/09/29 20:38:04; author: gilles; state: Exp; lines: +8 -8
|
||||
Bugfix. Added 'E&AwE-le&AwE-ments envoye&AwE-s' in possible_special
|
||||
----------------------------
|
||||
revision 2.153
|
||||
date: 2021/09/29 13:56:15; author: gilles; state: Exp; lines: +34 -12
|
||||
Does not checknoabletosearch if --justfolders
|
||||
When creating folder check if selectable and consider ok if selectable
|
||||
----------------------------
|
||||
revision 2.152
|
||||
date: 2021/09/29 12:03:12; author: gilles; state: Exp; lines: +362 -58
|
||||
Added inline advice on error ERR_OVERQUOTA
|
||||
Added inline advice on error ERR_TRANSFER_EXCEEDED
|
||||
Renamed function bytes_display_string() bytes_display_string_bin()
|
||||
bytes_display_string_bin converts bytes to human KiB MiB GiB TiB PiB
|
||||
Added function bytes_display_string_dec() to convert bytes to human decimal KB MB GB TB PB (1000 base)
|
||||
----------------------------
|
||||
revision 2.151
|
||||
date: 2021/09/08 10:34:25; author: gilles; state: Exp; lines: +23 -18
|
||||
Bugfix. load average on macosx was sometimes buggy. locale float 3,14 instead of 3.14
|
||||
----------------------------
|
||||
revision 2.150
|
||||
date: 2021/08/08 12:10:51; author: gilles; state: Exp; lines: +9 -10
|
||||
Refactor. Deglobalized warn_release variable
|
||||
----------------------------
|
||||
revision 2.149
|
||||
date: 2021/07/31 11:24:24; author: gilles; state: Exp; lines: +7 -26
|
||||
Removed --fast option.
|
||||
----------------------------
|
||||
revision 2.148
|
||||
date: 2021/07/22 14:21:09; author: gilles; state: Exp; lines: +10 -10
|
||||
Bugfix. abort didn't do charset=UTF-8; same for heavy load 503 Service Unavailable
|
||||
----------------------------
|
||||
revision 2.147
|
||||
date: 2021/07/22 13:13:50; author: gilles; state: Exp; lines: +12 -12
|
||||
Bugfix. The maximum number a pid can be is 2^22, not 2^32.
|
||||
----------------------------
|
||||
revision 2.146
|
||||
date: 2021/07/22 12:48:21; author: gilles; state: Exp; lines: +8 -8
|
||||
1742 unit tests.
|
||||
----------------------------
|
||||
revision 2.145
|
||||
date: 2021/07/22 12:45:31; author: gilles; state: Exp; lines: +16 -13
|
||||
Bugfix. Up the maximum number a pid can be. From 99999 to 2^32. See https://unix.stackexchange.com/questions/16883/what-is-the-maximum-value-of-the-process-id
|
||||
----------------------------
|
||||
revision 2.144
|
||||
date: 2021/07/17 18:07:59; author: gilles; state: Exp; lines: +13 -10
|
||||
Just an experimental loaddelay forced to 0.
|
||||
----------------------------
|
||||
revision 2.143
|
||||
date: 2021/07/12 19:45:44; author: gilles; state: Exp; lines: +111 -15
|
||||
Bugfix. Under docker context --version was buggy, too verbose.
|
||||
----------------------------
|
||||
revision 2.142
|
||||
date: 2021/07/12 14:04:01; author: gilles; state: Exp; lines: +17 -19
|
||||
Removed that hard limit --maxsize 35_651_584 set by --gmail2 since CAPABILITY is used and good.
|
||||
----------------------------
|
||||
revision 2.141
|
||||
date: 2021/07/06 02:59:19; author: gilles; state: Exp; lines: +8 -8
|
||||
cpu_time param
|
||||
----------------------------
|
||||
revision 2.140
|
||||
date: 2021/07/05 20:14:18; author: gilles; state: Exp; lines: +14 -10
|
||||
Fixed perlcrit 4 severity 4 violations.
|
||||
----------------------------
|
||||
|
||||
@ -79,7 +79,7 @@ Q. For some messages, the imapsync log says
|
||||
|
||||
R0. Append errors are host2 problems, append is the imap term to copy
|
||||
a message to the destination account.
|
||||
A problem is that the assosiated "socket closed ..." error message happens
|
||||
A problem is that the associated "socket closed ..." error message happens
|
||||
for several different issues. So I list here several potential issues
|
||||
and their solutions if they exist.
|
||||
R1 deals about too long lines in messages on Windows.
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
#!/bin/cat
|
||||
$Id: FAQ.Admin_Authentication.txt,v 1.12 2021/02/19 13:44:18 gilles Exp gilles $
|
||||
$Id: FAQ.Admin_Authentication.txt,v 1.13 2022/04/06 10:27:52 gilles Exp gilles $
|
||||
|
||||
This documentation is also available online at
|
||||
https://imapsync.lamiral.info/FAQ.d/
|
||||
@ -20,7 +20,7 @@ server and its configuration.
|
||||
You have to follow this road:
|
||||
* Determine what is the imap software server
|
||||
* Find out whether it supports an admin account or not
|
||||
* If no, leave this reading, take an handkerchief and cry
|
||||
* If no, leave this reading, take a handkerchief and cry
|
||||
* If yes, search how the imap software server supports
|
||||
an admin account (see below)
|
||||
* Figure out whether an admin account is actually configured or not,
|
||||
@ -42,6 +42,7 @@ Known imap software servers supporting imap admin authentication:
|
||||
* Zimbra. See the file FAQ.Zimbra.txt
|
||||
* Kerio See the file FAQ.Kerio.txt
|
||||
* Cyrus-imap. See the file FAQ.Cyrus.txt
|
||||
* James. See the file FAQ.James.txt
|
||||
* UW-imap. See the file FAQ.General.txt
|
||||
* Sun Java Enterprise System/SunOne/iPlanet. See the file FAQ.General.txt
|
||||
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
#!/bin/cat
|
||||
$Id: FAQ.Archiving.txt,v 1.25 2021/05/04 16:56:59 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
|
||||
https://imapsync.lamiral.info/FAQ.d/
|
||||
@ -14,12 +14,12 @@ Questions answered in this FAQ are:
|
||||
Q. How can I archive different accounts on the same destination account,
|
||||
each account on a separate folder?
|
||||
|
||||
Q. How can I restore a complete account archived in a subfolder, like
|
||||
with the option --subfolder2?
|
||||
Q. How can I restore a complete account backuped in a subfolder, like
|
||||
a backup done with the option --subfolder2?
|
||||
|
||||
Q. How to move emails from one IMAP folder to another either on the
|
||||
same IMAP server or a different one?
|
||||
For example, all messages older than 1 year, move from INBOX to Archive.
|
||||
Q. How to move emails from one IMAP folder to another, either on the
|
||||
same IMAP server or on a different one? Example:
|
||||
How to move all messages older than 1 year, from INBOX to Archive?
|
||||
|
||||
Q. Can imapsync be used to maintain and restore a local offline copy
|
||||
of a mailbox, eg for backup purposes, using Mbox or Maildir
|
||||
@ -47,8 +47,12 @@ R. Use --subfolder2
|
||||
|
||||
Examples:
|
||||
|
||||
To backup the account Foo in a subfolder called FooArchiv:
|
||||
|
||||
imapsync ... --user1 Foo --subfolder2 FooArchiv
|
||||
|
||||
To backup the account Bar in a subfolder called BarArchiv:
|
||||
|
||||
imapsync ... --user1 Bar --subfolder2 BarArchiv
|
||||
|
||||
In case you need a very strict sync, add options
|
||||
@ -58,20 +62,26 @@ It will delete on account2 what is not on account1 but only in the right place,
|
||||
ie, the subfolder "FooArchiv".
|
||||
|
||||
Examples:
|
||||
|
||||
|
||||
To mirror the account Foo in a subfolder called FooArchiv:
|
||||
|
||||
imapsync ... --user1 Foo --subfolder2 FooArchiv --delete2 --delete2foldersonly "FooArchiv"
|
||||
|
||||
To mirror the account Bar in a subfolder called BarArchiv:
|
||||
|
||||
imapsync ... --user1 Bar --subfolder2 BarArchiv --delete2 --delete2foldersonly "BarArchiv"
|
||||
|
||||
See how to restore those with the next Q/R.
|
||||
|
||||
=======================================================================
|
||||
Q. How can I restore a complete account archived in a subfolder, like
|
||||
with the option --subfolder2?
|
||||
Q. How can I restore a complete account backuped in a subfolder, like
|
||||
a backup done with the option --subfolder2?
|
||||
|
||||
R. Use --subfolder1
|
||||
|
||||
--subfolder1 str : Syncs the host1 folders hierarchy under folder str
|
||||
to the root hierarchy of host2.
|
||||
It's the couterpart of a sync done by --subfolder2
|
||||
It's the counterpart of a sync done by --subfolder2
|
||||
when doing it in the reverse order.
|
||||
Backup/Restore scenario:
|
||||
Use --subfolder2 str for a backup to the folder str
|
||||
@ -81,26 +91,29 @@ R. Use --subfolder1
|
||||
|
||||
Examples:
|
||||
|
||||
To restore the whole folder FooArchiv hierarchy into the Foo account:
|
||||
|
||||
imapsync ... --user2 Foo --subfolder1 FooArchiv
|
||||
|
||||
imapsync ... --user2 Bar --subfolder1 BarArchiv
|
||||
To restore the whole folder BarArchiv hierarchy into the Bar account:
|
||||
|
||||
imapsync ... --user2 Bar --subfolder1 BarArchiv
|
||||
|
||||
Read the previous FAQ item "How can I archive different accounts on the same
|
||||
destination account, each account on a separate folder?"
|
||||
|
||||
|
||||
=======================================================================
|
||||
Q. How to move emails from one IMAP folder to another either on the
|
||||
same IMAP server or a different one?
|
||||
For example, all messages older than 1 year, move from INBOX to Archive.
|
||||
Q. How to move emails from one IMAP folder to another, either on the
|
||||
same IMAP server or on a different one? Example:
|
||||
How to move all messages older than 1 year, from INBOX to Archive?
|
||||
|
||||
R1. Solution:
|
||||
|
||||
imapsync ... --minage 365 --folder Inbox --f1f2 INBOX=Archive --delete1 --noexpungeaftereach
|
||||
imapsync ... --minage 365 --folder INBOX --f1f2 INBOX=Archive --delete1 --noexpungeaftereach
|
||||
|
||||
Add option --noexpungeaftereach if speed is a concern.
|
||||
Add option --delete1 if you want to move messages, instead of just copy/sync them.
|
||||
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.
|
||||
|
||||
R2. See also file FAQ.Folders_Mapping.txt
|
||||
|
||||
@ -145,20 +158,23 @@ I have never used any of this tools so asking me for support with them
|
||||
won't go far away.
|
||||
|
||||
=======================================================================
|
||||
Q. How to archive a whole year in a subfolder?
|
||||
Q. How to backup a whole year in a subfolder?
|
||||
|
||||
R. Example:
|
||||
R. To backup the whole year 2018 in a subfolder called ARCHIVE_2018:
|
||||
|
||||
imapsync ... --search "SENTSINCE 1-Jan-2018 SENTBEFORE 31-Dec-2018" \
|
||||
--folder2 ARCHIVE_2018
|
||||
--subfolder2 ARCHIVE_2018
|
||||
|
||||
=======================================================================
|
||||
Q. How to archive a whole year in subfolders but without subsubfolders?
|
||||
|
||||
R. Example:
|
||||
R. Instead of the solution with --subfolder2, use:
|
||||
|
||||
imapsync ... --search "SENTSINCE 1-Jan-2018 SENTBEFORE 31-Dec-2018" \
|
||||
--sep2 _ --regextrans2 's{(.*)}{Archive_$1_2018}'
|
||||
|
||||
For each folder "FFFF" in the source account, it will create a destination
|
||||
folder called "Archive_FFFF_2018", at the top level hierarchy.
|
||||
|
||||
=======================================================================
|
||||
=======================================================================
|
||||
|
||||
@ -1,9 +1,9 @@
|
||||
#!/bin/cat
|
||||
$Id: FAQ.Authentication_failure.txt,v 1.13 2021/03/02 19:24:22 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
|
||||
https://imapsync.lamiral.info/FAQ.d/
|
||||
https://imapsync.lamiral.info/FAQ.d/FAQ.Admin_Authentication.txt
|
||||
https://imapsync.lamiral.info/FAQ.d/FAQ.Authentication_failure.txt
|
||||
|
||||
=======================================================================
|
||||
Imapsync authentication issues
|
||||
@ -25,15 +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
|
||||
|
||||
|
||||
R. One over four imapsync syncs ends up quickly with the error message
|
||||
"Authentication failed" or "NO LOGIN failed" or similar.
|
||||
R. One over four imapsync synchronizations end up quickly with the error message
|
||||
"Authentication failed" or "NO LOGIN failed" or a similar message.
|
||||
Authentication failure is the primary failure with imapsync
|
||||
and since nothing tangible can be done without authentication,
|
||||
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, there are three parameters at each side:
|
||||
* Triple-check each credential parameter. It's not always a password problem,
|
||||
it can be the wrong host or the wrong user.
|
||||
There are three parameters on each side:
|
||||
* triple check --host1
|
||||
* triple check --user1
|
||||
* triple check --password1
|
||||
@ -41,7 +43,7 @@ Here are some advices to get you pass this difficult stage of authentication:
|
||||
* triple check --user2
|
||||
* 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
|
||||
authenticate successfully with imapsync. Examine the parameters of
|
||||
this other imap client and copy them as is for imapsync.
|
||||
@ -50,11 +52,10 @@ Here are some advices to get you pass this difficult stage of authentication:
|
||||
At the beginning of the output, imapsync dumps all its command
|
||||
line parameters; it's the line after "Command line used:".
|
||||
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
|
||||
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).
|
||||
|
||||
* It is sometimes very hard to quote correctly unusual characters,
|
||||
especially on Windows (and Mac sometimes). See
|
||||
@ -62,19 +63,19 @@ Here are some advices to get you pass this difficult stage of authentication:
|
||||
https://imapsync.lamiral.info/FAQ.d/FAQ.Passwords_on_Unix.txt
|
||||
https://imapsync.lamiral.info/FAQ.d/FAQ.Passwords_on_Mac.txt
|
||||
|
||||
The quickest trick may be to change the password temporally
|
||||
with easy characters like the classical alphabet, a long
|
||||
string still ensure strong security.
|
||||
The quickest trick may be to change the password temporarily
|
||||
with easy characters like the classical alphabet, one long
|
||||
string still ensures strong security.
|
||||
|
||||
* 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.
|
||||
So:
|
||||
* Try --authmech1 CRAM-MD5 (or --authmech2 CRAM-MD5)
|
||||
* Try --authmech1 PLAIN (or --authmech2 PLAIN)
|
||||
|
||||
* 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:
|
||||
|
||||
ncat --ssl -C imap.gmail.com 993
|
||||
@ -84,7 +85,7 @@ Here are some advices to get you pass this difficult stage of authentication:
|
||||
Replace imap.gmail.com by your imap server.
|
||||
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
|
||||
a LOGIN "gilles.lamiral@gmail.com" "secret"
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
#!/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
|
||||
https://imapsync.lamiral.info/FAQ.d/
|
||||
@ -33,7 +33,7 @@ genuine IMAP commands used and their responses. The problem with
|
||||
generates a very BIG logfile.
|
||||
|
||||
R2. If it is not ok with imapsync, the sync finally fails, then
|
||||
consider spliting the whole sync into smaller chunks using
|
||||
consider splitting the whole sync into smaller chunks using
|
||||
the option --search
|
||||
|
||||
For example, select messages only for a given year:
|
||||
|
||||
103
FAQ.d/FAQ.Capacity_Planning.txt
Normal file
103
FAQ.d/FAQ.Capacity_Planning.txt
Normal file
@ -0,0 +1,103 @@
|
||||
$Id: FAQ.Capacity_Planning.txt,v 1.6 2022/04/23 13:45:59 gilles Exp gilles $
|
||||
|
||||
This documentation is also available online at
|
||||
https://imapsync.lamiral.info/FAQ.d/
|
||||
https://imapsync.lamiral.info/FAQ.d/FAQ.Capacity_Planning.txt
|
||||
|
||||
|
||||
======================================================================
|
||||
Imapsync tips for Capacity Planning.
|
||||
======================================================================
|
||||
|
||||
|
||||
I plan to go to a distributed architecture for the online service. I'm
|
||||
doing some capacity planning. Imapsync takes memory, cpu and bandwidth
|
||||
in a relatively deterministic values.
|
||||
|
||||
My current question is: Shall I use
|
||||
* N 2GB hosts
|
||||
* N/2 4GB hosts
|
||||
* N/4 8GB hosts
|
||||
|
||||
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 symmetrical, 12.5 MBytes/s symmetrical,
|
||||
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
|
||||
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
|
||||
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
|
||||
4 imapsync processes per GB is the limit before swapping to disk,
|
||||
which is a known phenomenon telling when memory becomes the bottleneck.
|
||||
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
|
||||
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
|
||||
messages copied divided by the time passed. If imapsync is run between
|
||||
two foreign imap servers then the total size transferred on the
|
||||
network link is twice this value, one time when getting the message
|
||||
from host1, rx, and one time sending the message to host2, tx.
|
||||
|
||||
On average, an imapsync runs at 3 Mbps both ways, rx and tx, so 6 Mbps
|
||||
in total. So a 100 Mbps symmetric link allows 33 imapsync processes
|
||||
before the link becomes the bottleneck.
|
||||
|
||||
The best minutes observed so far are a global 187 Mpbs rate (~23 MiB/s)
|
||||
on a 100 Mbps symmetrical link done by 28 imapsync processes in parallel,
|
||||
6.7 Mbps per process at that minute. But the best minutes observed for a
|
||||
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
|
||||
imapsync doesn't perform heavy I/0 where it runs. Well, I don't know,
|
||||
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 resources
|
||||
has reached its maximal. The resources 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 )
|
||||
|
||||
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
#!/bin/cat
|
||||
$Id: FAQ.Contacts_Calendars.txt,v 1.14 2020/11/02 16:04:09 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
|
||||
https://imapsync.lamiral.info/FAQ.d/
|
||||
@ -11,21 +11,20 @@ https://imapsync.lamiral.info/FAQ.d/FAQ.Contacts_Calendars.txt
|
||||
|
||||
Questions answered in this FAQ are:
|
||||
|
||||
Q. Can I copy or sync Calendars or Contacts with imapsync?
|
||||
Q. Can I copy or sync Chat messages with imapsync?
|
||||
Q. How can I avoid copying Calendar or Contacts folders?
|
||||
Q. Can I copy or sync Contacts, Calendars, Tasks or Chat messages with imapsync?
|
||||
Q. How can I copy or synchronize Calendars or Contacts?
|
||||
Q. How can I avoid copying Calendar or Contacts folders?
|
||||
|
||||
Now the questions again with their answers.
|
||||
|
||||
=======================================================================
|
||||
Q. Can I copy or sync Calendars or Contacts with imapsync?
|
||||
Q. Can I copy or sync Contacts, Calendars, Tasks or Chat messages with imapsync?
|
||||
|
||||
R. No, Imapsync can't migrate Contacts and Calendars.
|
||||
It's because most IMAP servers don't get contacts and calendars
|
||||
R. No, Imapsync can't migrate Contacts, Calendars, Tasks nor Chat messages.
|
||||
It's because most IMAP servers don't get Contacts and Calendar
|
||||
events via IMAP. In other words, messages synced by imapsync from
|
||||
Calendars or Contacts folders are not used by email servers to set
|
||||
or get the contacts or calendars.
|
||||
Contacts/Calendars/Tasks/Chat folders are not used by email servers to set
|
||||
or get the contacts, calendars, tasks, or chat messages.
|
||||
No way via IMAP, no way via imapsync.
|
||||
|
||||
So it's a good idea to avoid syncing contacts and calendars when
|
||||
@ -35,12 +34,6 @@ R. No, Imapsync can't migrate Contacts and Calendars.
|
||||
But see also the question below
|
||||
"How can I copy or synchronize Calendars or Contacts?".
|
||||
|
||||
=======================================================================
|
||||
Q. Can I copy or sync Chat messages with imapsync?
|
||||
|
||||
R. No, Imapsync can't migrate Chat messages (those in GSuite for example).
|
||||
The explanation is the same as with Calendars or Contacts.
|
||||
|
||||
=======================================================================
|
||||
Q. How can I copy or synchronize Calendars or Contacts?
|
||||
|
||||
@ -62,32 +55,32 @@ b) From Gmail to Gmail, export and import calendars in ical format,
|
||||
c) For Outlook, use caldavsynchronizer.
|
||||
Homepage: http://caldavsynchronizer.org/
|
||||
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.
|
||||
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.
|
||||
|
||||
|
||||
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,
|
||||
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
|
||||
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:
|
||||
http://www.linux-france.org/prj/imapsync_list/msg01797.html
|
||||
http://www.linux-france.org/prj/imapsync_list/msg01811.html
|
||||
http://linux-france.tk/prj/imapsync_list/msg01797.html
|
||||
http://linux-france.tk/prj/imapsync_list/msg01811.html
|
||||
|
||||
=======================================================================
|
||||
Q. How can I avoid copying Calendar or Contacts folders?
|
||||
|
||||
R. You can avoid synchronizing Calendar or Contacts folders with
|
||||
the --exclude option. First you have to search what is their
|
||||
exact name. The folders listing printed by imapsync at the
|
||||
the --exclude option. First, you have to search what is their
|
||||
exact name. The listing of folders printed by imapsync at the
|
||||
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"
|
||||
|
||||
@ -96,7 +89,7 @@ R. You can avoid synchronizing Calendar or Contacts folders with
|
||||
like "MyCalendarZ" or "TheContactsImDoneWith".
|
||||
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
|
||||
|
||||
On windows:
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
#!/bin/cat
|
||||
$Id: FAQ.David_Tobit.txt,v 1.4 2019/03/28 17:58:53 gilles Exp gilles $
|
||||
$Id: FAQ.David_Tobit.txt,v 1.5 2022/04/05 13:48:52 gilles Exp gilles $
|
||||
|
||||
This documentation is also available online at
|
||||
https://imapsync.lamiral.info/FAQ.d/
|
||||
@ -47,8 +47,8 @@ First try above V10 solution since improvments have been made
|
||||
to support Tobit.
|
||||
|
||||
R. Look at the discussion:
|
||||
http://www.linux-france.org/prj/imapsync_list/msg00583.html
|
||||
http://www.linux-france.org/prj/imapsync_list/threads.html#00583
|
||||
http://linux-france.tk/prj/imapsync_list/msg00583.html
|
||||
http://linux-france.tk/prj/imapsync_list/threads.html#00583
|
||||
patch saved in ./patches/imapsync-1.337_tobit_V6.patch
|
||||
|
||||
=======================================================================
|
||||
@ -1,13 +1,13 @@
|
||||
#!/bin/cat
|
||||
# $Id: FAQ.Docker.txt,v 1.8 2021/05/04 16:57:09 gilles Exp gilles $
|
||||
# $Id: FAQ.Docker.txt,v 1.10 2021/07/12 21:22:14 gilles Exp gilles $
|
||||
|
||||
This document is also available online at
|
||||
https://imapsync.lamiral.info/FAQ.d/
|
||||
https://imapsync.lamiral.info/FAQ.d/FAQ.Docker.txt
|
||||
|
||||
===========================================================================
|
||||
Installing and using imapsync docker image
|
||||
===========================================================================
|
||||
======================================================================
|
||||
Installing and using imapsync docker image
|
||||
======================================================================
|
||||
|
||||
Questions answered in this FAQ are:
|
||||
|
||||
@ -23,27 +23,29 @@ Q. Where is the imapsync Docker hub location?
|
||||
Q. How can I mask the passwords on the command line without mounting
|
||||
inside the container?
|
||||
|
||||
===========================================================================
|
||||
Q. Why imapsync isn't logging to a file in Docker context.
|
||||
How can I allow it?
|
||||
|
||||
Q. Any tips for the Docker Mailcow distribution?
|
||||
|
||||
Q. How can I build my own image?
|
||||
|
||||
Q. What do you do to update the docker hub image?
|
||||
|
||||
Now the questions again with their answers.
|
||||
|
||||
===========================================================================
|
||||
======================================================================
|
||||
Q. How can I install and use the imapsync Docker image on my amd64 system?
|
||||
|
||||
R. Install Docker on your system. Once Docker is installed on your system,
|
||||
all you have to do in order to run imapsync is the command line:
|
||||
all you have to do in order install and run imapsync is the command line:
|
||||
|
||||
docker run gilleslamiral/imapsync imapsync <usual imapsync arguments>
|
||||
|
||||
===========================================================================
|
||||
======================================================================
|
||||
Q. How can I install and use the imapsync Docker image on my i386 system?
|
||||
|
||||
R. You can't for now. It will throw this error when running it:
|
||||
R1. You can't do it directly for now. It will throw this error when running it:
|
||||
|
||||
docker run gilleslamiral/imapsync imapsync
|
||||
standard_init_linux.go:211: exec user process caused "exec format error"
|
||||
@ -51,21 +53,24 @@ R. You can't for now. It will throw this error when running it:
|
||||
I plan to make the image multi-plateform. Drop me a note if you are
|
||||
eager to have it.
|
||||
|
||||
===========================================================================
|
||||
R2. Build the image on a i386 system with the exact same Dockerfile provided
|
||||
and run it on your i386 system.
|
||||
|
||||
======================================================================
|
||||
Q. How can I install or update only the imapsync Docker image on my system?
|
||||
|
||||
R. To install or update the imapsync image, run:
|
||||
|
||||
docker pull gilleslamiral/imapsync
|
||||
|
||||
===========================================================================
|
||||
======================================================================
|
||||
Q. Where is the imapsync Docker hub location?
|
||||
|
||||
R. Here:
|
||||
|
||||
https://hub.docker.com/r/gilleslamiral/imapsync/
|
||||
|
||||
===========================================================================
|
||||
======================================================================
|
||||
Q. How can I mask the passwords on the command line without mounting
|
||||
anything inside the container?
|
||||
|
||||
@ -84,7 +89,7 @@ See:
|
||||
https://docs.docker.com/engine/reference/commandline/run/#set-environment-variables--e---env---env-file
|
||||
https://stackoverflow.com/a/30494145/491175
|
||||
|
||||
===========================================================================
|
||||
======================================================================
|
||||
Q. Why imapsync isn't logging to a file in Docker context.
|
||||
How can I allow it?
|
||||
|
||||
@ -93,14 +98,14 @@ R. In Docker context, writing the log is disabled by default because you
|
||||
inside the docker and no longer available after the sync, unless
|
||||
a special mount is done before.
|
||||
|
||||
Starting with imapsync release 2.113 the logging can be set on
|
||||
Starting with imapsync release 2.113 the logging can be turned on
|
||||
by using the option --log. You can add access to the logfile with a mount
|
||||
or similar. See https://docs.docker.com/storage/volumes/"
|
||||
|
||||
See also
|
||||
https://github.com/imapsync/imapsync/issues/283
|
||||
|
||||
===========================================================================
|
||||
======================================================================
|
||||
Q. Any tips for the Docker Mailcow distribution?
|
||||
|
||||
R. With the Mailcow distribution, imapsync is running inside a Docker
|
||||
@ -116,6 +121,40 @@ See the original Mathilde's comment:
|
||||
|
||||
https://github.com/imapsync/imapsync/issues/201#issuecomment-559500077
|
||||
|
||||
======================================================================
|
||||
Q. How can I build my own image?
|
||||
|
||||
===========================================================================
|
||||
===========================================================================
|
||||
R. Use the following command to build the image:
|
||||
|
||||
docker build -t gilleslamiral/imapsync .
|
||||
|
||||
with the Dockerfile in the current directory.
|
||||
|
||||
The latest Dockerfile can be found at
|
||||
https://imapsync.lamiral.info/INSTALL.d/Dockerfile
|
||||
or
|
||||
https://hub.docker.com/r/gilleslamiral/imapsync
|
||||
or
|
||||
https://imapsync.lamiral.info/INSTALL.d/INSTALL.Docker_build.txt
|
||||
|
||||
|
||||
======================================================================
|
||||
Q. What do you do to update the docker hub image?
|
||||
|
||||
R. I do in my imapsync directory:
|
||||
|
||||
make docker_build
|
||||
make docker_upload_docker_hub
|
||||
|
||||
Then I go to
|
||||
https://hub.docker.com/r/gilleslamiral/imapsync
|
||||
|
||||
I edit and update the docker "Readme" with the last Dockerfile I used.
|
||||
I also update INSTALL.Docker_build.txt with the last Dockerfile
|
||||
|
||||
I also update the last Dockerfile on the imapsync site with:
|
||||
|
||||
make upload_index
|
||||
|
||||
======================================================================
|
||||
======================================================================
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
#!/bin/cat
|
||||
$Id: FAQ.Dovecot.txt,v 1.12 2021/04/30 13:02:06 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
|
||||
https://imapsync.lamiral.info/FAQ.d/
|
||||
@ -13,6 +13,12 @@ https://imapsync.lamiral.info/FAQ.d/FAQ.Dovecot.txt
|
||||
|
||||
Questions answered in this FAQ are:
|
||||
|
||||
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
|
||||
"Mailbox doesn't allow inferior mailboxes"
|
||||
|
||||
@ -28,6 +34,19 @@ Q. Imapsync encounters timeouts and Dovecot log says
|
||||
|
||||
Now the questions again with their answers.
|
||||
|
||||
=======================================================================
|
||||
Q. Is there imapsync specific options to deal with Dovecot?
|
||||
|
||||
R. Dovecot is ok with imapsync, nothing special is needed, just the
|
||||
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?
|
||||
@ -44,11 +63,11 @@ Q. I have a mailbox that "dovecot backup" gives errors on that
|
||||
I can't get rid of: "UID inserted in the middle of mailbox".
|
||||
What can I do?
|
||||
|
||||
Q. Solution, run:
|
||||
R. Solution, run:
|
||||
|
||||
doveadm -v deduplicate -m -u martin mailbox A/Posted
|
||||
|
||||
it will get rid of the duplicates (I can also be run without "-m")
|
||||
it will get rid of the duplicates (it can also be run without "-m")
|
||||
and this also allows "dovecot backup" to work.
|
||||
|
||||
Thanks to Martin Ward for this input!
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
#!/bin/cat
|
||||
$Id: FAQ.Duplicates.txt,v 1.24 2021/07/04 22:59:56 gilles Exp gilles $
|
||||
$Id: FAQ.Duplicates.txt,v 1.25 2021/10/06 20:21:13 gilles Exp gilles $
|
||||
|
||||
This documentation is also available online at
|
||||
https://imapsync.lamiral.info/FAQ.d/
|
||||
@ -12,6 +12,10 @@ https://imapsync.lamiral.info/FAQ.d/FAQ.Duplicates.txt
|
||||
|
||||
Questions answered in this FAQ are:
|
||||
|
||||
Q. Without imapsync, I made several copies that partially failed and it
|
||||
ended with many duplicates/triplicates messages or more. Can I clean
|
||||
up the account with imapsync and how?
|
||||
|
||||
Q. How does imapsync identify messages and duplicates?
|
||||
|
||||
Q. How can I know if imapsync will generate duplicates on a second run?
|
||||
@ -30,6 +34,14 @@ Q. How can I remove duplicates in a lone account?
|
||||
|
||||
Now the questions again with their answers.
|
||||
|
||||
=======================================================================
|
||||
Q. Without imapsync, I made several copies that partially failed and it
|
||||
ended with many duplicates/triplicates messages or more. Can I clean
|
||||
up the account with imapsync and how?
|
||||
|
||||
R. Yes.
|
||||
See the Q/R "How can I remove duplicates in a lone account?" below.
|
||||
|
||||
=======================================================================
|
||||
Q. How does imapsync identify messages and duplicates?
|
||||
|
||||
@ -101,7 +113,7 @@ identify messages.
|
||||
|
||||
If you end with many messages skipped then it's very
|
||||
good and now you can safely resync the mailbox
|
||||
and get rid of the dupplicates messages on host2 with:
|
||||
and get rid of the duplicate messages on host2 with:
|
||||
|
||||
imapsync ... --useheader "Message-Id" --delete2duplicates
|
||||
|
||||
@ -260,6 +272,8 @@ R. In order to remove duplicates in a lone account, just run imapsync
|
||||
on the same account as source and destination, plus the
|
||||
option --delete2duplicates, ie, with
|
||||
host1 == host2, user1 == user2, password1 == password2
|
||||
|
||||
|
||||
imapsync ... --delete2duplicates
|
||||
|
||||
=======================================================================
|
||||
=======================================================================
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
#!/bin/cat
|
||||
$Id: FAQ.Emptying.txt,v 1.11 2020/10/13 16:24:43 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
|
||||
https://imapsync.lamiral.info/FAQ.d/
|
||||
@ -7,16 +7,26 @@ https://imapsync.lamiral.info/FAQ.d/
|
||||
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:
|
||||
|
||||
Q. How to delete all emails of all folders of an account with imapsync?
|
||||
|
||||
Q. How to delete all folders of an account with imapsync?
|
||||
|
||||
Q. How to delete some folders of an account with imapsync?
|
||||
|
||||
Q. How to revert a sync that went to the wrong account?
|
||||
|
||||
Q. How to delete emails older than 90 days 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.
|
||||
|
||||
=======================================================================
|
||||
@ -27,11 +37,11 @@ R. Use the same account on both sides with option --delete1
|
||||
|
||||
Option --noexpungeaftereach is just to speed up the deletions.
|
||||
|
||||
Example (real example):
|
||||
Example:
|
||||
|
||||
imapsync \
|
||||
--host1 test.lamiral.info --user1 empty --password1 secret \
|
||||
--host2 test.lamiral.info --user2 empty --password2 secret \
|
||||
--host1 test.lamiral.info --user1 foo --password1 secret \
|
||||
--host2 test.lamiral.info --user2 foo --password2 secret \
|
||||
--delete1 --noexpungeaftereach
|
||||
|
||||
=======================================================================
|
||||
@ -90,5 +100,54 @@ R. If all the wrong emails have some common characteristic that is not
|
||||
If the wrongly emails messages synced have no special common
|
||||
characteristic then take an handkerchief and cry.
|
||||
|
||||
=======================================================================
|
||||
Q. How to delete emails older than 90 days with imapsync?
|
||||
|
||||
R. Use the same account on both sides with option --delete1
|
||||
--noexpungeaftereach --minage 90
|
||||
|
||||
Example:
|
||||
|
||||
imapsync \
|
||||
--host1 test.lamiral.info --user1 foo --password1 secret \
|
||||
--host2 test.lamiral.info --user2 foo --password2 secret \
|
||||
--delete1 --noexpungeaftereach --minage 90
|
||||
|
||||
=======================================================================
|
||||
Q. How to delete emails matching a certain criterium with imapsync?
|
||||
|
||||
R. Use the --search option to select the messages you want to delete
|
||||
and then use the same account on both sides with the suplementary
|
||||
options --delete1 --noexpungeaftereach
|
||||
To select the messages read the document FAQ.Messages_Selection.txt
|
||||
at https://imapsync.lamiral.info/FAQ.d/FAQ.Messages_Selection.txt
|
||||
|
||||
|
||||
Example:
|
||||
|
||||
imapsync \
|
||||
--host1 test.lamiral.info --user1 foo --password1 secret \
|
||||
--host2 test.lamiral.info --user2 foo --password2 secret \
|
||||
--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
|
||||
|
||||
=======================================================================
|
||||
=======================================================================
|
||||
@ -1,5 +1,5 @@
|
||||
|
||||
$Id: FAQ.Exchange.txt,v 1.75 2021/05/25 10:23:33 gilles Exp gilles $
|
||||
$Id: FAQ.Exchange.txt,v 1.80 2022/04/05 13:48:52 gilles Exp gilles $
|
||||
|
||||
This documentation is also available online at
|
||||
https://imapsync.lamiral.info/FAQ.d/
|
||||
@ -31,6 +31,9 @@ Q. Exchange fails with "User is authenticated but not connected".
|
||||
|
||||
Q. Exchange fails with "BAD Command received in Invalid state".
|
||||
|
||||
Q. Exchange fails with "NO Server Unavailable. 15" and imapsync says
|
||||
"could not append ... NO Server Unavailable. 15"
|
||||
|
||||
Q. From XXX to Exchange 2013, read receipts are all resent again
|
||||
after a sync. Even for old messages. How can I fix that?
|
||||
|
||||
@ -77,7 +80,7 @@ R. Yes. But IMAP access to an Exchange account is not always
|
||||
======================================================================
|
||||
Q. How to sync from XXX to Exchange 2010/2013/2016/2019
|
||||
|
||||
R0. IMAP is not enable by default on Exchange, see how to enable it:
|
||||
R0. IMAP is not enabled by default on Exchange, see how to enable it:
|
||||
https://docs.microsoft.com/en-us/exchange/enable-imap4-in-exchange-2013-exchange-2013-help
|
||||
Also read
|
||||
http://clintboessen.blogspot.com/2018/03/binding-certificate-breaks-imap-or-pop.html
|
||||
@ -201,6 +204,14 @@ R2. Miguel Alameda reported understanding and solving this issue
|
||||
like this, the context was admin/authuser:
|
||||
"The admin user had not permission in the target mailbox."
|
||||
|
||||
R3. Jason from magiclamp.net adds this tip (2021_11_23).
|
||||
"In GoDaddy Exchange admin center, under recipients, you can
|
||||
double click on a mailbox, and in the "mailbox delegation" scrolling
|
||||
down to the bottom it shows a input field named "Full Access".
|
||||
Add the admin account there."
|
||||
|
||||
|
||||
|
||||
======================================================================
|
||||
Q. I see "NO Maximum size of appendable message has been exceeded"
|
||||
What can I do with that?
|
||||
@ -254,7 +265,7 @@ Q. Exchange throttles the sync and says:
|
||||
"Request is throttled. Suggested Backoff Time: 299961 milliseconds".
|
||||
What can I do with that?
|
||||
|
||||
R0. Exchange have throttle mechanisms to limit any huge
|
||||
R0. Exchange has throttle mechanisms to limit any huge
|
||||
usage. Sometimes imapsync transfers are too stressful for servers.
|
||||
The message
|
||||
"Request is throttled. Suggested Backoff Time: 299961 milliseconds"
|
||||
@ -277,7 +288,7 @@ and I guess it changes over time.
|
||||
R2. For Exchange, in case throttle appears anyway, fix them with:
|
||||
https://docs.microsoft.com/en-us/exchange/change-user-throttling-settings-for-specific-users-exchange-2013-help
|
||||
See also:
|
||||
http://www.linux-france.org/prj/imapsync_list/msg02072.html
|
||||
http://linux-france.tk/prj/imapsync_list/msg02072.html
|
||||
(Subject: Re: [imapsync] From Exchange to Dovecot. Speed
|
||||
Date: Mon, 03 Nov 2014 00:14:59 +0100)
|
||||
|
||||
@ -298,6 +309,35 @@ R2. This message might also happen when authenticating with ssl and tls.
|
||||
It won't work, you can't do a direct double encryption, few
|
||||
servers allow that.
|
||||
|
||||
======================================================================
|
||||
Q. Exchange fails with "NO Server Unavailable. 15" and imapsync says
|
||||
"could not append ... NO Server Unavailable. 15"
|
||||
|
||||
R1. The problem could be a mailbox quota limitation.
|
||||
|
||||
In the Exchange log file, if you see many
|
||||
"Microsoft.Exchange.Data.Storage.QuotaExceededException",
|
||||
it looks like "Quota Exceeded" could be the issue.
|
||||
|
||||
The solution is to increase the quota for this mailbox.
|
||||
Quoting
|
||||
https://docs.microsoft.com/en-us/exchange/recipients/user-mailboxes/storage-quotas?view=exchserver-2019
|
||||
In the Exchange admin center (EAC), navigate to Recipients > Mailboxes.
|
||||
In the list of user mailboxes, click the mailbox that you want to change the storage quotas for,
|
||||
and then click Edit icon, then change "Prohibit send and receive at (GB)", then save your changes.
|
||||
|
||||
Or use the Exchange Management Shell, aka PowerShell:
|
||||
Set-Mailbox -Identity "Joe Healy" -IssueWarningQuota 499gb -ProhibitSendQuota 500gb -ProhibitSendReceiveQuota 500gb -UseDatabaseQuotaDefaults $false
|
||||
|
||||
|
||||
R2. A user fixed it by enabling IMAP logging on Exchange which is
|
||||
quite crazy as a solution. But why not, here it is:
|
||||
|
||||
https://www.mantisbt.org/forums/viewtopic.php?p=68835&sid=8b1ecd2d976e85218fbf33fcd38c209d#p68835
|
||||
by TerranceM
|
||||
|
||||
Set-ImapSettings -Server <server-name> -ProtocolLogEnabled $true
|
||||
|
||||
======================================================================
|
||||
Q. From XXX to Exchange 2013, read receipts are all resent again
|
||||
after a sync. Even for old messages. How can I fix that?
|
||||
@ -315,7 +355,7 @@ Selecting seen message can be done with:
|
||||
|
||||
imapsync ... --search1 "SEEN" --disarmreadreceipts
|
||||
|
||||
Of course a second run has to be run without the --disarmreadreceipts
|
||||
Of course a second run has to be done without the --disarmreadreceipts
|
||||
for unseen messages:
|
||||
|
||||
imapsync ... --search1 "UNSEEN"
|
||||
@ -387,7 +427,7 @@ R. This error message comes from Exchange IMAP server when it
|
||||
|
||||
Have also in mind that Exchange closes the connection after 10 errors
|
||||
encountered so you might also see "BYE Connection closed" errors from
|
||||
Exchange, which means Exchange leaves the session and say goodbye,
|
||||
Exchange, which means Exchange leaves the session and says goodbye,
|
||||
come back later. Rerun a sync then.
|
||||
|
||||
On Linux, there is a good Python script in the tarball that can
|
||||
@ -573,7 +613,7 @@ R. Some servers take care about character case in folder names,
|
||||
imapsync ... --regextrans2 "s/^trash$/Trash/"
|
||||
|
||||
If there are two folders Trash and trash on host1 then both
|
||||
will be merge into only one Trash folder on host2.
|
||||
will be merged into only one Trash folder on host2.
|
||||
In case option --delete2 is used the regextans2 above becomes
|
||||
mandatory, otherwise imapsync will sync messages from the
|
||||
first Trash and then delete them when syncing trash.
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
#!/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
|
||||
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".
|
||||
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. 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:
|
||||
https://www.ci-solution.com/blog/artikel/ungelesen-geloescht-verhindern.html
|
||||
(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?
|
||||
|
||||
@ -305,7 +320,8 @@ You can try --nofilterflags straightaway without the
|
||||
"other thunderbird" proposal.
|
||||
|
||||
There is also the possibility to map flags across servers
|
||||
with --regexflags
|
||||
with the option --regexflag. See some --regexflag examples
|
||||
above.
|
||||
|
||||
|
||||
=======================================================================
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
#!/bin/cat
|
||||
$Id: FAQ.Folders_Selection.txt,v 1.11 2020/12/31 11:41:46 gilles Exp gilles $
|
||||
$Id: FAQ.Folders_Selection.txt,v 1.12 2022/03/22 11:12:32 gilles Exp gilles $
|
||||
|
||||
This documentation is also available online at
|
||||
https://imapsync.lamiral.info/FAQ.d/
|
||||
@ -72,9 +72,9 @@ R. From https://imapsync.lamiral.info/README
|
||||
|
||||
--nomixfolders : Do not merge folders when host1 is case-sensitive
|
||||
while host2 is not (like Exchange). Only the first
|
||||
similar folder is synced (example: with folders
|
||||
"Sent", "SENT" and "sent"
|
||||
on host1 only "Sent" will be synced to host2).
|
||||
similar folder is synced. Example: with folders
|
||||
"Sent", "SENT" and "sent" on host1, only "Sent"
|
||||
will be synced to host2.
|
||||
|
||||
--skipemptyfolders : Empty host1 folders are not created on host2.
|
||||
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
#!/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
|
||||
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".
|
||||
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
|
||||
the host2 duplicates.
|
||||
|
||||
6) Cosmic rays...
|
||||
7) Cosmic rays...
|
||||
|
||||
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
|
||||
|
||||
80
FAQ.d/FAQ.Fun_Things.txt
Normal file
80
FAQ.d/FAQ.Fun_Things.txt
Normal file
@ -0,0 +1,80 @@
|
||||
#!/bin/cat
|
||||
$Id: FAQ.Fun_Things.txt,v 1.2 2021/10/15 13:37:05 gilles Exp gilles $
|
||||
|
||||
This documentation is also available online at
|
||||
https://imapsync.lamiral.info/FAQ.d/
|
||||
https://imapsync.lamiral.info/FAQ.d/FAQ.Fun_Things.txt
|
||||
|
||||
=======================================================================
|
||||
Imapsync fun things to do with
|
||||
=======================================================================
|
||||
|
||||
Questions answered in this FAQ are:
|
||||
|
||||
Q. How can I have a daily digest of my mailbox?
|
||||
|
||||
|
||||
Now the questions again with their answers.
|
||||
|
||||
=======================================================================
|
||||
Q. How can I have a daily digest of my mailbox?
|
||||
|
||||
R. Use the same account as source and destination (not mandatory)
|
||||
|
||||
imapsync \
|
||||
--host1 imap.example.com --user1 foo --password1 secret \
|
||||
--host2 imap.example.com --user2 foo --password2 secret \
|
||||
--folder INBOX --maxage 1 --dry --nodry1 --debugcontent \
|
||||
--truncmess 1000 --f1f2 INBOX=Unused
|
||||
|
||||
Some explanations on the options suggested:
|
||||
|
||||
--folder INBOX to only focus on the folder INBOX
|
||||
|
||||
--maxage 1 to select messages less old than 1 day
|
||||
|
||||
--dry --nodry1 to avoid really syncing the messages
|
||||
|
||||
--debugcontent to display the content
|
||||
|
||||
--truncmess 1000 to display only the first 1000 bytes
|
||||
|
||||
--f1f2 INBOX=Unused to force imapsync to do something.
|
||||
Since it is the same mailbox as source and destination,
|
||||
imapsync usually doesn't sync the messages as they are
|
||||
already at the destination. The folder Unused has to
|
||||
exist, otherwise imapsync won't display the messages.
|
||||
|
||||
|
||||
If you pipe this command with a filter like egrep, it becomes like
|
||||
magic:
|
||||
|
||||
imapsync \
|
||||
--host1 imap.example.com --user1 foo --password1 secret \
|
||||
--host2 imap.example.com --user2 foo --password2 secret \
|
||||
--folder INBOX --maxage 1 --dry --nodry1 --debugcontent \
|
||||
--truncmess 1000 --f1f2 INBOX=Unused \
|
||||
| egrep 'From:|To:|Subject:|Date:|=====|msg '
|
||||
|
||||
Output example:
|
||||
|
||||
$RCSfile: FAQ.Fun_Things.txt,v $ $Revision: 1.2 $ $Date: 2021/10/15 13:37:05 $
|
||||
msg INBOX/22359 copying to INBOX.Fake (not really since --dry mode) ETA: vendredi 15 octobre 2021-10-15 15:31:38 +0200 CEST 57 s 38/38 msgs left
|
||||
================================================================================
|
||||
Subject: test: lei7eeCh4Fulahei
|
||||
To: <tata@localhost.info>
|
||||
Date: Mon, 11 Oct 2021 11:56:05 +0200 (CEST)
|
||||
From: gilles@localhost.info (Gilles LAMIRAL)
|
||||
================================================================================
|
||||
msg INBOX/22360 copying to INBOX.Fake (not really since --dry mode) ETA: vendredi 15 octobre 2021-10-15 15:31:38 +0200 CEST 57 s 37/38 msgs left
|
||||
================================================================================
|
||||
Subject: test: yahShee3Ohvu9mai
|
||||
To: <tata@localhost.info>
|
||||
Date: Mon, 11 Oct 2021 11:56:05 +0200 (CEST)
|
||||
From: gilles@localhost.info (Gilles LAMIRAL)
|
||||
================================================================================
|
||||
|
||||
Thanks to John Fedewa for this trick!
|
||||
|
||||
=======================================================================
|
||||
=======================================================================
|
||||
@ -1,5 +1,5 @@
|
||||
#!/bin/cat
|
||||
# $Id: FAQ.General.txt,v 1.244 2021/02/19 13:38:39 gilles Exp gilles $
|
||||
# $Id: FAQ.General.txt,v 1.246 2022/06/08 10:57:52 gilles Exp gilles $
|
||||
|
||||
=======================================================================
|
||||
General FAQ for imapsync
|
||||
@ -14,7 +14,7 @@ Questions answered in this FAQ are:
|
||||
Q. Do I need to create IMAP mailboxes at the destination platform?
|
||||
|
||||
Q. Am I forced to publish the IMAP service on the Internet since the two
|
||||
environment are not in the same location or same LAN?
|
||||
environments are not in the same location or same LAN?
|
||||
|
||||
Q. What are the most important differences between the Unix shell syntax
|
||||
and the Windows batch syntax.
|
||||
@ -31,11 +31,11 @@ Q. How can I have commercial support?
|
||||
|
||||
Q. How can I have gratis support?
|
||||
|
||||
Q. Where I can find old imapsync releases?
|
||||
Q. Where can I find old imapsync releases?
|
||||
|
||||
Q. Where I can find free open and gratis imapsync releases?
|
||||
Q. Where can I find free open and gratis imapsync releases?
|
||||
|
||||
Q. Is is legal to find imapsync gratis (or not) elsewhere?
|
||||
Q. Is it legal to find imapsync gratis (or not) elsewhere?
|
||||
|
||||
Q. How "Facts and figures" are known
|
||||
https://imapsync.lamiral.info/#NUMBERS
|
||||
@ -113,7 +113,7 @@ R. Yes!
|
||||
|
||||
=======================================================================
|
||||
Q. Am I forced to publish the IMAP service on the Internet since the two
|
||||
environment are not in the same location or same LAN?
|
||||
environments are not in the same location or same LAN?
|
||||
|
||||
R. The host where you run imapsync has to contact both servers via imap.
|
||||
You are not obliged to publish the imap service on the Internet if
|
||||
@ -220,16 +220,16 @@ I help all users as long as I have time to help them all,
|
||||
users who bought the support get my help first.
|
||||
|
||||
=======================================================================
|
||||
Q. Where I can find old imapsync releases?
|
||||
Q. Where can I find old imapsync releases?
|
||||
|
||||
R. Search the internet or ask the author.
|
||||
|
||||
=======================================================================
|
||||
Q. Where I can find free open and gratis imapsync releases?
|
||||
Q. Where can I find free open and gratis imapsync releases?
|
||||
|
||||
R. Search the internet or ask the author.
|
||||
|
||||
Q. Is is legal to find imapsync gratis (or not) elsewhere?
|
||||
Q. Is it legal to find imapsync gratis (or not) elsewhere?
|
||||
|
||||
R. Yes, the license permits it
|
||||
https://imapsync.lamiral.info/NOLIMIT
|
||||
@ -287,7 +287,7 @@ R. Add also --nofoldersizes since the default behavior is to compute
|
||||
the transfer will end (ETA).
|
||||
|
||||
R. Add also --noexpungeaftereach if you use --delete1.
|
||||
But be warn that an interrupted transfer can lose messages
|
||||
But be warned that an interrupted transfer can lose messages
|
||||
on host2 in a second run if you use a (silly) combination like:
|
||||
|
||||
imapsync ... --delete1 --noexpunge1 --noexpungeaftereach --expunge2
|
||||
@ -372,13 +372,7 @@ Use --useuid then imapsync will avoid dealing with headers.
|
||||
=======================================================================
|
||||
Q. How can I try imapsync with latest Mail::IMAPClient 3.xx perl module?
|
||||
|
||||
Three solutions at least.
|
||||
|
||||
R1 - Look at the script named "i3" in the tarball, it can be used to
|
||||
run imapsync with the included Mail-IMAPClient-3.39/ wherever you
|
||||
unpacked the imapsync tarball
|
||||
|
||||
R2 Run:
|
||||
R1 Run:
|
||||
|
||||
cpanm Mail::IMAPClient # this uses cpanminus
|
||||
|
||||
@ -391,7 +385,7 @@ R2 Run:
|
||||
perl -MCPAN -e "install Mail::IMAPClient"
|
||||
|
||||
|
||||
R3 If you want to install the Perl module locally in a directory
|
||||
R2 If you want to install the Perl module locally in a directory
|
||||
|
||||
- Download latest Mail::IMAPClient 3.xx at
|
||||
http://search.cpan.org/dist/Mail-IMAPClient/
|
||||
@ -409,7 +403,6 @@ R3 If you want to install the Perl module locally in a directory
|
||||
or if imapsync is in directory /path/
|
||||
perl -I./Mail-IMAPClient-3.39/lib /path/imapsync ...
|
||||
|
||||
|
||||
=======================================================================
|
||||
Q. How can I use imapsync with Mail::IMAPClient 2.2.9 perl module?
|
||||
|
||||
@ -577,20 +570,6 @@ In imapsync, you can achieve this by using the following options:
|
||||
--proxyauth1 \
|
||||
--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.
|
||||
Things like "X-migrated-from-foo: 20100617"
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
#!/bin/cat
|
||||
$Id: FAQ.Gmail.txt,v 1.80 2021/07/06 02:30:11 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
|
||||
https://imapsync.lamiral.info/FAQ.d/
|
||||
@ -41,17 +41,24 @@ Q. Can not open imap connection on [imap.gmail.com]
|
||||
|
||||
Q. I want to sync the Sent folder only, what is it on Gmail?
|
||||
|
||||
Q. From Gmail to Gmail, I want to keep Categories. What can I do?
|
||||
|
||||
Q. The context is a Gmail account at the source, but not Gmail at the
|
||||
destination. I want cross-duplicates, different Gmail folders/labels
|
||||
generating duplicate messages across folders on the destination,
|
||||
except for the "All Mail" folder.
|
||||
|
||||
Q. I can't sync more than 1000 messages in each Gmail folder.
|
||||
What can I do?
|
||||
|
||||
Q. What are the Gmail imap names of the folders
|
||||
"Sent" "Trash" "Drafts" "Junk" "Flagged" and "All"?
|
||||
|
||||
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
|
||||
What happens? What can I do?
|
||||
@ -90,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.
|
||||
|
||||
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:
|
||||
|
||||
1) "Access for less secure apps"
|
||||
2) "2-step verification"
|
||||
3) XOauth2 ready for groups on any OS or
|
||||
1) "App password with 2-step verification"
|
||||
|
||||
or
|
||||
|
||||
2) XOauth2 ready for groups on any OS or
|
||||
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
|
||||
|
||||
|
||||
1) "Access for less secure apps", the first way to authenticate
|
||||
to Gmail with Imapsync. This is the easiest way because
|
||||
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 it’s 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.
|
||||
1) "App password with 2-step verification" is the first way to
|
||||
authenticate to Gmail with Imapsync.
|
||||
|
||||
Go to
|
||||
https://myaccount.google.com/security
|
||||
@ -236,7 +188,7 @@ imapsync \
|
||||
--password2 gmailsecret2 \
|
||||
--gmail1 --gmail2
|
||||
|
||||
Or, replacing what does --gmail1 --gmail2 (values are from imapsync 1.970):
|
||||
Or, replacing what does --gmail1 --gmail2 (values are from imapsync 2.178):
|
||||
|
||||
imapsync \
|
||||
--host1 imap.gmail.com \
|
||||
@ -251,6 +203,7 @@ imapsync \
|
||||
--maxbytesafter 1_000_000_000 \
|
||||
--automap \
|
||||
--maxsleep 2 \
|
||||
--useheader X-Gmail-Received --useheader Message-Id \
|
||||
--synclabels \
|
||||
--resynclabels \
|
||||
--exclude "\[Gmail\]$" \
|
||||
@ -319,7 +272,7 @@ imapsync --host1 mail.oldhost.com \
|
||||
--password2 gmailsecret \
|
||||
--gmail2
|
||||
|
||||
Or, replacing what does --gmail2 (values are from imapsync 1.970):
|
||||
Or, replacing what does --gmail2 (values are from imapsync 2.178):
|
||||
(For Linux only because of the quotes)
|
||||
|
||||
imapsync --host1 mail.oldhost.com \
|
||||
@ -428,19 +381,19 @@ R. Use this example:
|
||||
imapsync \
|
||||
--user1 foo@gmail.com \
|
||||
--password1 gmailsecret \
|
||||
--host2 localhost \
|
||||
--host2 imap.example.org \
|
||||
--user2 tata \
|
||||
--password2 tatasecret \
|
||||
--gmail1
|
||||
|
||||
Or, replacing what does --gmail1 (values are from imapsync 1.970):
|
||||
Or, replacing what does --gmail1 (values are from imapsync 2.178):
|
||||
|
||||
imapsync \
|
||||
--host1 imap.gmail.com \
|
||||
--ssl1 \
|
||||
--user1 foo@gmail.com \
|
||||
--password1 gmailsecret \
|
||||
--host2 localhost \
|
||||
--host2 imap.example.org \
|
||||
--user2 tata \
|
||||
--password2 tatasecret \
|
||||
--maxbytespersecond 40_000 \
|
||||
@ -626,6 +579,73 @@ R2. In fact, by configuration from the user, it can be another folder
|
||||
name presented in IMAP. Use --automap --dry to see this mapping.
|
||||
See below
|
||||
|
||||
=======================================================================
|
||||
Q. From Gmail to Gmail, I want to keep Categories. What can I do?
|
||||
|
||||
R. First, read a document to learn how to play with Gmail Categories:
|
||||
https://support.google.com/mail/answer/3094499
|
||||
|
||||
Categories are not presented in IMAP in Gmail, so synchronizing them
|
||||
with imapsync requires some work.
|
||||
|
||||
Let's say I want to synchronize the category named "Updates".
|
||||
|
||||
1. Create a label "Updates_L", or name it as you want. You can't
|
||||
create a label named "Updates" like the category name because
|
||||
Gmail will refuse to create it, saying it's a reserved name.
|
||||
|
||||
2. Select all messages in the category "Updates".
|
||||
To do so, you can use the string "category:updates" in the
|
||||
search input text located at the top of the Gmail page.
|
||||
Notice the case is irrelevant to the search,
|
||||
"category:updates" equals "Category:Updates".
|
||||
|
||||
Gmail then announces "All 100 messages on this page are selected."
|
||||
It's not enough, I want all the "Updates" category messages.
|
||||
So, on the right of this statement, click on the text
|
||||
"Select all messages that match this search".
|
||||
Now Gmail announces "All messages in this search are selected."
|
||||
|
||||
3. Apply label "Updates_L" created at step 1 to all the selected
|
||||
messages. Gmail will present a warning and a
|
||||
"Confirm bulk action" button. Press "Ok".
|
||||
|
||||
4. Repeat steps 1 to 3 for each category you want to synchronize.
|
||||
|
||||
5. Transfer your mailbox to the new account with imapsync using the
|
||||
options --gmail1 --gmail2, the labels will be synchronized.
|
||||
|
||||
6. For each of the labels you made for categories, do the steps 7 to 9.
|
||||
As an example, I take the label "Updates_L" previously used.
|
||||
|
||||
7. Select all messages with the label "Updates_L".
|
||||
You can use the string "label:Updates_L" in the search input
|
||||
text located at the top of the Gmail page.
|
||||
Gmail then announces "All 100 messages on this page are selected."
|
||||
It's not enough, I want all the "updates_l" labeled messages.
|
||||
So, on the right of this statement, click on the text
|
||||
"Select all messages that match this search".
|
||||
Now Gmail announces "All messages in this search are selected."
|
||||
(does it sound similar to a previous §?)
|
||||
|
||||
8. Apply the category "Updates" to all the selected
|
||||
messages. Gmail will present a warning and a
|
||||
"Confirm bulk action" button. Press "Ok".
|
||||
If you search where are the categories: the categories are
|
||||
located with the labels, as if they were labels.
|
||||
|
||||
9. Delete the temporary label. That part is optional.
|
||||
|
||||
Maybe one day Google will make categories optionally available
|
||||
in IMAP, like any other label and this trick will be obsolete.
|
||||
Labels can be "Show in IMAP" at
|
||||
https://mail.google.com/mail/u/0/#settings/labels
|
||||
Categories are listed there but not possibly "Show in IMAP", not yet :-)
|
||||
|
||||
Thanks to Michael Leggett https://twitter.com/leggett for this
|
||||
trick. See the story at
|
||||
https://twitter.com/leggett/status/1484632316697739267?s=20
|
||||
|
||||
=======================================================================
|
||||
Q. The context is a Gmail account at the source, but not Gmail at the
|
||||
destination. I want cross-duplicates, different Gmail folders/labels
|
||||
@ -657,6 +677,16 @@ See https://github.com/imapsync/imapsync/pull/266
|
||||
(I refused it because well maintaining it will be very hard for me
|
||||
and I have other priorities).
|
||||
|
||||
=======================================================================
|
||||
Q. I can't sync more than 1000 messages in each Gmail folder.
|
||||
What can I do?
|
||||
|
||||
R. It's a Gmail configuration feature that someone set for your
|
||||
Gmail account. Go to
|
||||
https://mail.google.com/mail/u/0/?tab=wm#settings/fwdandpop
|
||||
and select
|
||||
"Do not limit the number of messages in an IMAP folder (default)"
|
||||
|
||||
=======================================================================
|
||||
Q. What are the Gmail imap names of the folders
|
||||
"Sent" "Trash" "Drafts" "Junk" "Flagged" and "All"?
|
||||
@ -712,30 +742,41 @@ 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,
|
||||
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
|
||||
What happens? What can I do?
|
||||
Q. Gmail does not really delete messages in folder [Gmail]/All Mail
|
||||
What happens? What can I do?
|
||||
|
||||
R. It's true and explained in Gmail documentation at
|
||||
https://support.google.com/mail/answer/7401?hl=en
|
||||
https://support.google.com/mail/answer/7401?hl=en#zippy=%2Cempty-your-trash
|
||||
|
||||
To really remove messages in folder "[Gmail]/All Mail", they have to
|
||||
be moved to the "Trash" folder and be deleted from "Trash".
|
||||
|
||||
Quoting the link above (25 december 2018, happy christmas by the way!)
|
||||
Quoting the link above (4 february 2022)
|
||||
...
|
||||
Empty your Trash
|
||||
If you don't want a message to stay in your Trash for 30 days,
|
||||
you can permanently delete it.
|
||||
* On your computer, go to Gmail.
|
||||
* On the left side of the page, scroll down,
|
||||
then click More and then Trash.
|
||||
* Check the box next to messages you want to permanently delete,
|
||||
then click Delete forever.
|
||||
|
||||
* Note: The Delete forever option is only available in the Trash.
|
||||
You won’t be able to delete items forever from the Search result view.
|
||||
If you don't want a message to stay in your trash for 30 days,
|
||||
you can permanently delete it.
|
||||
|
||||
* On your computer, go to Gmail.
|
||||
|
||||
* On the left side of the page, click More.
|
||||
|
||||
* Scroll to Trash.
|
||||
|
||||
* Check the box next to messages you want to permanently delete.
|
||||
Then click Delete forever.
|
||||
|
||||
* Tip: The "Delete forever" option is only available in the trash.
|
||||
You won’t be able to delete items permanently from the Search result view.
|
||||
To delete all messages in your trash, click Empty Trash now.
|
||||
|
||||
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
#!/bin/cat
|
||||
$Id: FAQ.ISP.txt,v 1.9 2018/05/24 11:34:30 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
|
||||
https://imapsync.lamiral.info/FAQ.d/
|
||||
@ -9,36 +9,26 @@ https://imapsync.lamiral.info/FAQ.d/FAQ.ISP.txt
|
||||
Imapsync tips for ISP. Specific issues and solutions.
|
||||
=======================================================================
|
||||
|
||||
* IMAPSync - usage scenario with ISP - by Flávio Zarur Lucarelli.
|
||||
* IMAPSync - usage scenario with ISP - by Flavio Zarur Lucarelli
|
||||
(https://www.lucanet.com.br)
|
||||
|
||||
I thought Id write a quick step by step on my attempts to learn the
|
||||
imapsync features that matter the most, so it works as we expected in
|
||||
the cenario in which we use it, which is to migrate customers from
|
||||
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
|
||||
in the scenario in which we use it, which is to migrate customers from
|
||||
their old ISP to our ISP/email hosting. Thanks to the master Gilles
|
||||
Lamiral for all his help and hard work.
|
||||
|
||||
First of all, remember to use --dry to test things first always and
|
||||
check the log file to see what would actually happen.
|
||||
|
||||
Initially, I used a method where I'd do an exact sync of source to
|
||||
destination, deleting messages which were in destination, but not
|
||||
source. I call this "Method 2", below. In this cenario, customer
|
||||
shouldn't be using the destination account yet. Then, after I switch MX,
|
||||
I'd do a final sync based on date. The big advantage of this is, you
|
||||
get an exact sync.
|
||||
|
||||
Easier, however, is method 1, where I sync based on message ID, this
|
||||
way, I can use the same syntax before and after MX change, with no
|
||||
worries. Only disadvantage, you might not get an exact sync, there
|
||||
might be some difference in terms of total emails in folders, due to
|
||||
duplicates, emails that had same message ID in source server.
|
||||
|
||||
* Method 1 - sync based on message ID, can use same syntax before and
|
||||
after MX change
|
||||
This type of copy keeps destination exactly like source (except, it
|
||||
doesn't copy duplicates), so use it ONLY before changing your MX to
|
||||
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 \
|
||||
--host2 imap.myisp.com --user2 user@domain.com --password2 pwd \
|
||||
--addheader
|
||||
--subscribeall --delete2 --delete2folders --addheader
|
||||
|
||||
Note: add header adds message ID when it doesn't exist.
|
||||
|
||||
@ -46,57 +36,142 @@ This syntax can also be used to sync different source accounts to one
|
||||
same destination account, simply execute it as many times as desired,
|
||||
switching source user (user1).
|
||||
|
||||
* Method 2 - exact sync source do destination, then sync based on date
|
||||
after MX change
|
||||
If you have a list of accounts to sync, use this:
|
||||
https://imapsync.lamiral.info/examples/sync_loop_unix.sh
|
||||
|
||||
My first goal is to have an exact sync of an account from
|
||||
current/source host to the new/destination host and be able to sync
|
||||
several times. The --useuid parameter is very important for that
|
||||
purpose. This is what I use:
|
||||
Adjust the parameters according to the original syntax which I
|
||||
explained above.
|
||||
|
||||
imapsync --host1 imap.gmail.com --user1 user@domain.com --password1 pwd --ssl1 \
|
||||
--host2 imap.myisp.com --user2 user@domain.com --password2 pwd --ssl2 \
|
||||
--useuid --delete2 --delete2folders
|
||||
The Sync loop Unix script now outputs an error log, which can be
|
||||
useful.
|
||||
|
||||
This makes it so imap.myisp.com (destination) is an exact copy of the
|
||||
account at imap.gmail.com (source). This is not a problem, since the
|
||||
user is not using the new host yet. ]You can check Imapsync log files
|
||||
and surely you will see the final difference should be 0. Check also
|
||||
for any possible errors in the log (search for "error").
|
||||
We also have shell scripts to check for errors, such as:
|
||||
|
||||
The second goal is to lower the TTL (ex: 5 min) for the host
|
||||
associated with the MX record, in the domain's DNS server. Let's say
|
||||
customer has a host mail which his MX points to, with a high TTL
|
||||
(usually 1 hour). Lower it to 5 min so that, when you change the MX,
|
||||
it propagates faster.
|
||||
- Accounts over quota
|
||||
|
||||
grep -R "EXIT_OVERQUOTA" *.txt
|
||||
|
||||
- Login error
|
||||
|
||||
grep -R "Error login" *.txt
|
||||
|
||||
- Check just critical errors
|
||||
|
||||
egrep 'EXIT_AUTHENTICATION_FAILURE|EXIT_CONNECTION_FAILURE|EXIT_TLS_FAILURE|EXIT_OVERQUOTA' *.txt
|
||||
|
||||
- Check all sorts of errors (can be too much info)
|
||||
|
||||
grep 'Exiting with return value' *.txt | grep -v 'Exiting with return value 0'
|
||||
|
||||
Also, I like to check log file sizes and compare account sizes on
|
||||
source and destination.
|
||||
|
||||
--
|
||||
|
||||
Back to it.
|
||||
|
||||
After you do a full sync, check that everything is consistant and
|
||||
let's proceed to the final stage.
|
||||
|
||||
Lower the TTL (ex: 5 min) for the host associated with the MX record,
|
||||
in the domain's DNS server. Let's say customer has a host mail which
|
||||
his MX points to, with a high TTL (usually 1 hour). Lower it to 5 min
|
||||
so that, when you change the MX, it propagates faster.
|
||||
|
||||
When comes time to switch over to the new host, do a final sync with
|
||||
above syntax, before changing the MX. Then, change the MX and tell
|
||||
your users to start using exclusively the new host.
|
||||
|
||||
A few hours after the MX change, we will run Imapsync again. We have
|
||||
to start preserving emails users move or flag in the new host, which
|
||||
to start preserving emails users move or flags in the new host, which
|
||||
they started using, so we can't do an exact sync anymore.
|
||||
|
||||
The best solution for me was to Sync any new emails (maxage:1) from
|
||||
source (that could arrive in source even after MX change, due to
|
||||
cache) and delete such emails from source server. This way, customer's
|
||||
mailbox is still intact on the source server, except new emails, which
|
||||
get synced to new server and deleted from source.
|
||||
One simple solution is the same syntax as before, but without
|
||||
--delete2 and --delete2folders.
|
||||
|
||||
imapsync --host1 imap.gmail.com --user1 user@domain.com --password1 pwd --ssl1 \
|
||||
--host2 imap.myisp.com --user2 user@domain.com --password2 pwd --ssl2 \
|
||||
--folder INBOX --useuid --noexpungeaftereach --skipemptyfolders --maxage 1 --delete1
|
||||
So:
|
||||
|
||||
I personally prefer to keep a copy of users box intact in source, but
|
||||
if that's not an issue for you, you can remove --folder INBOX and even
|
||||
--maxage, but then, all emails in source will be deleted. You can use
|
||||
--maxage 1 with --delete1, however, for all folder (without specifying
|
||||
--folder INBOX), so only any new email that arrives at source is
|
||||
copied to destination and deleted from source.
|
||||
imapsync --host1 imap.myisp.com --user1 user@domain.com --password1 pwd \
|
||||
--host2 imap.myisp.com --user2 user@domain.com --password2 pwd \
|
||||
--subscribeall --addheader
|
||||
|
||||
My next goal was to automate the process, so I followed this advice:
|
||||
http://imapsync.lamiral.info/examples/sync_loop_unix.sh
|
||||
The only issue with that syntax is, it would simply copy what is in
|
||||
source that is not in destination. For example, user might have moved
|
||||
emails to some sub-folder in host2. However, if you do this once, one
|
||||
hour after MX change, for example, it's comprehensible that
|
||||
destination is not exactly as the source anymore.
|
||||
|
||||
What we've been doing, especially in the case of huge migrations,
|
||||
since our destination server auto-archives emails in sub-folders and
|
||||
changes the hierarchy, is syncing just the last day or few days of
|
||||
email and just of INBOX.
|
||||
|
||||
So we do the sync initially explained in this doc, before the MX
|
||||
change. Then we auto-archive accounts and after auto-archiving, we
|
||||
change MX and do a final sync using maxage.
|
||||
|
||||
Something like this:
|
||||
|
||||
imapsync --host1 imap.myisp.com --user1 user@domain.com --password1 pwd \
|
||||
--host2 imap.myisp.com --user2 user@domain.com --password2 pwd \
|
||||
--subscribeall --addheader --maxage 1
|
||||
|
||||
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.
|
||||
|
||||
Another alternative for syncing after the MX change, which Lamiral
|
||||
suggests, involves deleting emails from source from the last day. I
|
||||
prefer the method explained above. Anyway, here is this other
|
||||
scenario...
|
||||
|
||||
Something like this:
|
||||
|
||||
imapsync --host1 imap.gmail.com --user1 user@domain.com --password1 pwd --ssl1 \
|
||||
--host2 imap.myisp.com --user2 user@domain.com --password2 pwd --ssl2 \
|
||||
--folder INBOX --noexpungeaftereach --skipemptyfolders --maxage 1 --delete1
|
||||
|
||||
This way, any new email that arrived at source is copied to
|
||||
destination and deleted from source. Without the --delete1 option,
|
||||
messages moved on host2 by the user are coming back from host1, and
|
||||
flags changed on host2 are also reset to what they are on host1.
|
||||
|
||||
However, as I wrote before, if you run it just once without --delete1,
|
||||
perhaps not that bad.
|
||||
|
||||
*** Other tips for ISPs
|
||||
|
||||
1) Sync entire account into 1 folder of another account
|
||||
|
||||
imapsync --host1 xxx --user1 user1@domain.com --password1 secret1 --ssl1 \
|
||||
--host2 yyy --user2 user2@domain.com --password2 secret2 --ssl2 \
|
||||
--addheader --subfolder2 "otheraccountfolder" --delete2 --delete2foldersonly /otheraccountfolder/
|
||||
|
||||
Above, user must not be using such destination folder in destination
|
||||
account until you finish syncing.
|
||||
|
||||
I've used it without --delete2 and --delete2foldersonly, as it caused
|
||||
problems for us, of that folder being unsubscribed in destination...
|
||||
Don't think it should be a problem as this copy is done usually
|
||||
without using really using the folder in host2 until you instruct him
|
||||
to.
|
||||
|
||||
Another nice scenario, sync just one folder hierarchy of an account to
|
||||
another folder of another account.
|
||||
|
||||
--subfolder1 test --subfolder2 test2 --delete2 --delete2foldersonly /test2/ --addheader
|
||||
|
||||
Also, very useful is to be move emails older than one year, from an
|
||||
account to another one, to offload the source account.
|
||||
|
||||
imapsync ... --subfolder2 "account_user1" --addheader --minage 365 --delete1
|
||||
|
||||
So everything older than 365 days is deleted from source. You can even
|
||||
specify same account for source and recipient, if you want to "delete
|
||||
older than x days" for the account itself, without moving old emails
|
||||
to another account.
|
||||
|
||||
2) Translate folder names
|
||||
|
||||
I also ended up requiring a regex to translate folder names. On the
|
||||
old server (Gmail), Sent items were in a folder called [Gmail]/E-mails
|
||||
@ -110,17 +185,54 @@ So this was added:
|
||||
--regextrans2 "s,Lixeira,Trash," \
|
||||
--regextrans2 "s,Rascunhos,Drafts,"
|
||||
|
||||
*** Other cenarios
|
||||
Option --automap is also good to do most of the translate job.
|
||||
|
||||
- Sync entire account into 1 folder of another account
|
||||
3) Folders to exclude, to speed up syncs, etc.
|
||||
|
||||
imapsync --host1 xxx --user1 user1@domain.com --password1 secret1 --ssl1 \
|
||||
--host2 yyy --user2 user2@domain.com --password2 secret2 --ssl2 \
|
||||
--useuid --subfolder2 otheraccountfolder --delete2 --delete2foldersonly /otheraccountfolder/
|
||||
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.
|
||||
|
||||
Use the account itself as source and destination and use:
|
||||
|
||||
imapsync ... --minage 365 --delete1
|
||||
|
||||
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.
|
||||
|
||||
Above is based on message UID, advantage of no dupes, however, user
|
||||
must not be using such destination folder in destination account until
|
||||
you finish syncing.
|
||||
|
||||
=======================================================================
|
||||
=======================================================================
|
||||
|
||||
34
FAQ.d/FAQ.James.txt
Normal file
34
FAQ.d/FAQ.James.txt
Normal file
@ -0,0 +1,34 @@
|
||||
#!/bin/cat
|
||||
$Id: FAQ.James.txt,v 1.2 2022/04/06 10:28:16 gilles Exp gilles $
|
||||
|
||||
This documentation is also available online at
|
||||
https://imapsync.lamiral.info/FAQ.d/
|
||||
https://imapsync.lamiral.info/FAQ.d/FAQ.James.txt
|
||||
|
||||
|
||||
=======================================================================
|
||||
Imapsync tips for James. Specific issues and solutions.
|
||||
=======================================================================
|
||||
|
||||
James: JAVA Apache Mail Enterprise Server
|
||||
|
||||
Questions answered in this FAQ are:
|
||||
|
||||
Q. How to migrate to Dovecot with an admin/MasterUser account?
|
||||
|
||||
|
||||
=======================================================================
|
||||
Q. How to migrate to James with an admin/MasterUser account?
|
||||
|
||||
R. James supports impersonation and is set up via the administratoId key
|
||||
field stored in <install>/conf/usersrepository.conf
|
||||
|
||||
There are multiple user repository definitions, each using
|
||||
a different key:value pair to define administratorId
|
||||
|
||||
https://james.apache.org/server/config-users.html
|
||||
|
||||
(Thanks to From Rob Davis for this Q/R)
|
||||
|
||||
=======================================================================
|
||||
=======================================================================
|
||||
@ -1,5 +1,5 @@
|
||||
#!/bin/cat
|
||||
$Id: FAQ.Kerio.txt,v 1.2 2019/11/15 11:33:14 gilles Exp gilles $
|
||||
$Id: FAQ.Kerio.txt,v 1.3 2022/04/05 13:48:52 gilles Exp gilles $
|
||||
|
||||
This document is also available online at
|
||||
https://imapsync.lamiral.info/FAQ.d/
|
||||
@ -17,7 +17,7 @@ Q. How to migrate from Kerio Connect to XXX
|
||||
|
||||
R. No special options required.
|
||||
See also:
|
||||
http://www.linux-france.org/prj/imapsync_list/msg01756.html
|
||||
http://linux-france.tk/prj/imapsync_list/msg01756.html
|
||||
http://web.archive.org/web/20140224041102/https://www.safetynet-it.com/it-support/mac-kerio-server-to-microsoft-exchange-2010-migration-1/
|
||||
http://web.archive.org/web/20121125074756/http://www.safetynet-it.com/it-support/mac-kerio-server-to-microsoft-exchange-2010-migration-2/
|
||||
|
||||
|
||||
41
FAQ.d/FAQ.Logfile.txt
Normal file
41
FAQ.d/FAQ.Logfile.txt
Normal file
@ -0,0 +1,41 @@
|
||||
$Id: FAQ.Logfile.txt,v 1.2 2021/07/23 12:27:31 gilles Exp gilles $
|
||||
|
||||
This documentation is also available online at
|
||||
https://imapsync.lamiral.info/FAQ.d/
|
||||
https://imapsync.lamiral.info/FAQ.d/FAQ.Logfile.txt
|
||||
|
||||
|
||||
======================================================================
|
||||
Imapsync log file
|
||||
======================================================================
|
||||
|
||||
Questions answered in this FAQ are:
|
||||
|
||||
Q. I have these errors "could not be fetched", like this one:
|
||||
Err 1/1: - msg INBOX/17219 {0} S[36592] F[] I[16-Jul-2021 12:04:15 +0000] could not be fetched
|
||||
What can I do about it?
|
||||
|
||||
Now the questions again with their answers.
|
||||
|
||||
======================================================================
|
||||
Q. I have these errors "could not be fetched", like this one:
|
||||
Err 1/1: - msg INBOX/17219 {0} S[36592] F[] I[16-Jul-2021 12:04:15 +0000] could not be fetched
|
||||
What can I do about it?
|
||||
|
||||
|
||||
R. Explanation of a log line:
|
||||
|
||||
- msg INBOX/17219 {0} S[36592] F[] I[16-Jul-2021 12:04:15 +0000]
|
||||
|
||||
INBOX = folder
|
||||
17219 = UID
|
||||
{0} = got 0 bytes
|
||||
S[36592] = should have got 36592 bytes (RFC size announced)
|
||||
F[] = Flags, none here
|
||||
I[16-Jul-2021 12:04:15 +0000] = Internal date
|
||||
|
||||
Usually this error doesn't appear on next runs, at least not for the
|
||||
same messages. So rerun imapsync until all messages are synced.
|
||||
|
||||
======================================================================
|
||||
======================================================================
|
||||
@ -1,5 +1,5 @@
|
||||
#!/bin/cat
|
||||
$Id: FAQ.Massive.txt,v 1.31 2020/10/15 01:53:52 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
|
||||
https://imapsync.lamiral.info/FAQ.d/
|
||||
@ -14,7 +14,7 @@ Questions answered here are:
|
||||
|
||||
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.
|
||||
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. 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".
|
||||
Is this a potential problem when trying to sync multiple
|
||||
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?
|
||||
|
||||
R1. First you have to consider several periods. There is the global
|
||||
period, from when the migration process is decided to the final end
|
||||
R1. First, you have to consider several periods. There is the global
|
||||
period, from when the migration process is decided to the end,
|
||||
where all mailboxes are migrated. This global period can be divided
|
||||
into three smaller periods.
|
||||
|
||||
The first period is the analyse period: you play with the tools
|
||||
The first period is the analysis period: you play with the tools
|
||||
available, you estimate the volume to be transferred, the number of
|
||||
accounts, you measure how long it takes for one account under
|
||||
your context.
|
||||
|
||||
The second period is the presync period. The users are still using
|
||||
The 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, as they are, to the new accounts.
|
||||
With tons of gigabytes to transfer, this period may be the longest one.
|
||||
@ -49,31 +50,31 @@ R1. First you have to consider several periods. There is the global
|
||||
until the round is finished.
|
||||
|
||||
The last period is the final sync period where only the last
|
||||
changes of the mailboxes need to be synced in order to switch
|
||||
mailboxes' changes need to be synced before switching
|
||||
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
|
||||
link bandwidth.
|
||||
It's a mean, measured upon various different syncs, coming from
|
||||
the online service /X where the network card flow rate is 100 Mbps
|
||||
and the provider bandwidth is also 100 Mbps. Max seen is a transfer
|
||||
at 21 Mbps.
|
||||
It's a mean, measured upon various syncs, coming from
|
||||
the online service /X where the network card flow rate is 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).
|
||||
|
||||
At 340 Kbytes/s,
|
||||
1 TB to transfer and one sync at a time will end in 35 days (1024^3/340/3600/24).
|
||||
At 10 transfers at a time, 1 TB will take 3.5 days.
|
||||
At 100 transfers at a time, 1 TB will take 8 hours.
|
||||
Double the time because the best scenario never happens.
|
||||
Triple the time because, well, real world is like that.
|
||||
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
|
||||
on the mailboxes already migrated to estimate the global end.
|
||||
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.
|
||||
|
||||
Following the same idea but using matematical garbage,
|
||||
Following the same idea but using mathematical garbage,
|
||||
the ETA can be estimated like this:
|
||||
t_0 = time of global start (the start of the first presync)
|
||||
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.
|
||||
|
||||
=======================================================================
|
||||
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
|
||||
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 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;
|
||||
etc.
|
||||
|
||||
Most of the times, the first column (host001_1, host002_1 ...) will
|
||||
contains the same value, the value of --host1 parameter. Same
|
||||
Most of the time, the first column (host001_1, host002_1 ...) will
|
||||
contain the same value, the value of --host1 parameter. Same
|
||||
thing for the third column (host001_2, host002_2).
|
||||
|
||||
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
|
||||
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
|
||||
|
||||
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.
|
||||
|
||||
Since all mailboxes are functionnaly independent, they can be processed
|
||||
independently, here comes the parallelism, ie, lunching several imapsync
|
||||
Since all mailboxes are functionally independent, they can be processed
|
||||
independently, here comes the parallelism, ie, launching several imapsync
|
||||
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
|
||||
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
|
||||
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),
|
||||
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)
|
||||
|
||||
Another excellent tool to measure the network trafic is iftop.
|
||||
The following command will monitor imap and imaps connexions
|
||||
on interfce eth0, only them, and sum them up:
|
||||
Another excellent tool to measure the network traffic is iftop.
|
||||
The following command will monitor imap and imaps connections
|
||||
on interface eth0, only them, and sum them up:
|
||||
|
||||
iftop -i eth0 -f 'port imap or port imaps' -B # Linux
|
||||
iftop -i em0 -f 'port imap or port imaps' -B # FreeBSD
|
||||
|
||||
During iftop, press the h to see the display commands available,
|
||||
every single feature is useful! Press h again and try each one.
|
||||
My preferred display combination is by typing
|
||||
My preferred display combination is by typing the keys
|
||||
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,
|
||||
get the overall network rate with the classical
|
||||
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
|
||||
task manager (Ctrl-Shift-Esc), there is a Network tab in it.
|
||||
@ -224,7 +227,7 @@ Here comes some measurements.
|
||||
transfer rate increase.
|
||||
|
||||
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.
|
||||
|
||||
@ -234,15 +237,15 @@ Q. How to determine where is the bottleneck in an imapsync process?
|
||||
|
||||
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:
|
||||
|
||||
1) run a sync from host1 to host1, with a host1 test account as destination.
|
||||
This way, only host1+link1 are tested, host2 is not directly concerned.
|
||||
1) run a sync from host1 to host1, with a host1 test account as the destination.
|
||||
This way, only host1 and link1 are tested, host2 is not directly concerned.
|
||||
If performances increase a lot then host2/link2 is the bottleneck.
|
||||
|
||||
2) run a sync from host2 to host2, with a host2 test account as destination.
|
||||
This way, only host2+link2 are tested, host1 is not concerned.
|
||||
2) run a sync from host2 to host2, with a host2 test account as the destination.
|
||||
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 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
|
||||
|
||||
On any process involving several mechanisms, among all elements taking
|
||||
part on the process, there is always a bottleneck. No one knows in
|
||||
In any process involving several mechanisms, among all elements taking
|
||||
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
|
||||
determined, by measurements, not by guesses. Once this first
|
||||
bottleneck is known and overcome then the next bottleneck has to be
|
||||
determined and overcome too, if needed. Repeat the process of looking
|
||||
for the next bottleneck and its elimination until you estimate the
|
||||
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:
|
||||
|
||||
- Throttles.
|
||||
IMAP servers have artificial limits.
|
||||
For example Gmail, Office365, Exchange have throttle limits.
|
||||
For example, Gmail, Office365, and Exchange have throttle limits.
|
||||
|
||||
- Bandwidth.
|
||||
Usually available bandwidth is NOT a bottleneck.
|
||||
Meanwhile, it can be a bottleneck on small Internet connexions.
|
||||
Usually, the available bandwidth is not a bottleneck.
|
||||
Meanwhile, it can be a bottleneck on small Internet connections.
|
||||
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 are a classical bottleneck, almost always forgotten.
|
||||
- I/O, aka "Input/Output" on the disks of the imap servers.
|
||||
The I/O on disks are a classical bottleneck, almost always forgotten.
|
||||
Unlike CPU and RAM, Input/Output performances don't improve
|
||||
very much as time goes on so it's often a bottleneck.
|
||||
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
|
||||
--usecache or --useuid is used or with very big messages.
|
||||
|
||||
|
||||
- RAM memory.
|
||||
- RAM.
|
||||
On all sides, monitor that your systems don't swap its
|
||||
running processes on disk, because swapping running processes
|
||||
on disks decreases performance by a factor of 20, at least.
|
||||
@ -291,9 +294,8 @@ Possible bottlenecks:
|
||||
|
||||
- CPU.
|
||||
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
|
||||
with one of the imap servers.
|
||||
Most often CPU is not the real bottleneck, I/O are.
|
||||
CPU can be a problem with imapsync but it can also be a problem
|
||||
with one or both of the imap servers.
|
||||
|
||||
Other possible bottlenecks:
|
||||
- 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!
|
||||
|
||||
Q. Any performance issue?
|
||||
Q. Any performance issues?
|
||||
|
||||
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
|
||||
and the one running imapsync.
|
||||
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".
|
||||
Is this a potential problem when trying to sync multiple
|
||||
IMAP account in parallel?
|
||||
@ -346,7 +348,7 @@ by yourself.
|
||||
|
||||
This file can help you to manage multiple runs by sending signals
|
||||
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.
|
||||
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
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
#!/bin/cat
|
||||
$Id: FAQ.Messages_Too_Big.txt,v 1.5 2021/06/22 15:31:39 gilles Exp gilles $
|
||||
$Id: FAQ.Messages_Too_Big.txt,v 1.8 2021/12/16 11:44:26 gilles Exp gilles $
|
||||
|
||||
This document is also available online at
|
||||
https://imapsync.lamiral.info/FAQ.d/
|
||||
@ -11,76 +11,128 @@ https://imapsync.lamiral.info/FAQ.d/FAQ.Messages_Too_Big.txt
|
||||
|
||||
Questions answered in this FAQ are:
|
||||
|
||||
Q. What does imapsync with big messages?
|
||||
Q. Imapsync reports errors like these ones:
|
||||
"could not append...Maximum size of appendable message has been exceeded"
|
||||
"could not append...maximum message size exceeded"
|
||||
"The most frequent error is ERR_APPEND_SIZE"
|
||||
What does it mean?
|
||||
|
||||
Q. Does imapsync limits big messages?
|
||||
|
||||
Q. What are the well known servers messages size limits?
|
||||
|
||||
Q. What can I do to transfer messages bigger than what allows the
|
||||
imap destination server?
|
||||
|
||||
Q. The solution --truncmess xxxx doesn't work with Gmail.
|
||||
What can I do?
|
||||
|
||||
|
||||
Now the questions again with their answers.
|
||||
|
||||
=======================================================================
|
||||
Q. What does imapsync with big messages?
|
||||
Q. Imapsync reports errors like these ones:
|
||||
"could not append...Maximum size of appendable message has been exceeded"
|
||||
"could not append...maximum message size exceeded"
|
||||
"The most frequent error is ERR_APPEND_SIZE"
|
||||
What does it mean?
|
||||
|
||||
R. It means the message couldn't be transferred to the destination
|
||||
account because it is too big, imapsync tries to APPEND it to the
|
||||
server (that's IMAP jargon) but the server refuses it by saying
|
||||
either "NO. Maximum size of appendable message has been exceeded"
|
||||
or "NO. maximum message size exceeded".
|
||||
|
||||
|
||||
=======================================================================
|
||||
Q. Does imapsync limits big messages?
|
||||
|
||||
R. No. Imapsync synchronizes messages no matter their sizes.
|
||||
|
||||
R. By default, imapsync checks if the host2 imap server announces a
|
||||
message size limit with "APPENDLIMIT=xxxx" in its CAPABILITY response.
|
||||
Then imapsync takes this value to set automatically the --maxsize
|
||||
option, unless --maxsize is already set on the command line and has a
|
||||
smaller value than the APPENDLIMIT value.
|
||||
|
||||
If the host2 imap server doesn't announce any message size limit then
|
||||
imapsync syncs all messages no matter their sizes.
|
||||
|
||||
When a message is copied to the destination server, the destination
|
||||
server accepts it or not but it does it as a whole, it takes the full
|
||||
message or nothing. Nothing triggers an error in imapsync.
|
||||
server accepts it or not. It does it as a whole, it takes the full
|
||||
message or nothing. The destination server can refuse a too big
|
||||
message, it then triggers an APPEND error message in imapsync.
|
||||
|
||||
* Gmail announces APPENDLIMIT=35651584 (June 2021).
|
||||
* Office365 announces nothing.
|
||||
* Dovecot announces nothing.
|
||||
* Usually imap servers announce nothing.
|
||||
So far, December 2021, the biggest message transferred by imapsync on
|
||||
the online /X service is 1.51 GiB. Who can top that?
|
||||
|
||||
|
||||
=======================================================================
|
||||
Q. What are the well known servers messages size limits?
|
||||
|
||||
* Gmail message size limit is 35 MB.
|
||||
Gmail announces APPENDLIMIT=35651584 (June 2021).
|
||||
|
||||
* Office365 message size limit is 45 MB by default
|
||||
and it can be upped by configuration. See
|
||||
https://imapsync.lamiral.info/FAQ.d/FAQ.Office365.txt
|
||||
Q. I see "NO Maximum size of appendable message has been exceeded"
|
||||
|
||||
* Exchange message size limit is 10 MB by default
|
||||
and it can be upped by configuration. See
|
||||
https://imapsync.lamiral.info/FAQ.d/FAQ.Exchange.txt
|
||||
Q. I see "NO Maximum size of appendable message has been exceeded"
|
||||
|
||||
* Dovecot message size limit is variable. It is defined
|
||||
by the sysadmin. For example, quota_max_mail_size = 100M
|
||||
https://doc.dovecot.org/configuration_manual/quota/
|
||||
|
||||
* Usually, any IMAP server has a message size limit, defined
|
||||
by the sysadmin. You discover it sooner or later
|
||||
|
||||
=======================================================================
|
||||
Q. What can I do to transfer messages bigger than what allows the
|
||||
imap destination server?
|
||||
|
||||
R1. A solution is to truncate the message to the maximum size allowed
|
||||
before copying it to host2. That's a little dirty but it's ok if you
|
||||
prefer having a truncated message than no message at all. The
|
||||
attachments after the truncation won't be available but everything
|
||||
before should be ok. It may also depend on the software tool reading
|
||||
the email message.
|
||||
R1. A solution is ask imapsync to truncate the message to the maximum
|
||||
size allowed before copying it to host2 by using the option
|
||||
--truncmess.
|
||||
|
||||
For example, Gmail currently limits messages to 35651584 bytes,
|
||||
aka 34 MiB (June 2021),
|
||||
That's a little dirty but it's ok if you prefer having a truncated
|
||||
message than no message at all. The attachments after the truncation
|
||||
won't be available but everything before should be ok. It may also
|
||||
depend on the software tool reading the email message.
|
||||
|
||||
Starting with imapsync release 1.938 option --truncmess xxxx truncates
|
||||
messages bigger than the given size xxxx, size given in bytes.
|
||||
|
||||
imapsync --truncmess 35651584 --appendlimit 1000000000000
|
||||
To truncate messages to 10 MB, use:
|
||||
|
||||
The --appendlimit option is only needed imap servers that offer the
|
||||
APPENDLIMIT capability, for example, Gmail. Using it doesn't hurt
|
||||
anyway.
|
||||
|
||||
Prior to imapsync release 1.938, instead of --truncmess:
|
||||
|
||||
On Linux, use:
|
||||
|
||||
imapsync ... --pipemess 'perl -0ne "print substr \$_,0,35651584" '
|
||||
|
||||
On windows, use (I'm not sure of, not tested yet):
|
||||
|
||||
imapsync ... --pipemess "perl -0ne 'print substr $_,0,35651584' "
|
||||
imapsync ... --truncmess 10_000_000
|
||||
|
||||
|
||||
R2. A not-so-dirty solution would be to transform the big messages,
|
||||
replace the attachments with links to the attachments stored elsewhere.
|
||||
Well, it's not done and it's too much complicated compared to a simpler
|
||||
solution which is to allow bigger messages on the destination account.
|
||||
replace the attachments with links to the attachments stored
|
||||
elsewhere. Well, it's not done and it's too much complicated compared
|
||||
to a simpler solution which is to allow bigger messages on the
|
||||
destination account.
|
||||
|
||||
As time goes on, disk space is cheaper and cheaper. Don't make the
|
||||
new user account, the destination account, worst than his previous,
|
||||
buy disks. Monitor and rule your resources, not the users.
|
||||
new user account, the destination account, worse than their previous
|
||||
account: buy disks.
|
||||
|
||||
Monitor and rule your hardware resources, serve your users,
|
||||
not the contrary.
|
||||
|
||||
|
||||
=======================================================================
|
||||
Q. The solution --truncmess xxxx doesn't work with Gmail.
|
||||
What can I do?
|
||||
|
||||
R. Gmail currently limits messages size up to 35651584 bytes, aka 34
|
||||
MiB (June 2021) but imapsync knows it so it avoid to transfer these
|
||||
big messages. Solution, use:
|
||||
|
||||
imapsync ... --truncmess 35_651_584 --appendlimit 1_000_000_000_000
|
||||
|
||||
Explanation. By default, imapsync checks if the host2 imap server
|
||||
announces a message size limit with "APPENDLIMIT=xxxx" in its
|
||||
CAPABILITY response, like Gmail does. Imapsync takes this APPENDLIMIT
|
||||
value to set automatically the --maxsize option, unless --maxsize is
|
||||
already set on the command line and has a smaller value than the
|
||||
APPENDLIMIT value.
|
||||
|
||||
1_000_000_000_000 is one TB, I guess you don't have any message of
|
||||
that size yet.
|
||||
|
||||
=======================================================================
|
||||
=======================================================================
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
#!/bin/cat
|
||||
$Id: FAQ.Migration_Plan.txt,v 1.7 2021/03/02 22:31:36 gilles Exp gilles $
|
||||
$Id: FAQ.Migration_Plan.txt,v 1.9 2021/12/19 10:00:32 gilles Exp gilles $
|
||||
|
||||
This document is also available online at
|
||||
https://imapsync.lamiral.info/FAQ.d/
|
||||
@ -8,23 +8,23 @@ https://imapsync.lamiral.info/FAQ.d/FAQ.Migration_Plan.txt
|
||||
|
||||
=====================================================================
|
||||
Imapsync. Suggestions for a good, low impact on users,
|
||||
well executed email migration plan.
|
||||
well-executed email migration plan.
|
||||
=====================================================================
|
||||
|
||||
There is two main different scenarios depending on the response to the
|
||||
following question:
|
||||
There are two main different scenarios. Choosing which one fits your
|
||||
context depends on the response to the following question:
|
||||
|
||||
Will the imap software tools used by the users use the exact same
|
||||
Will the imap software tools used by the users use the same
|
||||
credentials triplet for both imap servers, the old server host1 and
|
||||
the new server host2?
|
||||
|
||||
The credentials triplet is hostname/username/password.
|
||||
|
||||
If the answer is yes, ie, clients email tools use the exact same
|
||||
triplet credentials, then it is possible to perform a migration
|
||||
without changing anything on the users side. This may be a very time
|
||||
saving option. But it's a rare condition so I'll describe this
|
||||
scenario later in this document.
|
||||
If the answer is yes, ie, clients' email tools use the same triplet
|
||||
credentials, then it is possible to perform a migration without
|
||||
changing anything on the users' side. This may be a very time-saving
|
||||
option. But it's a rare condition so I'll describe this scenario later
|
||||
in this document.
|
||||
|
||||
|
||||
=====================================================================
|
||||
@ -40,104 +40,124 @@ Classical scenario, credentials triplets are different on both sides
|
||||
users are already playing with the new mailboxes on host2, don't
|
||||
follow this scenario.
|
||||
|
||||
* Presync all the mailboxes from the old server host1 to the new
|
||||
server host2. If the imap server names are going to change their IP
|
||||
resolution then don't use those names, use names that will always
|
||||
* Pre-synchronize all the mailboxes from the old server host1 to the
|
||||
new server host2. If an imap server name is going to change its IP
|
||||
address, then don't use this name, use a name that will always
|
||||
match the same imap servers, or use their IP addresses.
|
||||
|
||||
Presyncs can usefully be done with --delete2 in order to get an
|
||||
exact sync. But never use the option --delete2 once users have
|
||||
started to play with their new account on host2, their play will be
|
||||
lost on the next presync, or when the MX is changed, since INBOX
|
||||
will start to receive new messages that are not on host1.
|
||||
Pre-synchronizations can usefully be done with --delete2 to get an
|
||||
exact synchronization. But never use the option --delete2 once the
|
||||
users have started to play with their new account on host2, their
|
||||
play will be lost on the next synchronization. Don't use --delete2
|
||||
either when the MX is changed since INBOX will start to receive new
|
||||
messages that are not on host1 and then removing them is not a good
|
||||
idea.
|
||||
|
||||
* Decide a migration day/hour.
|
||||
|
||||
* Repeat the presyncs (with the --delete2 options) daily until the
|
||||
migration hour. This repeated process will show how long should
|
||||
take the last sync.
|
||||
* Repeat the pre-synchronizations (with the --delete2 options) daily
|
||||
until the migration hour. This repeated process will show how long
|
||||
should take the last synchronization.
|
||||
|
||||
* At the migration hour, cut access to the users to the old server
|
||||
host1, if you can. Or tell them to not use it anymore.
|
||||
|
||||
* Do a last presync exactly like previous ones.
|
||||
* Do the last pre-synchronization exactly like the previous ones.
|
||||
|
||||
* Change the MX, the new messages should start to arrive in the new
|
||||
imap server host2.
|
||||
|
||||
* Wait the TTL value, aka 5 minutes. Now, new messages should
|
||||
not arrive to the old server host1.
|
||||
* Wait for the TTL value, aka 5 minutes. Now, new messages should
|
||||
not arrive at the old server host1.
|
||||
|
||||
* Tell the users that the old imap server host1 is down and no
|
||||
longer available.
|
||||
|
||||
* Do a postsync. A postsync is a sync with the following options
|
||||
--maxage 1 --delete1 --folder INBOX
|
||||
* Do a post-synchronization. A post-synchronization is a run with the
|
||||
following options: --folder INBOX --delete1 --maxage 1
|
||||
|
||||
This postsync will move the last new messages arrived on host1 to
|
||||
host2 during the TTL interval and delete them on host1. Do not use
|
||||
the option --delete2 in a postsync.
|
||||
This post-synchronization will copy the messages arrived in the
|
||||
last day (--maxage 1) in the folder INBOX (--folder INBOX) on the
|
||||
source account, to the destination account. It will also delete
|
||||
them on host1 (--delete1). It's --delete1, it's not --delete2.
|
||||
Remember, do not use the option --delete2 in a post
|
||||
synchronization, as users won't appreciate seeing their newly
|
||||
arrived messages disappear because of you.
|
||||
|
||||
* Give access to new accounts to the users with their new credential
|
||||
triplet hostname/username/password. If the way to contact users is
|
||||
email then you should give this long before shutting down the old
|
||||
server.
|
||||
by email then you should give them the new credentials long before
|
||||
shutting down the old server.
|
||||
|
||||
* Migration done.
|
||||
|
||||
* In case there are still messages arriving at the old imap server
|
||||
host1, you can perform more postsyncs, ie, syncs every day
|
||||
with the options:
|
||||
--maxage 1 --delete1 --folder INBOX
|
||||
host1, you can perform more post-synchronizations, ie, runs every
|
||||
day with the options: --maxage 1 --delete1 --folder INBOX
|
||||
|
||||
* Increase the TTL of the MX back to its previous value, usually
|
||||
24 hours, 86400 seconds. You don't want all your email system
|
||||
to break down completely when your DNS are not available
|
||||
temporarily, keeping dns values in cache for a 24h is a savvy
|
||||
practice.
|
||||
|
||||
=====================================================================
|
||||
Lucky scenario, credentials triplets are the same on both sides
|
||||
=====================================================================
|
||||
|
||||
* Decrease the TTL of the MX, as well as the imap hostname resolution,
|
||||
to 5 minutes (or even less). See FAQ.TTL.txt to understand why.
|
||||
to 5 minutes (or even less). The document FAQ.TTL.txt explains why.
|
||||
|
||||
* Create the new mailboxes on the destination server host2.
|
||||
|
||||
* Presync all the mailboxes from the old host1 to the new server host2,
|
||||
using different names that the ones used by the imap software
|
||||
clients (use their IP for example).
|
||||
Presyncs have to be done with --delete2 but never use --delete2
|
||||
once users have started playing with their new account on host2.
|
||||
* Pre-synchronize all the mailboxes from the old host1 to the new
|
||||
server host2, using different names than the ones used by the imap
|
||||
software clients (use their IP for example). Presyncs have to be
|
||||
done with --delete2 but never use --delete2 once users have started
|
||||
playing with their new account on host2.
|
||||
|
||||
* Decide a migration day/hour.
|
||||
|
||||
* repeat the presyncs (with the --delete2 options) daily until the
|
||||
migration hour. This repeated process will show how long should
|
||||
take the last sync.
|
||||
* Repeat the pre-synchronizations (the runs with the --delete2
|
||||
options) daily until the migration hour. This repeated process will
|
||||
show how long should take the last sync.
|
||||
|
||||
* At the migration hour, cut access to the users to the old server.
|
||||
You can do this by changing the imap host1 hostname to a non-imap
|
||||
server for example, or by changing their password on host1.
|
||||
|
||||
* Do a last sync exactly like the presyncs, not using the imap hostname.
|
||||
* Do the last run exactly like the pre-synchronizations.
|
||||
|
||||
* Change also the MX resolution, the new messages should start
|
||||
to arrive in the new imap server very soon.
|
||||
|
||||
* Wait the TTL value, aka 5 minutes. Now, new messages should
|
||||
not arrive to the old server host1.
|
||||
* Wait for the TTL value, aka 5 minutes. Now, new messages should
|
||||
not arrive at the old server host1.
|
||||
|
||||
* Do a postsync. A postsync is a sync with the following options
|
||||
--maxage 1 --delete1 --folder INBOX
|
||||
* Do a post-synchronization. A post-synchronization is a run with the
|
||||
following options: --folder INBOX --delete1 --maxage 1
|
||||
|
||||
This postsync will move the last new messages arrived on host1 to
|
||||
host2 during the TTL interval and delete them on host1. Do not use
|
||||
the option --delete2 in a postsync.
|
||||
This post-synchronization will copy the messages arrived in the
|
||||
last day (--maxage 1) in the folder INBOX (--folder INBOX) on the
|
||||
source account, to the destination account. It will also delete
|
||||
them on host1 (--delete1). It's --delete1, it's not --delete2.
|
||||
Remember, do not use the option --delete2 in a post
|
||||
synchronization, as users won't appreciate seeing their newly
|
||||
arrived messages disappear because of you.
|
||||
|
||||
* Shutdown the old imap server.
|
||||
* Shut down the old imap server.
|
||||
|
||||
* Change the user imap hostname resolution from the old IP of host1
|
||||
to the IP of the new imap server host2.
|
||||
|
||||
* Migration done.
|
||||
|
||||
* Increase the TTL of the MX back to its previous value, usually
|
||||
24 hours, 86400 seconds. You don't want all your email system
|
||||
to break down completely when your DNS are not available
|
||||
temporarily, keeping dns values in cache for a 24h is a savvy
|
||||
practice.
|
||||
|
||||
=======================================================================
|
||||
=======================================================================
|
||||
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
|
||||
$Id: FAQ.Office365.txt,v 1.23 2021/07/06 02:30:01 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
|
||||
https://imapsync.lamiral.info/FAQ.d/
|
||||
@ -14,18 +14,31 @@ Questions answered in this FAQ are:
|
||||
|
||||
Q. Can I use imapsync to transfer from or to Office365 accounts?
|
||||
|
||||
Q. Does IMAPSync support OAUTH2 authentication in Office 365?
|
||||
Q. Can imapsync work for users that are administrators for
|
||||
an Office 365 domain? (quick answer: no)
|
||||
|
||||
Q. Does imapsync support OAUTH2 authentication for Office365 accounts?
|
||||
|
||||
Q. How to sync from Office365 to XXX?
|
||||
|
||||
Q. How to sync from XXX to Office365
|
||||
|
||||
Q. For Office365 I have double and triple-checked the username and
|
||||
password spelling but I still get a "LOGIN failed". Any clue?
|
||||
password spelling but I still get a "LOGIN failed". Any clue?
|
||||
|
||||
Q. How can I access an Office365 shared mailbox?
|
||||
|
||||
Q. How can I use a shared account as a backup account for several
|
||||
mailboxes and so avoid spending too many dollars in backup accounts?
|
||||
|
||||
Q. Office365 fails with "User is authenticated but not connected".
|
||||
|
||||
Q. I see "NO Maximum size of appendable message has been exceeded"
|
||||
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,
|
||||
is there a solution to fix that?
|
||||
|
||||
@ -33,6 +46,8 @@ Q. Office365 throttles the sync and says:
|
||||
"Request is throttled. Suggested Backoff Time: 299961 milliseconds".
|
||||
What can I do with that?
|
||||
|
||||
Q. What are the receive and sending limits of Office365?
|
||||
|
||||
Q. The sync fails with many "Trying command when NOT connected!".
|
||||
What can I do?
|
||||
|
||||
@ -68,20 +83,121 @@ Now the questions again with their answers.
|
||||
======================================================================
|
||||
Q. Can I use imapsync to transfer from or to Office365 accounts?
|
||||
|
||||
R. Yes. But IMAP access to Office365 account is not always allowed by default
|
||||
so it has to be allowed in the server configuration part.
|
||||
R0. Yes. But IMAP access to Office365 account is not always allowed
|
||||
by default so it has to be allowed in the server configuration part.
|
||||
|
||||
https://docs.microsoft.com/en-us/exchange/clients-and-mobile-in-exchange-online/pop3-and-imap4/enable-or-disable-pop3-or-imap4-access
|
||||
https://docs.microsoft.com/en-us/exchange/troubleshoot/configure-mailboxes/pop3-imap-owa-activesync-office-365
|
||||
|
||||
R1. Imapsync doesn't support OAUTH2 authentication for Office365
|
||||
accounts yet. That's not totally true, if you have an access token
|
||||
to access your mailbox then you can authenticate with imapsync this
|
||||
way:
|
||||
|
||||
imapsync ... --oauthaccesstoken1 tokenfile
|
||||
|
||||
where "tokenfile" is a file containing the access token.
|
||||
|
||||
R2. Enable double-step authentication and configure it but after use
|
||||
an "app password" with imapsync. Details:
|
||||
|
||||
a) Go to
|
||||
https://account.microsoft.com/security
|
||||
|
||||
b) Click on "Advanced Security Options"
|
||||
Turn "Two-step verification" on. Follow the steps and finish".
|
||||
|
||||
c) Then now "App passwords" is available.
|
||||
Click on "Create a new app password".
|
||||
Use this password to authenticate with imapsync.
|
||||
|
||||
d) Delete this app password when the job with imapsync is finished.
|
||||
|
||||
R3. Also, check a license is assigned to that account in Office365.
|
||||
|
||||
R4. From Dave Pusey
|
||||
https://github.com/imapsync/imapsync/issues/317#issuecomment-1027776418
|
||||
|
||||
I quote Dave nearly verbatim:
|
||||
|
||||
"I had created an app password, and security defaults are already off.
|
||||
|
||||
I have now figured out the issue.
|
||||
|
||||
Despite the MS365 and EXO admin centers showing that IMAP and Basic
|
||||
Auth were all enabled, it turns out that in Oct 2021, Microsoft began
|
||||
disabling basic auth for all tenants that had have never used it by
|
||||
that point. There was an item in my Message Center from that date
|
||||
saying my tenant was being done.
|
||||
|
||||
You can re-enable it for specific protocols (IMAP in this case) using
|
||||
the diagnostic process detailed at
|
||||
https://techcommunity.microsoft.com/t5/exchange-team-blog/basic-authentication-and-exchange-online-september-2021-update/bc-p/2782230
|
||||
(see the section "Limited Opt Out")
|
||||
|
||||
R5. Microsoft introduced something called "security defaults" which is enabled
|
||||
by default for new tenants. One of the rules blocks IMAP access as of imapsync.
|
||||
|
||||
The funny thing is that you can't disable a single rule of this
|
||||
security package without buying additional licenses.
|
||||
Switching the whole thing off allows the IMAP login.
|
||||
|
||||
Also, disable double-step authentication on the Azure/Active Directory portal.
|
||||
See here:
|
||||
https://docs.microsoft.com/en-us/azure/active-directory/fundamentals/concept-fundamentals-security-defaults
|
||||
Thanks to Stephan Buhre for this R5 answer.
|
||||
|
||||
R6. Are there special characters in the password?
|
||||
https://imapsync.lamiral.info/FAQ.d/FAQ.Authentication_failure.txt
|
||||
https://imapsync.lamiral.info/FAQ.d/FAQ.Passwords_on_Windows.txt
|
||||
https://imapsync.lamiral.info/FAQ.d/FAQ.Passwords_on_Unix.txt
|
||||
https://imapsync.lamiral.info/FAQ.d/FAQ.Passwords_on_Mac.txt
|
||||
|
||||
R7. Triple check the hostname then. Try all of these:
|
||||
* outlook.office365.com
|
||||
* imap-mail.outlook.com
|
||||
* imap.outlook.com
|
||||
|
||||
======================================================================
|
||||
Q. Can imapsync work for users that are administrators for
|
||||
an Office 365 domain? (quick answer: no)
|
||||
|
||||
R. It doesn't seem possible to use imap for administrators, so imapsync
|
||||
won't be able to work for an administrator's mailbox.
|
||||
See:
|
||||
https://github.com/imapsync/imapsync/issues/310#issuecomment-1002396218
|
||||
https://exhaust.lewiscollard.com/post/146866104/office365-to-migadu-migration/
|
||||
|
||||
Solution: as explained in the article above, use Davmail as a proxy to
|
||||
access this mailbox. http://davmail.sourceforge.net/
|
||||
|
||||
Thanks to Lewis Collard for this report and solution.
|
||||
|
||||
======================================================================
|
||||
Q. Does imapsync support OAUTH2 authentication for Office365 accounts?
|
||||
|
||||
R. No. But I plan to add it during the year 2021.
|
||||
R. Yes but partially. Imapsync won't help you getting an access token
|
||||
but if you have one then you can use it with imapsync this way:
|
||||
|
||||
Office365 as source:
|
||||
|
||||
imapsync ... --oauthaccesstoken1 tokenfile1
|
||||
|
||||
Office365 as destination:
|
||||
|
||||
imapsync ... --oauthaccesstoken2 tokenfile2
|
||||
|
||||
======================================================================
|
||||
Q. How to sync from Office365 to XXX?
|
||||
|
||||
R0. IMAP is not enabled by default on Office365, see how to enable it:
|
||||
https://docs.microsoft.com/en-us/exchange/clients-and-mobile-in-exchange-online/pop3-and-imap4/enable-or-disable-pop3-or-imap4-access
|
||||
https://docs.microsoft.com/en-us/exchange/troubleshoot/configure-mailboxes/pop3-imap-owa-activesync-office-365
|
||||
|
||||
If IMAP cannot be enabled or if it doesn't work well, you can try DavMail
|
||||
(http://davmail.sourceforge.net/) which acts as an IMAP gateway
|
||||
through Outlook Web Access.
|
||||
|
||||
R. On Windows, use:
|
||||
|
||||
imapsync.exe ... --office1
|
||||
@ -107,7 +223,7 @@ If IMAP cannot be enabled or if it doesn't work well, you can try DavMail
|
||||
(http://davmail.sourceforge.net/) which acts as an IMAP gateway
|
||||
through Outlook Web Access.
|
||||
|
||||
R. Here is a command-line resume that solves most encountered issues when
|
||||
R. Here is a command-line summary that solves most encountered issues when
|
||||
migrating to Office365.
|
||||
|
||||
imapsync ... --office2
|
||||
@ -141,42 +257,65 @@ Use it like this:
|
||||
It often does some miracles on messages.
|
||||
|
||||
======================================================================
|
||||
Q. For Office365 I have double and triple-checked the username and
|
||||
password spelling but I still get a "LOGIN failed". Any clue?
|
||||
Q. For Office365 I have double and triple-checked the username and
|
||||
password spelling but I still get a "LOGIN failed". Any clue?
|
||||
|
||||
R0. Imapsync doesn't support OAUTH2 authentication for Office365 accounts yet.
|
||||
R. Go to "Q. Can I use imapsync to transfer from or to Office365 accounts?"
|
||||
|
||||
R1. Disable double-step authentication, also known as 2-factor,
|
||||
2-step authentication on the Azure/Active Directory portal.
|
||||
======================================================================
|
||||
Q. How can I access an Office365 shared mailbox?
|
||||
|
||||
R2. Also, check a license is assigned to that account in Office365.
|
||||
R. First, create a shared mailbox, for example shared@example.com.
|
||||
Then give full permissions to a licensed account user@example.com.
|
||||
Now with imapsync, use the licensed user login with the syntax:
|
||||
|
||||
R3. Microsoft introduced something called "security defaults" which is enabled
|
||||
by default for new tenants. One of the rules blocks IMAP access as of imapsync.
|
||||
The funny thing is that you can't disable single rules of this security
|
||||
package without buying additional licenses.
|
||||
Switching the whole thing off allows the login.0
|
||||
Also, disable double-step authentication on the Azure/Active Directory portal.
|
||||
See here:
|
||||
https://docs.microsoft.com/en-us/azure/active-directory/fundamentals/concept-fundamentals-security-defaults
|
||||
Thanks to Stephan Buhre for this R3 answer.
|
||||
user@example.com\shared@example.com
|
||||
|
||||
R4. Are there special characters in the password?
|
||||
https://imapsync.lamiral.info/FAQ.d/FAQ.Authentication_failure.txt
|
||||
https://imapsync.lamiral.info/FAQ.d/FAQ.Passwords_on_Windows.txt
|
||||
https://imapsync.lamiral.info/FAQ.d/FAQ.Passwords_on_Unix.txt
|
||||
https://imapsync.lamiral.info/FAQ.d/FAQ.Passwords_on_Mac.txt
|
||||
and the password for user@example.com
|
||||
|
||||
R5. Triple check the hostname then. Try all of these:
|
||||
* outlook.office365.com
|
||||
* imap-mail.outlook.com
|
||||
* imap.outlook.com
|
||||
Caveat: Character \ is a special character, so
|
||||
use double-quotes around the user login, like:
|
||||
|
||||
imapsync ... --user1 "user@example.com\shared@example.com"
|
||||
|
||||
Sources:
|
||||
https://adam-hand.com/2017/07/25/connect-a-shared-mailbox-from-o365-to-outlook-via-imap/
|
||||
https://www.arclab.com/en/kb/email/imap-settings-shared-mailbox-office-exchange-online.html
|
||||
https://social.technet.microsoft.com/Forums/en-US/336e02ee-6767-4810-90a0-1352bd7cc9e9/office-365-how-to-access-a-shared-mailbox-using-imap-client?forum=onlineservicesexchange
|
||||
|
||||
======================================================================
|
||||
Q. How can I use a shared account as a backup account for several
|
||||
mailboxes and so avoid spending too many dollars in backup accounts?
|
||||
|
||||
R. Use the option --subfolder2 backup_foo
|
||||
|
||||
imapsync ... --user2 sharedloginsyntax --subfolder2 backup_foo
|
||||
|
||||
To restore, do the reverse with:
|
||||
|
||||
imapsync ... --user1 sharedloginsyntax --subfolder1 backup_foo
|
||||
|
||||
|
||||
======================================================================
|
||||
Q. Office365 fails with "User is authenticated but not connected".
|
||||
|
||||
R1. "The message User is authenticated but not connected is due to a
|
||||
bug in the Office365 server's IMAP implementation. If the client
|
||||
presents a valid user name but an invalid password, the server
|
||||
accepts the login, but subsequent commands fail with the
|
||||
aforementioned error message." Source:
|
||||
https://unix.stackexchange.com/questions/164823/user-is-authenticated-but-not-connected-after-changing-my-exchange-password
|
||||
Thanks to James Abbottsmith for this link and explanation at
|
||||
https://github.com/imapsync/imapsync/issues/32#issuecomment-153561647
|
||||
|
||||
R2. Miguel Alameda reported understanding and solving this issue
|
||||
like this, the context was admin/authuser:
|
||||
"The admin user had not permission in the target mailbox."
|
||||
|
||||
======================================================================
|
||||
Q. I see "NO Maximum size of appendable message has been exceeded"
|
||||
What can I do with that?
|
||||
|
||||
|
||||
R. Office365 supports send/receive max message sizes of up to 150MB
|
||||
but you need to make changes in your tenant(s) to support it.
|
||||
|
||||
@ -198,20 +337,32 @@ values on the migration accounts in the source and target tenants.
|
||||
Thanks to Sean McDougall, Ian Thomas & Matt Wilks from Toronto
|
||||
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,
|
||||
is there a solution to fix that?
|
||||
|
||||
R. Yes. Try DavMail
|
||||
http://davmail.sourceforge.net/
|
||||
I don't use it myself but a user, Yannick Palanque, reported great results using it.
|
||||
I don't use it myself but a user, Yannick Palanque, reported
|
||||
great results using it.
|
||||
|
||||
======================================================================
|
||||
Q. The sync fails with many "Trying command when NOT connected!".
|
||||
What can I do?
|
||||
|
||||
R. The --debugimap option can show you more details, especially some
|
||||
message like:
|
||||
R. The --debugimap option can show you more details, especially
|
||||
messages like this one:
|
||||
"BAD Request is throttled. Suggested Backoff Time: 178755 milliseconds"
|
||||
In that case, see the next faq item and its fixes.
|
||||
|
||||
@ -249,6 +400,29 @@ R2. Play with options --maxbytespersecond or --maxmessagespersecond
|
||||
I don't know the upper value that avoids the default throttling from 0365
|
||||
and I guess it changes over time.
|
||||
|
||||
======================================================================
|
||||
Q. What are the receive and sending limits of Office365?
|
||||
|
||||
R1. 3600 messages per hour (22 July 2021). Maybe 1200 as imapsync can
|
||||
be viewed as a single sender. Tell me what you experienced,
|
||||
I'll update this point.
|
||||
|
||||
https://docs.microsoft.com/en-us/office365/servicedescriptions/exchange-online-service-description/exchange-online-limits#receiving-and-sending-limits
|
||||
|
||||
In that case, imapsync can adapt to this with (1 message/second = 3600 messages per hour)
|
||||
|
||||
imapsync ... --maxmessagespersecond 1
|
||||
or
|
||||
imapsync ... --maxmessagespersecond 0.33
|
||||
|
||||
R2. I also found "Microsoft theoretically allows for about 300MB of
|
||||
throughput per user per hour." at
|
||||
https://www.systools.in/blog/microsoft-office-365-throttling-policy/
|
||||
|
||||
In that case, imapsync can adapt to this with (83333 bytes/second = 300 MBytes/hour)
|
||||
|
||||
imapsync ... --maxbytespersecond 83333
|
||||
|
||||
======================================================================
|
||||
Q. Office365 refuses to create the folder named "Files" with the error
|
||||
"NO Folder name is reserved". What happens?
|
||||
@ -277,12 +451,13 @@ R0. To fix this, add --exclude Files
|
||||
The host2 account ends up with a folder named
|
||||
"Files_renamed_by_imapsync", but no complaining.
|
||||
|
||||
R1. This folder "Files" seems to be a standard folder in Exchange Online,
|
||||
but it is not. This folder contains all attachments in every email
|
||||
that is in the mailbox but without any headers.
|
||||
This causes some confusion for users as these appear in their search
|
||||
results as duplicate lines but without the sender details or even
|
||||
the message body.
|
||||
R1. This folder "Files" seems to be a standard folder in Exchange Online,
|
||||
but it is not. This folder contains all attachments in every email
|
||||
that is in the mailbox but without any headers.
|
||||
|
||||
This causes some confusion for users as these appear in their search
|
||||
results as duplicate lines but without the sender details or even
|
||||
the message body.
|
||||
|
||||
This folder seems to be usually hidden so IMAP clients can’t see it,
|
||||
but for some reason sometimes it becomes visible.
|
||||
@ -350,8 +525,8 @@ R3. See also the FAQ FAQ.SSL_errors.txt
|
||||
Q. From XXX Office365 I get this error message sometimes:
|
||||
"BAD Command Argument Error 11". What does it mean?
|
||||
|
||||
R. This error message comes from the Office365 IMAP server when it
|
||||
encounters any problem. Most of the time it is one of the following:
|
||||
R. This error message comes from the Office365 IMAP server when it
|
||||
encounters any problem. Most of the time it is one of the following:
|
||||
|
||||
* Some messages are bigger than the size limit.
|
||||
45 MB by default on Office365.
|
||||
@ -365,7 +540,7 @@ R. This error message comes from the Office365 IMAP server when it
|
||||
* Quota reached. The whole account is full.
|
||||
It can be upped by configuration.
|
||||
|
||||
* You use --synclabels --resynclabels from a previous command line
|
||||
* You use --synclabels --resynclabels from a previous command line
|
||||
related to syncing from Gmail to Gmail. Remove them.
|
||||
|
||||
* Some messages have some lines too long. Use option --maxlinelength
|
||||
@ -429,7 +604,7 @@ Note from Yago Torres Fernandez:
|
||||
(a working command using admin/authuser on host2 Office 365)
|
||||
|
||||
imapsync ... --authuser2 user_admin@domain.com --user2 user_to_be_migrated@domain.com ^
|
||||
--password2 XXXX --ssl2 ^
|
||||
--password2 XXXX --ssl2
|
||||
|
||||
but previously in Office365, you must do something like the following, using Powershell:
|
||||
|
||||
@ -437,7 +612,12 @@ but previously in Office365, you must do something like the following, using Pow
|
||||
|
||||
|
||||
Note from Betsy Lawlor: You can use global modern authentication with two factor
|
||||
on Exchange Online (M365) but you must have "AllowBasicAuthImap" on the admin account you are using to migrate the mail.
|
||||
on Exchange Online (M365) but you must have "AllowBasicAuthImap" on
|
||||
the admin account you are using to migrate the mail.
|
||||
|
||||
Note from Guido (5 April 2022):The way I fixed it was by turning off security defaults
|
||||
https://docs.microsoft.com/nl-nl/azure/active-directory/fundamentals/concept-fundamentals-security-defaults.
|
||||
You still need to check IMAP access on an account-basis though.
|
||||
|
||||
Remark: PLAIN authentication is the only way to go with --authuser1 for now.
|
||||
So don't use --authmech1 SOMETHING with --authuser1 admin_user,
|
||||
@ -453,7 +633,7 @@ so if two factors authentication is enabled you will no be able to sync
|
||||
the mail (it will not connect to host2).
|
||||
OWA (I think this is the two-factor authentication) needs to be disabled
|
||||
globally and enabled individually on the users you want to.
|
||||
One account can have the rights to access other mailboxes no matter if admin or
|
||||
One account can have the right to access other mailboxes no matter if admin or
|
||||
any other account but needs to have OWA disabled to be able to connect
|
||||
to the office365 server.
|
||||
|
||||
@ -464,7 +644,7 @@ but not for the admin. Example:
|
||||
imapsync ... --authuser2 user_admin@domain.com --user2 user_to_be_migrated
|
||||
|
||||
See also:
|
||||
http://www.linux-france.org/prj/imapsync_list/msg02203.html
|
||||
http://linux-france.tk/prj/imapsync_list/msg02203.html
|
||||
Subject: RE: [imapsync] Office 365 - 'Master User'?
|
||||
Date: Mon, 1 Jun 2015 17:53:54 +0000
|
||||
|
||||
@ -473,8 +653,8 @@ Date: Mon, 1 Jun 2015 17:53:54 +0000
|
||||
Q. Couldn't create folder [trash] "Mailbox already exists".
|
||||
|
||||
R. Some servers take care of character cases in folder names,
|
||||
some servers do not, like Exchange. Since not respecting the case can merge
|
||||
two different folders into one then imapsync respects the case.
|
||||
some servers do not, like Exchange. Since not respecting the case
|
||||
can merge two different folders into one then imapsync respects the case.
|
||||
|
||||
For example, if a host1 server has a folder name called "trash"
|
||||
and the host2 server already has a folder "Trash" or "TRASH"
|
||||
|
||||
@ -10,7 +10,7 @@ https://imapsync.lamiral.info/FAQ.d/FAQ.Old_Style_Web_Design.txt
|
||||
=======================================================================
|
||||
|
||||
=======================================================================
|
||||
Q. Why the imapsync website looks so old fashion?
|
||||
Q. Why does the imapsync website look so old fashioned?
|
||||
|
||||
R. Once in a while I receive messages from people complaining about
|
||||
the website style, not that much about the content by the way,
|
||||
@ -28,7 +28,7 @@ Here are several reasons it stays like that for now:
|
||||
* I like static web.
|
||||
Although you could argue that I do use some dynamic things, like SSI.
|
||||
That's true, I use Server Side Include, aka SSI, denoted by the ".shtml"
|
||||
extention of some files, instead of the classical ".html" extention.
|
||||
extension of some files, instead of the classical ".html" extension.
|
||||
It's because I like dynamic web when the dynamic brings something that
|
||||
can't be done easily with static files.
|
||||
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
#!/bin/cat
|
||||
$Id: FAQ.OnlineUI.txt,v 1.29 2021/05/05 21:38:32 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
|
||||
https://imapsync.lamiral.info/FAQ.d/
|
||||
@ -12,73 +12,96 @@ https://imapsync.lamiral.info/FAQ.d/FAQ.OnlineUI.txt
|
||||
|
||||
Questions answered in this FAQ are:
|
||||
|
||||
Q. Can I launch several imap synchronizations on the visual
|
||||
user interface /X?
|
||||
|
||||
Q. How secure is the online visual user interface /X?
|
||||
|
||||
Q. Does the online service store any sensitive information
|
||||
like my passwords?
|
||||
like my passwords?
|
||||
|
||||
Q. I want to switch from the visual interface /X to the
|
||||
imapsync command line or to the script examples
|
||||
https://imapsync.lamiral.info/#DOC_BASIC
|
||||
What should I know?
|
||||
|
||||
Q. Shall I have issues when the browser times out?
|
||||
What happens if the browser connection is closed for whatever reason?
|
||||
What happens if the browser connection is closed for whatever reason?
|
||||
|
||||
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?
|
||||
|
||||
Q. The sync stalls at the beginning, just after a line like:
|
||||
"Host1: xxx says it has CAPABILITY for AUTHENTICATE LOGIN"
|
||||
What is the problem?
|
||||
"Host1: xxx says it has CAPABILITY for AUTHENTICATE LOGIN"
|
||||
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.
|
||||
|
||||
=====================================================================
|
||||
Q. Can I launch several imap synchronizations on the visual
|
||||
user interface /X?
|
||||
|
||||
A. Yes. Open several tabs/windows on your browser and fill each one
|
||||
with different credentials.
|
||||
|
||||
=====================================================================
|
||||
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.
|
||||
Let's do it anyway, you'll be the judge.
|
||||
|
||||
R1. Some figures
|
||||
A1. Some figures
|
||||
|
||||
Date of this report: 22 April 2021.
|
||||
Date of this report: 24 December 2021. Happy Christmas!
|
||||
|
||||
The online imapsync service /X started 9 January 2017
|
||||
(1564 days of service).
|
||||
The online imapsync service /X started 9 January 2017,
|
||||
5 years ago (1810 days of service).
|
||||
|
||||
On average, /X has 51 users per day, each user lunches on average
|
||||
6 account migrations, from just one launch to many (hundreds).
|
||||
On average, /X has 51 users per day, each user launches on average
|
||||
6 account migrations, from just 1 launch to many (hundreds).
|
||||
|
||||
The total volume /X transferred so far is around 210 TiB coming
|
||||
from nearly 450 000 imap account migrations and 700 million email messages.
|
||||
The total volume /X transferred so far is around 240 TiB coming
|
||||
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 certificate, a certificate overall rated "A+" at
|
||||
The online imapsync service /X runs on HTTPS only, with a letsencrypt
|
||||
certificate, an up to date certificate overall rated "A+" at
|
||||
https://www.ssllabs.com/ssltest/analyze.html?d=imapsync.lamiral.info
|
||||
|
||||
Because of the HTTPS usage, what the users enter in their browser,
|
||||
the imap logins and passwords, can't be eavesdropped on the network.
|
||||
Because of the HTTPS usage, what the users enter in their browser, the
|
||||
imap logins and passwords, can't be eavesdropped on the network.
|
||||
|
||||
Imapsync itself takes care of encryption for the imap sessions,
|
||||
if possible. First, imapsync tries to use SSL on port 993,
|
||||
then TLS on port 143 if the servers announce TLS, then no encryption at all.
|
||||
Imapsync itself takes care of encryption for the imap sessions, if
|
||||
possible. First, imapsync tries to use SSL on port 993, then TLS on
|
||||
port 143 if the servers announce TLS, then no encryption at all.
|
||||
Concerning encryption, what is done with the source imap server host1
|
||||
is independent of what is done with the destination imap server host2.
|
||||
|
||||
On the date of 22 April 2021, there is no security problem
|
||||
detected or reported to me (Gilles LAMIRAL), so far.
|
||||
Feel free to attack the service and feel free to report any
|
||||
hole encountered. Have in mind I can watch what you do
|
||||
from the server-side and take measures if the service suffers from
|
||||
your acts. Drop me a note before will be fair play.
|
||||
On the date of 24 December 2021, there is no security problem detected
|
||||
or reported to me (Gilles LAMIRAL), so far.
|
||||
|
||||
As the owner of the service, it could have been 450 000 pairs of
|
||||
credentials collected and nearly 210 terabytes of email messages.
|
||||
I haven't kept them but I can't prove I haven't. It's just trust,
|
||||
like nearly every online service in the universe.
|
||||
Concerning the Log4j threats, the imapsync server doesn't use Log4j at
|
||||
all, so it should be safe about this issue.
|
||||
|
||||
The imap server certificates are not checked for authenticity
|
||||
(by default) because too many imap servers are crappy configured
|
||||
regarding certified certificates.
|
||||
Feel free to attack the service and feel free to report any hole
|
||||
encountered. Have in mind that I can watch what you do from the
|
||||
server-side, and then take measures if the service suffers from your
|
||||
acts. Drop me a note before will be fair play and I will let you act
|
||||
as harsh as you can.
|
||||
|
||||
As the owner of the service, it could have been 520 000 pairs of
|
||||
credentials collected and nearly 240 terabytes of email messages.
|
||||
That's massive. I haven't kept them but I can't prove I haven't. It's
|
||||
just trust, like nearly every online service in the universe.
|
||||
|
||||
Concerning imapsync transfers, the imap server certificates are not
|
||||
checked for authenticity by default because too many imap servers are
|
||||
crappy configured regarding their certified certificates.
|
||||
|
||||
This default behavior is chosen like this because users of /X
|
||||
want their emails transferred, instead of being not transferred
|
||||
@ -88,43 +111,103 @@ I admit that this part, checking imap ssl/tls certificates,
|
||||
could be improved from my side by including well known
|
||||
certificates directly in imapsync.
|
||||
|
||||
If the imap servers don't honor ssl nor tls, then logins, passwords
|
||||
and everything will go clear text during the imap transfers.
|
||||
That's not good at all but what "comforts" me is that if an
|
||||
imap server does only clear text transfers, then it's also true
|
||||
for all the imap sessions the account owner encounters,
|
||||
imapsync is just one of them; the imap servers are then always
|
||||
unsecured for any imap software client.
|
||||
If an imap server doesn't honor ssl nor tls, then logins, passwords
|
||||
and everything will go clear text during the imap transfers. That's
|
||||
not good at all! But what "comforts" me is that if an imap server does
|
||||
only clear text transfers, then it's also true for all the imap
|
||||
sessions the account owner encounters, imapsync is just one of them;
|
||||
the imap servers are then always unsecured for any imap software
|
||||
client.
|
||||
|
||||
Last point, who could be sure that no cracker cracked the online hosts
|
||||
and that he isn't currently sniffing the credentials?
|
||||
|
||||
Last point, who could be sure that no cracker cracked the online
|
||||
hosts and that he isn't currently sniffing the credentials?
|
||||
|
||||
No one, I'm not sure myself, even if I do take care of that
|
||||
No one! I'm not sure myself, even if I do take care of that
|
||||
possibility. So changing the imap accounts passwords after
|
||||
the sync is a safe and recommended practice!
|
||||
the sync is a safe and recommended practice! You can even
|
||||
change the password just after imapsync has started its job,
|
||||
just after a successful login. This way you know the previously
|
||||
given password is no longer working just after imapsync has
|
||||
started its job.
|
||||
|
||||
=====================================================================
|
||||
Q. Does the online service store any sensitive information
|
||||
like my passwords?
|
||||
like my passwords?
|
||||
|
||||
No.
|
||||
The online passwords are kept by your browser. The goal is
|
||||
that the next time you run a sync from your browser, all the
|
||||
parameters are already there without having to re-enter them.
|
||||
The save is done when you click on the "Sync or resync" green
|
||||
button. So, if you don't want your browser to keep your password,
|
||||
enter a wrong one or empty the password field and click
|
||||
on the "Sync or resync" green button, the wrong password
|
||||
will be saved in your browser and no sync will be done,
|
||||
since a good login is mandatory to do anything on your mailboxes.
|
||||
|
||||
The online passwords are kept by your browser. The goal is that the
|
||||
next time you run a sync from your browser, all the parameters are
|
||||
already there without having to re-enter them. The save is done when
|
||||
you click on the "Sync or resync" green button. So, if you don't want
|
||||
your browser to keep your password, enter a wrong one or empty the
|
||||
password field and click on the "Sync or resync" green button, the
|
||||
wrong password will be saved in your browser and no sync will be done,
|
||||
since a correct login is mandatory to do anything on your mailboxes.
|
||||
|
||||
=====================================================================
|
||||
Q. I want to switch from the visual interface /X to the
|
||||
imapsync command line or to the script examples
|
||||
https://imapsync.lamiral.info/#DOC_BASIC
|
||||
What should I know?
|
||||
|
||||
A. Let's do some ascii art.
|
||||
The visual interface looks roughly like this, for the textfields input part:
|
||||
|
||||
+------------------------------------------+------------------------------------------+
|
||||
| IMAP source Mailbox | IMAP destination Mailbox |
|
||||
| | |
|
||||
| Login (usually an email address) | Login (usually an email address) |
|
||||
| | |
|
||||
| test1 | test2 |
|
||||
| | |
|
||||
| Password | Password |
|
||||
| | |
|
||||
| secret1 | secret2 |
|
||||
| | |
|
||||
| IMAP Server hostname (or its IP address) | IMAP Server hostname (or its IP address) |
|
||||
| | |
|
||||
| test1.lamiral.info | test2.lamiral.info |
|
||||
| | |
|
||||
+------------------------------------------+------------------------------------------+
|
||||
|
||||
Notice the 6 examples values I put in the previous "picture":
|
||||
|
||||
* test1
|
||||
* secret1
|
||||
* test1.lamiral.info
|
||||
|
||||
* test2
|
||||
* secret2
|
||||
* test2.lamiral.info
|
||||
|
||||
|
||||
The corresponding imapsync command line on Windows is:
|
||||
|
||||
imapsync.exe --host1 "test1.lamiral.info" --user1 "test1" --password1 "secret1" ^
|
||||
--host2 "test2.lamiral.info" --user2 "test2" --password2 "secret2"
|
||||
|
||||
The order of the parameters is whatever you want as long as you respect each pair
|
||||
like: --optionname "value"
|
||||
|
||||
There is no need to type this in a command prompt window, just use the example script
|
||||
https://imapsync.lamiral.info/examples/imapsync_example.bat
|
||||
|
||||
|
||||
The corresponding imapsync command line on Linux is:
|
||||
|
||||
imapsync --host1 "test1.lamiral.info" --user1 "test1" --password1 "secret1" \
|
||||
--host2 "test2.lamiral.info" --user2 "test2" --password2 "secret2"
|
||||
|
||||
There is no need to type this in a command prompt window, just use the example script
|
||||
https://imapsync.lamiral.info/examples/imapsync_example.sh
|
||||
|
||||
=====================================================================
|
||||
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,
|
||||
ie, the sync is ended right away.
|
||||
A. A browser connection closed closes also the imapsync process,
|
||||
ie, the sync is ended right away.
|
||||
|
||||
Further comments on this behavior.
|
||||
|
||||
@ -137,7 +220,7 @@ If the Browser/WebServer connection timeouts or ends,
|
||||
the imapsync sync is also ended immediately by the remote
|
||||
Apache HTTPS server. Technically, Apache sends a TERM signal
|
||||
to the imapsync process, then wait some seconds before
|
||||
sending a KILL signal if it is still alive.
|
||||
sending a KILL signal if the imapsync process is still alive.
|
||||
|
||||
You can relaunch the sync with the "Sync!" button, at any time.
|
||||
If the "Sync!" button is gray/inactive then just reload
|
||||
@ -158,29 +241,60 @@ 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
|
||||
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
|
||||
kills the imapsync process and the imap connections as well.
|
||||
A. If the webserver closes the connection then usually it also
|
||||
kills the imapsync process and the imap connections as well.
|
||||
|
||||
To fix this issue, see the document INSTALL.OnlineUI.txt
|
||||
and search for "Timeout" in it.
|
||||
|
||||
Tip: If the connections close for huge folders and always after
|
||||
300 seconds or 60 seconds then it looks like a web server timeout.
|
||||
Apache 2.2 timeout is 300 seconds.
|
||||
Apache 2.4 timeout is 60 seconds.
|
||||
The current webserver timeout at
|
||||
https://imapsync.lamiral.info/X/
|
||||
is 3600 secondes, one hour.
|
||||
|
||||
=====================================================================
|
||||
Q. The sync stalls at the beginning, just after a line like:
|
||||
"Host1: xxx says it has CAPABILITY for AUTHENTICATE LOGIN"
|
||||
What is the problem?
|
||||
"Host1: xxx says it has CAPABILITY for AUTHENTICATE LOGIN"
|
||||
What is the problem?
|
||||
|
||||
A. I've seen this issue on /X with the imap server
|
||||
CommuniGate Pro IMAP Server 6.0.11
|
||||
|
||||
R. I've seen this issue on /X with the imap server
|
||||
CommuniGate Pro IMAP Server 6.0.11
|
||||
The issue looks related to special characters in the password.
|
||||
Solution for now: change the password, keep only standard (ASCII)
|
||||
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
|
||||
connections 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/
|
||||
|
||||
=====================================================================
|
||||
=====================================================================
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
#!/bin/cat
|
||||
$Id: FAQ.POP3.txt,v 1.5 2019/07/27 20:18:37 gilles Exp gilles $
|
||||
$Id: FAQ.POP3.txt,v 1.6 2022/04/05 13:48:52 gilles Exp gilles $
|
||||
|
||||
This document is also available online at
|
||||
https://imapsync.lamiral.info/FAQ.d/
|
||||
@ -24,8 +24,8 @@ Q. Can I use imapsync to migrate emails from pop3 server to imap server?
|
||||
|
||||
R1. No, but you can migrate emails from a pop3 server to an imap server
|
||||
with the command line tool pop2imap:
|
||||
http://www.linux-france.org/prj/pop2imap/
|
||||
http://www.linux-france.org/prj/pop2imap/README
|
||||
http://linux-france.tk/prj/pop2imap/
|
||||
http://linux-france.tk/prj/pop2imap/README
|
||||
|
||||
R2. Yes, sometimes, because many pop3 servers runs in parallel
|
||||
with an imap server on exactly the same mailboxes. They serve
|
||||
@ -57,7 +57,7 @@ synchronization, but don't count on that...)
|
||||
R2. Context and condition: you know which users use POP.
|
||||
|
||||
If the pop mailboxes are known then all the INBOX messages can be moved
|
||||
in an subfolder called INBOX_backup for example. Ti help you do this,
|
||||
in an subfolder called INBOX_backup for example. To help you do this,
|
||||
the tool pop2imap transfers messages from POP to IMAP, without duplicates,
|
||||
without deleting the messages transferred, by default, and can put them
|
||||
in any subfolder you want to. It can also delete them and, that way,
|
||||
@ -66,7 +66,7 @@ We're here to do a good job with what we have, do we?
|
||||
|
||||
In case of Dovecot for example, the magic can be there since already
|
||||
fetched messages via POP are seen as \Seen in IMAP but the new messages are
|
||||
seen as new messages, thanks to the Dovecot developper Timo's cleverness!.
|
||||
seen as new messages, thanks to the Dovecot developer Timo's cleverness!
|
||||
So it is possible to sync back only the new messages to INBOX,
|
||||
with "imapsync ... --search UNSEEN ...", and then POP users won't see the old
|
||||
messages come back but they will see the new messages and fetch them via POP.
|
||||
@ -77,14 +77,14 @@ R3. Context and condition: you know nothing
|
||||
Do R2 without the sync back of UNSEEN messages. It can't hurt to have a backup
|
||||
of INBOX in a subfolder for IMAP or POP users.
|
||||
|
||||
R4. Here are some points, an analyse that made me purpose the not
|
||||
to bad but not very good R2 answer.
|
||||
R4. Here are some points, an analysis that made me propose the not
|
||||
too bad but not very good R2 answer.
|
||||
|
||||
There was a discussion about this issue on the imapsync mailing-list:
|
||||
http://www.linux-france.org/prj/imapsync_list/msg02622.html
|
||||
http://www.linux-france.org/prj/imapsync_list/msg02623.html
|
||||
http://linux-france.tk/prj/imapsync_list/msg02622.html
|
||||
http://linux-france.tk/prj/imapsync_list/msg02623.html
|
||||
My reply was not very good
|
||||
http://www.linux-france.org/prj/imapsync_list/msg02624.html
|
||||
http://linux-france.tk/prj/imapsync_list/msg02624.html
|
||||
It's because I wrote pop2imap and it uses a stateless
|
||||
mechanism to avoid duplicates, I wasn't aware of UIDL when I wrote pop2imap,
|
||||
and later when I entered the discussion.
|
||||
|
||||
@ -20,7 +20,7 @@ http://www.dostips.com/forum/viewtopic.php?f=3&t=1733
|
||||
|
||||
=======================================================================
|
||||
Q. On Windows, some passwords contain $ or other special characters
|
||||
like one more more of the nine characters $%&<>|^"!
|
||||
like one more of the nine characters $%&<>|^"!
|
||||
Login fails.
|
||||
|
||||
|
||||
|
||||
@ -26,7 +26,7 @@ R.
|
||||
* Stateless
|
||||
* Rsync in mind
|
||||
* Reliable
|
||||
* Robuste
|
||||
* Robust
|
||||
* The user is not an expert, help him with:
|
||||
* Good behavior by default.
|
||||
* No harm by default.
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
#!/bin/cat
|
||||
$Id: FAQ.Release_Checklist.txt,v 1.20 2021/07/06 02:29:51 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
|
||||
https://imapsync.lamiral.info/FAQ.d/
|
||||
@ -10,21 +10,50 @@ https://imapsync.lamiral.info/FAQ.d/FAQ.Release_Checklist.txt
|
||||
=======================================================================
|
||||
|
||||
|
||||
Checklist before release a new release:
|
||||
Checklist before making a new release:
|
||||
|
||||
- Make "imapsync --tests" pass on Linux
|
||||
- Make "imapsync --tests" pass on Mac
|
||||
- Make "imapsync --tests" pass on Windows 32 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 Mac
|
||||
|
||||
|
||||
make linuxtestslive mactestslive mactestslive6
|
||||
|
||||
|
||||
- Add a new section in S/news.shtml reading "rlog imapsync"
|
||||
- In case of a new dependency, add it to all the INSTALL/* files.
|
||||
- Generate the README
|
||||
|
||||
make doc
|
||||
|
||||
- Run a spell checker on the README
|
||||
- Read the README again slowly. Fix all issues, all.
|
||||
- Read the OPTIONS section of README and read it very slowly
|
||||
- Read slowly README_Windows.txt
|
||||
- Read slowly the TUTORIAL_Unix file in html
|
||||
|
||||
- Make "rcsdiff imapsync" give nothing relevant and exit 0
|
||||
|
||||
- make ci pass.
|
||||
|
||||
- Review the newsletter by running:
|
||||
m4 -P W/ml_announce.in.txt
|
||||
|
||||
- Update W/rsync_exclude_dist.txt
|
||||
- Update .gitignore
|
||||
- Update the file W/rsync_exclude_dist.txt
|
||||
- Update the file .gitignore
|
||||
|
||||
- Review the TODO file and mark done what is done.
|
||||
- Review the general FAQ.d/FAQ.General.txt
|
||||
|
||||
@ -1,39 +1,63 @@
|
||||
#!/bin/cat
|
||||
$Id: FAQ.SSL_errors.txt,v 1.15 2021/06/22 15:35:10 gilles Exp gilles $
|
||||
$Id: FAQ.SSL_errors.txt,v 1.18 2022/01/14 21:20:37 gilles Exp gilles $
|
||||
|
||||
This document is also available online at
|
||||
https://imapsync.lamiral.info/FAQ.d/
|
||||
https://imapsync.lamiral.info/FAQ.d/FAQ.SSL_errors.txt
|
||||
|
||||
|
||||
=======================================================================
|
||||
======================================================================
|
||||
Imapsync SSL errors
|
||||
=======================================================================
|
||||
======================================================================
|
||||
|
||||
Questions answered in this FAQ are:
|
||||
|
||||
Q. What is the error
|
||||
DEBUG: .../IO/Socket/SSL.pm:1177: global error: Undefined SSL object
|
||||
|
||||
Q. What are the errors
|
||||
DEBUG: .../IO/Socket/SSL.pm:1165: local error: SSL write error
|
||||
or
|
||||
DEBUG: .../IO/Socket/SSL.pm:1088: local error: SSL read error
|
||||
DEBUG: .../IO/Socket/SSL.pm:1165: local error: SSL write error
|
||||
or
|
||||
DEBUG: .../IO/Socket/SSL.pm:1088: local error: SSL read error
|
||||
|
||||
Q. What can I do to avoid those "SSL read/write errors"?
|
||||
|
||||
Q. SSL connect attempt failed SSL
|
||||
Q. What are the errors
|
||||
SSL connect attempt failed SSL
|
||||
routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure
|
||||
or
|
||||
SSL connect attempt failed SSL
|
||||
SSL routines:ssl_choose_client_version:unsupported protocol
|
||||
|
||||
Q. What is the error
|
||||
fatal SSL error: SSL connect attempt failed with unknown error
|
||||
SSL wants a read first
|
||||
|
||||
Q. How to see the certificate and identify problems in it?
|
||||
|
||||
Now the questions again with their answers.
|
||||
|
||||
=======================================================================
|
||||
======================================================================
|
||||
Q. What is the error
|
||||
DEBUG: .../IO/Socket/SSL.pm:1177: global error: Undefined SSL object
|
||||
|
||||
R. It's a fake error from the Perl Module IO::Socket::SSL
|
||||
Imapsync works well despite this fake warning but it's disturbing
|
||||
when you encounter errors due to something else, you believe it's
|
||||
the issue but no, it's something else to deal with.
|
||||
|
||||
This fake error is fixed in IO::Socket::SSL release 2.073
|
||||
https://metacpan.org/dist/IO-Socket-SSL/changes
|
||||
"fix #110 - prevent internal error warning in some cases"
|
||||
https://github.com/noxxi/p5-io-socket-ssl/issues/110
|
||||
|
||||
imapsync.exe release 2.178 uses this fixed 2.073 IO::Socket::SSL
|
||||
|
||||
======================================================================
|
||||
Q. What are the errors
|
||||
DEBUG: .../IO/Socket/SSL.pm:1165: local error: SSL write error
|
||||
or
|
||||
DEBUG: .../IO/Socket/SSL.pm:1088: local error: SSL read error
|
||||
DEBUG: .../IO/Socket/SSL.pm:1165: local error: SSL write error
|
||||
or
|
||||
DEBUG: .../IO/Socket/SSL.pm:1088: local error: SSL read error
|
||||
|
||||
|
||||
R1. As they claim, those errors are SSL errors. SSL is not directly
|
||||
@ -45,11 +69,11 @@ it's often Exchange or Office365. I don't know what exactly happens.
|
||||
Those errors happen more often on Windows than on Linux.
|
||||
|
||||
|
||||
=======================================================================
|
||||
======================================================================
|
||||
Q. What can I do to avoid those "SSL read/write errors"?
|
||||
|
||||
R0. Windows users: upgrade to imapsync.exe release 1.836 (or next ones)
|
||||
Those errors don't appear with recent releases, post 1.836
|
||||
Those errors appear less often with imapsync releases post 1.836
|
||||
|
||||
R1. Remove all ssl/tls encryption
|
||||
|
||||
@ -70,8 +94,9 @@ R5. Set up a ssltunnel proxy to the host.
|
||||
Read the file FAQ.Security.txt for an example to set up
|
||||
a ssltunnel proxy.
|
||||
|
||||
=======================================================================
|
||||
Q. SSL connect attempt failed SSL
|
||||
======================================================================
|
||||
Q. What are the errors
|
||||
SSL connect attempt failed SSL
|
||||
routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure
|
||||
or
|
||||
SSL connect attempt failed SSL
|
||||
@ -145,8 +170,14 @@ when they receive a TLS version 1.1 request.
|
||||
In this case setting the version
|
||||
to 'SSLv23:!SSLv2:!SSLv3:!TLSv1_1:!TLSv1_2' might help.
|
||||
|
||||
======================================================================
|
||||
Q. What is the error
|
||||
fatal SSL error: SSL connect attempt failed with unknown error
|
||||
SSL wants a read first
|
||||
|
||||
=======================================================================
|
||||
R. If you're using --ssl1 or --ssl2, try instead --tls1 or --tls2
|
||||
|
||||
======================================================================
|
||||
Q. How to see the certificate and identify problems in it?
|
||||
|
||||
R. Use the command openssl like this:
|
||||
@ -193,7 +224,6 @@ ggEBAMUTJVdrTl86nDI2yO6Vz5l1qxMMPqJylQcgi9vDHpwsnUq5HGPv+qZNhM69
|
||||
...
|
||||
|
||||
|
||||
|
||||
After an complete server update ("apt update && apt upgrade && /etc/init.d/dovecot restart"):
|
||||
|
||||
echo | openssl s_client -crlf -connect test1.lamiral.info:993
|
||||
@ -220,6 +250,7 @@ EnRlc3QxLmxhbWlyYWwuaW5mbzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
|
||||
ggEBANuPNbYLPMZ4vPa9NBoHAUdIXqpi0eqdXMXd2sT+qRmqxS5ihr999BHOROcr
|
||||
...
|
||||
|
||||
Champagne!
|
||||
|
||||
=======================================================================
|
||||
=======================================================================
|
||||
======================================================================
|
||||
======================================================================
|
||||
|
||||
@ -1,45 +1,122 @@
|
||||
#!/bin/cat
|
||||
# $Id: FAQ.Security.txt,v 1.23 2021/06/22 15:32:10 gilles Exp gilles $
|
||||
# $Id: FAQ.Security.txt,v 1.26 2021/07/11 12:11:38 gilles Exp gilles $
|
||||
|
||||
This document is also available online at
|
||||
https://imapsync.lamiral.info/FAQ.d/
|
||||
https://imapsync.lamiral.info/FAQ.d/FAQ.Security.txt
|
||||
|
||||
|
||||
=======================================================================
|
||||
Imapsync tips about security. Issues and solutions.
|
||||
=======================================================================
|
||||
|
||||
SSL: going to encryption before the imap session start.
|
||||
It is on port 993.
|
||||
Questions answered in this FAQ are:
|
||||
|
||||
TLS: going to encryption after the imap session start but before
|
||||
the credential are sent. It is on port 143.
|
||||
Q. Is running this program a secure method of transferring emails?
|
||||
Are there any security concerns?
|
||||
|
||||
Q. Does imapsync refer to SSL security protocols with --ssl1 and --ssl2
|
||||
and does it refer to TLS security protocols with the --tls1 and --tls2
|
||||
options?
|
||||
Short answer: No.
|
||||
|
||||
Q. I noticed that the online UI has no option for TLS/SSL.
|
||||
Is this secure?
|
||||
Is this more secure than using the .bat file on my computer?
|
||||
|
||||
Q. Are transferred emails/attachments stored on any other
|
||||
server/location aside from my originating/destination server(s)?
|
||||
|
||||
Q. Other than changing passwords on the originating/destination email
|
||||
accounts once the relevant emails have been moved,
|
||||
are there any other security tips I should know?
|
||||
|
||||
Q. I need to transfer mail from an imap server to another imap server.
|
||||
Which ports need to be open on the firewall to make this possible?
|
||||
|
||||
Q. Does imapsync support the IMAP command STARTTLS?
|
||||
|
||||
Q. Does imapsync support IMAP over SSL/TLS (IMAPS)?
|
||||
|
||||
Q. How can I test an ssl/tls imap connection without imapsync?
|
||||
|
||||
Q. How can I manually test login using --ssl?
|
||||
|
||||
Q. Imapsync used to use SSL_VERIFY_PEER now it uses SSL_VERIFY_NONE.
|
||||
How can I change this back to the more secure SSL_VERIFY_PEER?
|
||||
|
||||
Q: How can I have an imaps server?
|
||||
|
||||
Now the questions again with their answers.
|
||||
|
||||
=======================================================================
|
||||
Q. Is running this program a secure method of transferring emails?
|
||||
Are there any security concerns?
|
||||
|
||||
R. Well, it depends. Use encryption, secure the access to the host running
|
||||
imapsync and everything shall be safe.
|
||||
R. Well, it depends. Use encryption and secure access to the host running
|
||||
imapsync then everything shall be safe.
|
||||
|
||||
=======================================================================
|
||||
Q. I noticed that the online UI has no option for TLS/SSL
|
||||
Is this secure? Is this more secure that using the .bat file
|
||||
on my computer?
|
||||
Q. Does imapsync refer to SSL security protocols with --ssl1 and --ssl2
|
||||
and does it refer to TLS security protocols with the --tls1 and --tls2
|
||||
options?
|
||||
Short answer: No.
|
||||
|
||||
R1. The online UI does TLS/SSL imap connections if the imap
|
||||
servers support TLS/SSL. If you are concerned by security then
|
||||
using the .bat file or .sh on your computer should be more secure
|
||||
since you can examine and secure it by yourself, no matter high is
|
||||
your paranoid spirit. The online UI security is mine, I am
|
||||
concerned by security, not to the upmost high level possible
|
||||
but I won't give you direct access to the host to discover my level.
|
||||
With a good guy spirit, feel free to try to break the online UI
|
||||
security and report me any security issue you encounter, I'll do my
|
||||
best to fix them as soon as possible. Drop me a note before
|
||||
starting because I may detect a sort of abuse and ban
|
||||
definitively your IPs.
|
||||
R. No.
|
||||
|
||||
Imapsync behaviour:
|
||||
|
||||
--ssl: Goes to encryption before the imap session start.
|
||||
The connection is on port 993.
|
||||
Can use the TLS or SSL security protocols.
|
||||
Fails if encryption cannot be established.
|
||||
|
||||
--tls: Goes to encryption after the imap session start but before the
|
||||
credential are sent.
|
||||
The connection is on port 143.
|
||||
Can use the TLS or SSL securityprotocols.
|
||||
Fails if encryption cannot be established.
|
||||
|
||||
Explanation:
|
||||
|
||||
To force transferring emails over an encrypted connection, you can use
|
||||
the imapsync parameters --ssl1 and --ssl2 or the parameters --tls1 and
|
||||
--tls2, they all force the connection to be encrypted by the security
|
||||
protocols series SSL/TLS.
|
||||
|
||||
In a security context, SSL refers to all deprecated Secure Sockets
|
||||
Layer protocols. TLS refers to the SSL successors, Transport Layer
|
||||
Security protocols. But TLS 1.0 and TLS 1.1 are also deprecated.
|
||||
|
||||
Current endorsed versions of TLS are only TLS 1.2 and TLS 1.3 (July 2021).
|
||||
|
||||
The whole story is detailed here:
|
||||
https://en.wikipedia.org/wiki/Transport_Layer_Security
|
||||
|
||||
Options --ssl1 and --ssl2 are a little more paranoid than --tls1 and
|
||||
--tls2 because they verify that the hostname of the certificate is the
|
||||
same as the one used by imapsync. Other than that, the security
|
||||
behavior is the same.
|
||||
|
||||
=======================================================================
|
||||
Q. I noticed that the online UI has no option for TLS/SSL.
|
||||
Is this secure?
|
||||
Is this more secure than using the .bat file on my computer?
|
||||
|
||||
R1. The online UI does TLS/SSL imap connections if the imap servers
|
||||
support TLS/SSL.
|
||||
|
||||
If you are concerned about security then using the .bat file or .sh on
|
||||
your computer should be more secure since you can examine and secure
|
||||
it by yourself, no matter high is your paranoid spirit compared to
|
||||
mine.
|
||||
|
||||
The online UI security is mine, I am concerned by security, not to the
|
||||
utmost high level possible but I won't give you direct access to the
|
||||
host to discover my level. With a good guy spirit, feel free to try
|
||||
to break the online UI security and report me any security issue you
|
||||
encounter, I'll do my best to fix them as soon as possible. Drop me a
|
||||
note before starting because I may detect a sort of abuse and ban your
|
||||
IPs.
|
||||
|
||||
=======================================================================
|
||||
Q. Are transferred emails/attachments stored on any other
|
||||
@ -48,15 +125,15 @@ Q. Are transferred emails/attachments stored on any other
|
||||
R. No!
|
||||
|
||||
=======================================================================
|
||||
Q. Other than changing passwords on the originating/destination email
|
||||
accounts once the relevant emails have been moved,
|
||||
Q. Other than changing passwords on the originating/destination email
|
||||
accounts once the relevant emails have been moved,
|
||||
are there any other security tips I should know?
|
||||
|
||||
R. Secure the host where imapsync is running since credentials are
|
||||
on it.
|
||||
R. Yes. Secure the host where imapsync is running since credentials
|
||||
are on it.
|
||||
|
||||
=======================================================================
|
||||
Q. I need to transfer mail from an imap server to an other imap server.
|
||||
Q. I need to transfer mail from an imap server to another imap server.
|
||||
Which ports need to be open on the firewall to make this possible?
|
||||
|
||||
R. It depends. Open either:
|
||||
@ -64,29 +141,31 @@ R. It depends. Open either:
|
||||
* port 993 in ssl mode (--ssl1 or --ssl2)
|
||||
|
||||
=======================================================================
|
||||
Q. Does imapsync support IMAP TLS?
|
||||
Q. Does imapsync support the IMAP command STARTTLS?
|
||||
|
||||
R1. Yes.
|
||||
Use --tls1 and/or --tls2 options:
|
||||
|
||||
--tls1 tells imapsync to use tls on host1.
|
||||
--tls2 tells imapsync to use tls on host2.
|
||||
Use --tls1 and --tls2 options:
|
||||
|
||||
R2. Since imapsync release 1.755 TLS mode is activated automatically
|
||||
if the server announce it supports it, STARTTLS inside the response
|
||||
to CAPABILITY, and if neither --notls nor --ssl is explicitely
|
||||
mentioned on the command line options.
|
||||
--tls1 tells imapsync to use STARTTLS on host1.
|
||||
--tls2 tells imapsync to use STARTTLS on host2.
|
||||
|
||||
R2. Since imapsync release 1.755 STARTTLS mode is activated
|
||||
automatically when the server announces that it supports it by
|
||||
listing STARTTLS inside the response to the CAPABILITY command.
|
||||
If either --notls or --ssl are explicitly mentioned on the
|
||||
command-line options then STARTTLS won't be done.
|
||||
|
||||
=======================================================================
|
||||
Q. Does imapsync support IMAP over SSL (IMAPS)?
|
||||
Q. Does imapsync support IMAP over SSL/TLS (IMAPS)?
|
||||
|
||||
R. Yes natively since release 1.161.
|
||||
Still, there are 2 ways, at least, to use ssl:
|
||||
|
||||
a) Use native --ssl1 and/or --ssl2 options
|
||||
|
||||
--ssl1 tells imapsync to use ssl on host1.
|
||||
--ssl2 tells imapsync to use ssl on host2.
|
||||
--ssl1 tells imapsync to use ssl/tls on host1.
|
||||
--ssl2 tells imapsync to use ssl/tls on host2.
|
||||
|
||||
|
||||
b) Use stunnel
|
||||
@ -108,18 +187,18 @@ b) Use stunnel
|
||||
If the local port 143 is already taken then use a free one,
|
||||
like 10143 for example.
|
||||
|
||||
c) Other example for accessing gmail with no local root access
|
||||
to open port 143
|
||||
c) Another example for accessing Gmail with no local root access
|
||||
to open port 143:
|
||||
|
||||
stunnel3 -P '' -c -d 9993 -r imap.gmail.com:993 -f
|
||||
|
||||
Then, to access gmail as host2 use:
|
||||
Then, to access Gmail as host2 use:
|
||||
|
||||
imapsync ... --host2 localhost --port2 9993 --nossl2
|
||||
|
||||
|
||||
=======================================================================
|
||||
Q.How can I test an ssl imap connection without imapsync?
|
||||
Q.How can I test an ssl/tls imap connection without imapsync?
|
||||
|
||||
R1. Use either ncat or telnet-ssl or openssl commands like in the
|
||||
following examples with imap.gmail.com server:
|
||||
@ -133,37 +212,39 @@ R1. Use either ncat or telnet-ssl or openssl commands like in the
|
||||
The previous commands are interactive, hit ctrl-c
|
||||
to finish them. If you want to finish automatically, then use:
|
||||
|
||||
{ sleep 2; echo "a logout"; sleep 1; } | ncat --ssl -C imap.gmail.com 993
|
||||
{ sleep 2; echo "A LOGOUT"; sleep 1; } | ncat --ssl -C imap.gmail.com 993
|
||||
|
||||
|
||||
=======================================================================
|
||||
Q. How can I manually test a login via ssl?
|
||||
Q. How can I manually test login using --ssl?
|
||||
|
||||
R. Use either ncat or telnet-ssl or openssl commands like in the
|
||||
following examples with imap.gmail.com server:
|
||||
|
||||
ncat --ssl -C imap.gmail.com 993
|
||||
|
||||
telnet-ssl -z ssl imap.gmail.com 993
|
||||
|
||||
openssl s_client -crlf -connect imap.gmail.com:993
|
||||
|
||||
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
|
||||
a LOGIN "gilles.lamiral@gmail.com" "secret"
|
||||
A1 LOGIN "gilles.lamiral@gmail.com" "secret"
|
||||
* CAPABILITY IMAP4rev1 UNSELECT IDLE NAMESPACE ... ESEARCH
|
||||
a OK gilles.lamiral@gmail.com Gilles Lamiral authenticated (Success)
|
||||
b LOGOUT
|
||||
A1 OK gilles.lamiral@gmail.com Gilles Lamiral authenticated (Success)
|
||||
A2 LOGOUT
|
||||
* BYE LOGOUT Requested
|
||||
b OK 73 good day (Success)
|
||||
A2 OK 73 good day (Success)
|
||||
|
||||
The client part you have to type is
|
||||
a LOGIN ...
|
||||
b LOGOUT
|
||||
A1 LOGIN ...
|
||||
A2 LOGOUT
|
||||
while replacing ... by your credentials values,
|
||||
other lines are the server responses.
|
||||
|
||||
=======================================================================
|
||||
Q.How can I test an tls imap connection without imapsync?
|
||||
Q. How can I test a STARTTLS imap connection without imapsync?
|
||||
|
||||
R1. Use openssl command like the following example with
|
||||
an outlook.office365.com server:
|
||||
@ -177,13 +258,12 @@ to finish them. If you want to finish automatically, then use:
|
||||
|
||||
Replace outlook.office365.com with your imap server name.
|
||||
|
||||
|
||||
======================================================================
|
||||
Q. Imapsync used to use SSL_VERIFY_PEER now it uses SSL_VERIFY_NONE.
|
||||
How can I change this back to the more secure SSL_VERIFY_PEER?
|
||||
|
||||
|
||||
R2. After imapsync 1.673,
|
||||
R. After imapsync 1.673,
|
||||
to set SSL_verify_mode to SSL_VERIFY_PEER on host1
|
||||
and SSL_verify_mode to SSL_VERIFY_NONE on host2
|
||||
|
||||
@ -191,18 +271,20 @@ R2. After imapsync 1.673,
|
||||
--sslargs1 SSL_verify_mode=1 \
|
||||
--sslargs2 SSL_verify_mode=0
|
||||
|
||||
See perldoc IO::Socket::SSL for all possibilities, also at
|
||||
See "perldoc IO::Socket::SSL" for all possibilities, also at
|
||||
http://search.cpan.org/perldoc?IO%3A%3ASocket%3A%3ASSL
|
||||
|
||||
It might be possible you need an extra:
|
||||
--sslargs1 SSL_ca_file=/etc/ssl/certs/ca-certificates.crt
|
||||
It might be possible you need an extra option
|
||||
|
||||
--sslargs1 SSL_ca_file=/etc/ssl/certs/ca-certificates.crt
|
||||
|
||||
to help the ssl software verifying the server certificate.
|
||||
The file ca-certificates.crt may be elsewhere on your system, even
|
||||
named differently.
|
||||
|
||||
The imap server certificates are not checked for authenticity
|
||||
(by default) because too many imap servers are crappy configured
|
||||
regarding certified certificates.
|
||||
by imapsync by default because too many imap servers are crappy
|
||||
configured regarding certified certificates.
|
||||
|
||||
This default behavior is chosen like this because users
|
||||
want their emails transferred, instead of being not transferred
|
||||
@ -211,12 +293,13 @@ because of an incompetent imap server sysadmin.
|
||||
I admit that this part, checking imap ssl/tls certificates,
|
||||
could be improved from my side by including well known
|
||||
certificates directly in imapsync.
|
||||
Drop me a note to encourage me.
|
||||
Drop me a note to encourage me, I'm lazy.
|
||||
|
||||
=======================================================================
|
||||
Q: How to have an imaps server?
|
||||
Q: How can I have an imaps server?
|
||||
|
||||
R. Three solutions.
|
||||
|
||||
R.
|
||||
a) Install one
|
||||
|
||||
b) or use stunnel :
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
$Id: FAQ.Two_Ways_Sync.txt,v 1.5 2021/06/10 11:21:09 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
|
||||
https://imapsync.lamiral.info/FAQ.d/
|
||||
@ -6,18 +6,9 @@ https://imapsync.lamiral.info/FAQ.d/FAQ.Two_Ways_Sync.txt
|
||||
|
||||
|
||||
=======================================================================
|
||||
Two ways sync with Imapsync
|
||||
================ Two ways sync with Imapsync =========================
|
||||
=======================================================================
|
||||
|
||||
|
||||
Questions answered in this FAQ are:
|
||||
|
||||
Q. Can Imapsync do a good "two ways" sync?
|
||||
Short answer: no, not a good one. Why?
|
||||
|
||||
|
||||
Now the questions again with their answers.
|
||||
|
||||
=======================================================================
|
||||
Q. Can Imapsync do a good "two ways" sync?
|
||||
Short answer: no, not a good one. Why?
|
||||
@ -30,14 +21,15 @@ stateless.
|
||||
Each time imapsync runs, it considers messages and folders as if it
|
||||
were the first time it encounters them. Imapsync looks at messages,
|
||||
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
|
||||
between an account A and an account B?
|
||||
|
||||
The problem arises with deletions, messages deletions, folders
|
||||
deletions, or movings, messages movings across folders, folders
|
||||
movings, and also folders renamings. Deletions and moves are ambiguous
|
||||
deletions, or with moves, messages moves across folders, folders
|
||||
moves, and also folders renamings. Deletions and moves are ambiguous
|
||||
changes when combined with creations on the opposite side.
|
||||
|
||||
For example, if a message is deleted from A by a user, then imapsync
|
||||
@ -47,21 +39,65 @@ that has to be copied from B.
|
||||
|
||||
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
|
||||
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
|
||||
that has to be copied to A then run a sync from B to A.
|
||||
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.
|
||||
|
||||
If you know it's a mixed scenario, some deletions/moves on A,
|
||||
and some deletions/moves on B, but not the same, then you are in
|
||||
trouble and so you end up with a not very good "two ways" sync.
|
||||
I suggest to avoid imapsync to do deletions in that case, which is
|
||||
the default imapsync behavior.
|
||||
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
|
||||
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
|
||||
to A, put the two accounts in a synchronized state. The deletions of
|
||||
messages on either side get cancelled, deleted messages come back. A
|
||||
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/
|
||||
|
||||
With a two ways sync, the account user is very surprised and
|
||||
disapointed when his actions (deletions, renamings, or movings) come
|
||||
back: the deletions are cancelled, the renamings and movings end up
|
||||
with duplicates.
|
||||
|
||||
=======================================================================
|
||||
=======================================================================
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
#!/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
|
||||
https://imapsync.lamiral.info/FAQ.d/
|
||||
@ -35,6 +35,23 @@ Details:
|
||||
so --delete2 is needed to sync the deletion.
|
||||
* 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:
|
||||
* adding folder => no problem, unless --delete2folders is used
|
||||
* deleting folder => will reappear by a new sync
|
||||
@ -42,5 +59,7 @@ Details:
|
||||
* deleting message => might reappear by a new sync.
|
||||
* message flag change => will be reseted by a new sync.
|
||||
|
||||
|
||||
|
||||
=======================================================================
|
||||
=======================================================================
|
||||
@ -1,5 +1,5 @@
|
||||
#!/bin/cat
|
||||
$Id: FAQ.XOAUTH2.txt,v 1.17 2021/01/21 13:25:02 gilles Exp gilles $
|
||||
$Id: FAQ.XOAUTH2.txt,v 1.18 2022/04/05 13:48:52 gilles Exp gilles $
|
||||
|
||||
This document is also available online at
|
||||
https://imapsync.lamiral.info/FAQ.d/
|
||||
@ -154,7 +154,7 @@ also called cpanminus.
|
||||
|
||||
The code and first explanation comes from Joaquin Lopez at
|
||||
https://github.com/imapsync/imapsync/pull/25
|
||||
http://www.linux-france.org/prj/imapsync_list/msg02129.html
|
||||
http://linux-france.tk/prj/imapsync_list/msg02129.html
|
||||
|
||||
Also, the binary command "openssl" is needed since it is used to
|
||||
convert the pk12 file.
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
|
||||
$Id: FAQ.Yahoo.txt,v 1.12 2021/05/04 11:04:51 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
|
||||
https://imapsync.lamiral.info/FAQ.d/
|
||||
@ -18,24 +18,6 @@ Q. Synchronizing from XXX to Yahoo
|
||||
|
||||
Now the questions again with their answers.
|
||||
|
||||
Some explanation about the options given later:
|
||||
|
||||
https://imapsync.lamiral.info/README
|
||||
...
|
||||
--noabletosearch : Makes --minage and --maxage options use the internal
|
||||
dates given by a FETCH imap command instead of the
|
||||
"Date:" header. Internal date is the arrival date
|
||||
in the mailbox.
|
||||
--noabletosearch equals --noabletosearch1 --noabletosearch2
|
||||
|
||||
--regexmess reg : Apply the whole regex to each message before transfer.
|
||||
Example: 's/\000/ /g' # to replace null by space.
|
||||
--regexmess reg : and this one, etc.
|
||||
|
||||
I'm not sure anymore about the need of --noabletosearch with Yahoo, maybe
|
||||
they fixed the issue about the standard imap searching command SEARCH
|
||||
they didn't honor before.
|
||||
|
||||
=======================================================================
|
||||
Q. Synchronizing from Yahoo to XXX
|
||||
|
||||
@ -49,8 +31,7 @@ Example:
|
||||
--password1 billysecreta \
|
||||
--host2 XXX \
|
||||
--user2 Billy@other.com \
|
||||
--password2 billysecretb \
|
||||
--noabletosearch
|
||||
--password2 billysecretb
|
||||
|
||||
|
||||
You also need to go to Yahoo, security and enable
|
||||
@ -83,6 +64,7 @@ Q. Synchronizing from XXX to Yahoo
|
||||
|
||||
R. Example:
|
||||
|
||||
On Linux:
|
||||
./imapsync \
|
||||
--host1 XXX \
|
||||
--user1 Billy@other.com \
|
||||
@ -90,7 +72,19 @@ R. Example:
|
||||
--host2 imap.mail.yahoo.com \
|
||||
--user2 Billy@yahoo.com \
|
||||
--password2 billysecretb \
|
||||
--noabletosearch --regexmess "s{(?<![\n])\z}{\r\n}gxms"
|
||||
--regexmess 's{(?<![\n])\z}{\r\n}gxms'
|
||||
|
||||
On Windows:
|
||||
imapsync.exe \
|
||||
--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"
|
||||
|
||||
|
||||
|
||||
You wonder why there is this ugly regex, what it does and where does it
|
||||
come from?
|
||||
@ -101,5 +95,11 @@ when copying some messages to Yahoo.
|
||||
It adds a final \r\n on a message if a final \r\n is missing.
|
||||
See https://github.com/imapsync/imapsync/issues/209
|
||||
|
||||
https://imapsync.lamiral.info/README
|
||||
...
|
||||
--regexmess reg : Apply the whole regex to each message before transfer.
|
||||
Example: 's/\000/ /g' # to replace null by space.
|
||||
--regexmess reg : and this one, etc.
|
||||
|
||||
=======================================================================
|
||||
=======================================================================
|
||||
|
||||
24
FAQ.d/FAQ.iCloud.txt
Normal file
24
FAQ.d/FAQ.iCloud.txt
Normal 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.
|
||||
@ -1,5 +1,5 @@
|
||||
|
||||
# $Id: htaccess.txt,v 1.31 2021/05/29 08:09:11 gilles Exp gilles $
|
||||
# $Id: htaccess.txt,v 1.33 2022/04/06 10:27:52 gilles Exp gilles $
|
||||
|
||||
|
||||
AddDescription "<b>Back</b> to Imapsync main page." ..
|
||||
@ -40,13 +40,16 @@ AddDescription "<b>Flags tips and issues</b>." FAQ.Flag
|
||||
AddDescription "<b>General Data Protection Regulation</b> (GDPR)." FAQ.GDPR.txt
|
||||
AddDescription "<b>General</b> and <b>pot-pourri</b> issues" FAQ.General.txt
|
||||
AddDescription "<b>Gmail</b> accounts." FAQ.Gmail.txt
|
||||
AddDescription "<b>GoDaddy</b> accounts." FAQ.GoDaddy.txt
|
||||
AddDescription "<b>IceWarp</b> accounts." FAQ.IceWarp.txt
|
||||
AddDescription "<b>ISP tips</b>." FAQ.ISP.txt
|
||||
AddDescription "<b>James</b> accounts." FAQ.James.txt
|
||||
AddDescription "<b>Kerio</b> accounts." FAQ.Kerio.txt
|
||||
AddDescription "<b>MailEnable</b> accounts." FAQ.MailEnable.txt
|
||||
AddDescription "<b>Massive/bulk migrations</b>." FAQ.Massive.txt
|
||||
AddDescription "<b>Memory issues</b>." FAQ.Memory.txt
|
||||
AddDescription "<b>Migration Plan</b>." FAQ.Migration_Plan.txt
|
||||
AddDescription "<b>Massive and bulk</b> migrations." FAQ.Massive.txt
|
||||
AddDescription "<b>Log file, content, errors and tips</b>." FAQ.Logfile.txt
|
||||
AddDescription "<b>Memory</b> issues." FAQ.Memory.txt
|
||||
AddDescription "Migration <b>Plan</b>." FAQ.Migration_Plan.txt
|
||||
AddDescription "<b>Office365</b> accounts." FAQ.Office365.txt
|
||||
AddDescription "<b>The Online UI service Q&R</b>." FAQ.OnlineUI.txt
|
||||
AddDescription "<b>Password & special characters on Windows</b>." FAQ.Passwords_on_Windows.txt
|
||||
@ -56,7 +59,7 @@ AddDescription "<b>POP3 issues</b>." FAQ.POP3
|
||||
AddDescription "<b>Principles & design decisions</b>." FAQ.Principles.txt
|
||||
AddDescription "<b>Selecting messages</b>." FAQ.Messages_Selection.txt
|
||||
AddDescription "<b>How to transfer too big messages</b>." FAQ.Messages_Too_Big.txt
|
||||
AddDescription "<b>Why the imapsync web site looks so old?</b>" FAQ.Old_Style_Web_Design.txt
|
||||
AddDescription "Why the imapsync web site <b>looks so old?</b>" FAQ.Old_Style_Web_Design.txt
|
||||
AddDescription "<b>UCS</b> accounts." FAQ.UCS.txt
|
||||
|
||||
AddDescription "<b>Checklist before release a new release</b>." FAQ.Release_Checklist.txt
|
||||
|
||||
61
INSTALL.d/Dockerfile
Executable file → Normal file
61
INSTALL.d/Dockerfile
Executable file → Normal file
@ -1,39 +1,48 @@
|
||||
## Dockerfile for building a docker imapsync image
|
||||
|
||||
# $Id: Dockerfile,v 1.30 2020/03/26 07:15:04 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:
|
||||
#
|
||||
# docker build -t gilleslamiral/imapsync .
|
||||
#
|
||||
# where this Dockerfile is in the current directory
|
||||
#
|
||||
# This Dockerfile build an image with two imapsync
|
||||
# 1) One comes from https://imapsync.lamiral.info/imapsync
|
||||
# and goes to /usr/bin/imapsync in the Docker image
|
||||
# It is used with the command:
|
||||
#
|
||||
# docker run gilleslamiral/imapsync imapsync ...
|
||||
#
|
||||
# 2) One comes from the local file ./imapsync
|
||||
# and goes to /imapsync in the Docker image
|
||||
# It is used with the command:
|
||||
#
|
||||
# docker run gilleslamiral/imapsync /imapsync ...
|
||||
|
||||
|
||||
# I thank you very much
|
||||
# I like thanks
|
||||
# I like stars
|
||||
# I also like (and need) money
|
||||
# I like money to keep on doing this stuff
|
||||
|
||||
# Number of imapsync images pulled so far (2021_05_29): 368881
|
||||
# Number of imapsync images pulled so far (2022_04_04): 673551
|
||||
# Command used:
|
||||
# curl -s https://hub.docker.com/v2/repositories/gilleslamiral/imapsync/ | jq '.pull_count'
|
||||
|
||||
# Debian Buster is Debian 10
|
||||
# Debian Bullseye is Debian 11
|
||||
|
||||
FROM debian:buster
|
||||
FROM debian:bullseye
|
||||
|
||||
LABEL maintainer="Gilles LAMIRAL <gilles@lamiral.info>" \
|
||||
description="Imapsync" \
|
||||
documentation="https://imapsync.lamiral.info/#doc"
|
||||
|
||||
# Put a copy of the Dockerfile in the image itself
|
||||
# It can help future maintenance, isn't it?
|
||||
# I put a copy of the Dockerfile in the image itself
|
||||
# It can help maintenance, isn't it?
|
||||
# Also put optionally my local and usually more recent imapsync on /, for testing purpose
|
||||
|
||||
COPY Dockerfile /
|
||||
|
||||
# Also put my local imapsync on /usr/bin/ for testing purpose
|
||||
# renamed imapsync_local since would be erased by the wget
|
||||
|
||||
COPY imapsync /usr/bin/imapsync_local
|
||||
COPY prerequisites_imapsync /usr/bin/prerequisites_imapsync_local
|
||||
COPY Dockerfile imapsyn[c] prerequisites_imapsyn[c] /
|
||||
|
||||
RUN set -xe && \
|
||||
apt-get update \
|
||||
@ -41,10 +50,12 @@ RUN set -xe && \
|
||||
libauthen-ntlm-perl \
|
||||
libcgi-pm-perl \
|
||||
libcrypt-openssl-rsa-perl \
|
||||
libcrypt-openssl-pkcs12-perl \
|
||||
libdata-uniqid-perl \
|
||||
libencode-imaputf7-perl \
|
||||
libfile-copy-recursive-perl \
|
||||
libfile-tail-perl \
|
||||
libfile-tail-perl \
|
||||
libio-compress-perl \
|
||||
libio-socket-ssl-perl \
|
||||
libio-socket-inet6-perl \
|
||||
libio-tee-perl \
|
||||
@ -54,6 +65,7 @@ RUN set -xe && \
|
||||
libparse-recdescent-perl \
|
||||
libmodule-scandeps-perl \
|
||||
libpar-packer-perl \
|
||||
libproc-processtable-perl \
|
||||
libreadonly-perl \
|
||||
libregexp-common-perl \
|
||||
libsys-meminfo-perl \
|
||||
@ -70,16 +82,21 @@ RUN set -xe && \
|
||||
lsof \
|
||||
ncat \
|
||||
openssl \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
ca-certificates \
|
||||
&& rm -rf /var/lib/apt/lists/* \
|
||||
&& cpanm IO::Socket::SSL
|
||||
|
||||
# I added the IO::Socket::SSL update to avoid the annoying, confusing and useless warning
|
||||
# DEBUG: .../IO/Socket/SSL.pm:1177: global error: Undefined SSL object
|
||||
|
||||
RUN set -xe \
|
||||
&& cd /usr/bin/ \
|
||||
&& pwd \
|
||||
&& wget -N https://imapsync.lamiral.info/imapsync \
|
||||
https://imapsync.lamiral.info/prerequisites_imapsync \
|
||||
https://raw.githubusercontent.com/google/gmail-oauth2-tools/master/python/oauth2.py
|
||||
&& mv imapsync oauth2.py /usr/bin/ \
|
||||
&& chmod +x /usr/bin/imapsync /usr/bin/imapsync_local /usr/bin/oauth2.py # just_a_comment_to_force_update 2019_11_26_12_58_34
|
||||
|
||||
&& wget -N --no-check-certificate https://imapsync.lamiral.info/imapsync \
|
||||
https://imapsync.lamiral.info/prerequisites_imapsync \
|
||||
https://raw.githubusercontent.com/google/gmail-oauth2-tools/master/python/oauth2.py \
|
||||
&& chmod +x imapsync oauth2.py \
|
||||
&& /usr/bin/imapsync --testslive && /usr/bin/imapsync --tests # just_a_comment_to_force_update 2022_04_04_21_16_50
|
||||
|
||||
USER nobody:nogroup
|
||||
|
||||
|
||||
@ -42,7 +42,7 @@ Those documents are also available at https://imapsync.lamiral.info/INSTALL.d/
|
||||
- Docker
|
||||
- Online UI like /X
|
||||
|
||||
If you are not familiar with any of these systems but you have to chose
|
||||
If you are not familiar with any of these systems but you have to choose
|
||||
one to install imapsync, imapsync online, or the latest imapsync then
|
||||
Centos 7 (not 8 for now) is the easiest system to consider (June 2020).
|
||||
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
#!/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
|
||||
https://imapsync.lamiral.info/INSTALL.d/
|
||||
@ -43,7 +43,8 @@ To install a more recent imapsync
|
||||
perl-Test-NoWarnings \
|
||||
perl-Test-Simple \
|
||||
perl-Test-Warn \
|
||||
perl-Sub-Uplevel
|
||||
perl-Sub-Uplevel \
|
||||
perl-Proc-ProcessTable
|
||||
|
||||
sudo cpanm Encode::IMAPUTF7
|
||||
wget -N https://imapsync.lamiral.info/imapsync
|
||||
@ -96,6 +97,7 @@ perl-Test-Requires \
|
||||
perl-Try-Tiny \
|
||||
perl-Unicode-String \
|
||||
perl-URI \
|
||||
perl-Proc-ProcessTable \
|
||||
cpanminus
|
||||
|
||||
sudo cpanm Authen::NTLM Data::Uniqid IO::Tee \
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
#!/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
|
||||
https://imapsync.lamiral.info/INSTALL.d/
|
||||
@ -88,7 +88,8 @@ Other Perl modules, needed sometimes:
|
||||
JSON::WebToken::Crypt::RSA \
|
||||
Test::Mock::Guard \
|
||||
Test::Warn \
|
||||
PAR::Packer
|
||||
PAR::Packer \
|
||||
Proc::ProcessTable
|
||||
|
||||
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
#!/bin/cat
|
||||
# $Id: INSTALL.Centos.txt,v 1.25 2021/02/02 17:08:46 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
|
||||
https://imapsync.lamiral.info/INSTALL.d/
|
||||
@ -9,37 +9,68 @@ https://imapsync.lamiral.info/INSTALL.d/INSTALL.Centos.txt
|
||||
Installing imapsync on CentOS
|
||||
=======================================================================
|
||||
|
||||
There is one section for Centos 8,
|
||||
There is one section for AlmaLinux and Centos 8,
|
||||
one for Centos 7,
|
||||
and one for Centos 6.
|
||||
|
||||
|
||||
=======================================================================
|
||||
Centos 8
|
||||
AlmaLinux and Centos 8
|
||||
=======================================================================
|
||||
|
||||
How to install imapsync on AlmaLinux and Centos 8:
|
||||
|
||||
How to install the latest imapsync on Centos 8
|
||||
dnf install --enablerepo=powertools imapsync
|
||||
imapsync --testslive
|
||||
|
||||
dnf install wget perl-App-cpanminus gcc
|
||||
# then
|
||||
cpanm lazy Test::MockObject
|
||||
wget https://imapsync.lamiral.info/imapsync
|
||||
perl -Mlazy imapsync
|
||||
|
||||
For Centos 8 End Of Life fix:
|
||||
https://www.centos.org/centos-linux-eol/
|
||||
|
||||
If you encounter the error
|
||||
"Error: Failed to download metadata for repo 'appstream': Cannot prepare internal mirrorlist: No URLs in mirrorlist"
|
||||
|
||||
Do this:
|
||||
|
||||
sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-Linux-*
|
||||
sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-Linux-*
|
||||
dnf update
|
||||
|
||||
To upgrade to CentOS stream:
|
||||
|
||||
dnf install centos-release-stream
|
||||
dnf swap centos-{linux,stream}-repos
|
||||
dnf distro-sync
|
||||
|
||||
Taken from
|
||||
https://stackoverflow.com/questions/70926799/centos-through-vm-no-urls-in-mirrorlist
|
||||
|
||||
and tested successfully on one of my hosts, an ex-Centos8/CentOS-stream now.
|
||||
|
||||
=======================================================================
|
||||
AlmaLinux and Centos 8 and latest imapsync
|
||||
=======================================================================
|
||||
|
||||
At the time of this writing (December 2021), the powertools repository
|
||||
contains imapsync release 1.977, which is not the latest available
|
||||
imapsync release. (1.977 date is 2019/12/23 while 2.174 is 2021/12/14)
|
||||
|
||||
In order to install the latest imapsync I suggest the following process:
|
||||
|
||||
Install the powertools imapsync 1.977 release via dnf like mentioned above.
|
||||
It will install the needed packages, Perl itself and Perl modules
|
||||
for release 1.977.
|
||||
|
||||
The imapsync 2.206 and next ones needs the Perl module:
|
||||
|
||||
dnf install perl-Proc-ProcessTable
|
||||
|
||||
wget -N https://imapsync.lamiral.info/imapsync
|
||||
chmod +x imapsync
|
||||
./imapsync --testslive
|
||||
./imapsync --tests
|
||||
|
||||
|
||||
If you encounter the following error during the run of "perl -Mlazy imapsync"
|
||||
...
|
||||
Can't locate object method "new" via package "Archive::Tar" at ...
|
||||
FAIL install IO-String-1.08
|
||||
|
||||
fix it with:
|
||||
wget http://mirror.centos.org/centos/8/PowerTools/x86_64/os/Packages/perl-IO-String-1.08-31.el8.noarch.rpm
|
||||
yum install perl-IO-String-1.08-31.el8.noarch.rpm -y
|
||||
|
||||
See also https://github.com/imapsync/imapsync/issues/211
|
||||
You may get an even more recent imapsync release this way.
|
||||
|
||||
=======================================================================
|
||||
Centos 7
|
||||
@ -72,7 +103,7 @@ Unit tests:
|
||||
|
||||
At the time of this writing (March 2020), the epel7 repository still
|
||||
contains imapsync release 1.727, which is not the latest available
|
||||
imapsync release. (1.727 date is 2016/08/19 while 1.979 is 2020/01/14)
|
||||
imapsync release. (1.727 date is 2016/08/19 while 2.174 is 2021/12/14)
|
||||
|
||||
In order to install the latest imapsync I suggest the following process:
|
||||
|
||||
@ -102,7 +133,9 @@ Then:
|
||||
perl-Test-NoWarnings \
|
||||
perl-Test-Simple \
|
||||
perl-Test-Warn \
|
||||
perl-Sub-Uplevel
|
||||
perl-Sub-Uplevel \
|
||||
perl-Proc-ProcessTable \
|
||||
ca-certificates
|
||||
|
||||
Also, run the following commands:
|
||||
|
||||
@ -185,7 +218,8 @@ Then:
|
||||
perl-Test-Requires \
|
||||
perl-Test-Deep \
|
||||
perl-File-Tail \
|
||||
perl-Unicode-String
|
||||
perl-Unicode-String \
|
||||
perl-Proc-ProcessTable
|
||||
|
||||
wget https://imapsync.lamiral.info/imapsync
|
||||
|
||||
|
||||
@ -1,12 +1,12 @@
|
||||
#!/bin/cat
|
||||
# $Id: INSTALL.Darwin.txt,v 1.34 2021/06/15 10:02:37 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
|
||||
https://imapsync.lamiral.info/INSTALL.d/
|
||||
https://imapsync.lamiral.info/INSTALL.d/INSTALL.Darwin.txt
|
||||
|
||||
|
||||
Usual users should follow the A) section only, with the exeption
|
||||
Usual users should follow the A) section only, with the exception
|
||||
of reading B) before if you use a Catalina system.
|
||||
|
||||
A) Installing imapsync binary on Darwin / Mac OS X
|
||||
@ -20,44 +20,43 @@ E) Building imapsync binary on Darwin / Mac OS X
|
||||
A) Installing imapsync binary on Darwin / Mac OS X
|
||||
=======================================================================
|
||||
|
||||
|
||||
There is a standalone imapsync binary for Mac OS X
|
||||
called "imapsync_bin_Darwin" (without the quotes),
|
||||
available in the compressed tarball called imapsync-1.977.tgz
|
||||
where 1.977 is the imapsync version number.
|
||||
available in the compressed tarball called imapsync-2.200.tgz
|
||||
where 2.200 is the imapsync version number.
|
||||
|
||||
In case you haven't buy it yet or forgot where the download link is,
|
||||
In case you haven't bought it yet or forgot where the download link is,
|
||||
check https://imapsync.lamiral.info/dist/
|
||||
|
||||
Download the tarball imapsync-1.977.tgz, not the binary imapsync_bin_Darwin
|
||||
Download the tarball imapsync-2.200.tgz, not the binary imapsync_bin_Darwin
|
||||
because the binary is also in the tarball and there are other useful files
|
||||
in the tarball. The binary present in /dist/ is just there for a fast upgrade
|
||||
when you need one.
|
||||
|
||||
I suppose this tarball imapsync-1.977.tgz is downloaded under your $HOME directory,
|
||||
let say /Users/gilles/, but you can put it anywhere. In real, your $HOME directory
|
||||
is not /Users/gilles/, it maybe /Users/john/ or /Users/zoey/ where John or Zoey
|
||||
is you login name.
|
||||
Suppose this tarball imapsync-2.200.tgz is downloaded under your $HOME directory,
|
||||
lets say /Users/gilles/, but you can put it anywhere. (But obviously your $HOME
|
||||
directory is not /Users/gilles/, it maybe /Users/john/ or /Users/zoey/ where John
|
||||
or Zoey is your login name.)
|
||||
|
||||
Open a terminal: /Applications/Utilities/Terminal double-click on Terminal.
|
||||
Open a terminal: /Applications/Utilities/Terminal, double-click on Terminal.
|
||||
|
||||
Untar the tarball:
|
||||
|
||||
cd
|
||||
pwd
|
||||
tar xzvf imapsync-1.977.tgz
|
||||
tar xzvf imapsync-2.200.tgz
|
||||
|
||||
In case the previous command fails, it means the tarball file called imapsync-1.977.tgz
|
||||
In case the previous command fails, it means the tarball file called imapsync-2.200.tgz
|
||||
is not in your $HOME directory, you may have downloaded it elsewhere on the file system.
|
||||
A way to find it is the command:
|
||||
|
||||
find / | grep imapsync
|
||||
|
||||
|
||||
Now that the tarball is extracted, it created a directory called imapsync-1.977/
|
||||
Go into the directory imapsync-1.977 with the command:
|
||||
Now that the tarball is extracted, it created a directory called imapsync-2.200/
|
||||
Go into the directory imapsync-2.200 with the command:
|
||||
|
||||
cd imapsync-1.977
|
||||
cd imapsync-2.200
|
||||
|
||||
|
||||
First let's have a simple run to see if imapsync_bin_Darwin works.
|
||||
@ -119,7 +118,7 @@ the script examples/sync_loop_darwin.sh is also ready to use.
|
||||
B) Installing imapsync on Catalina
|
||||
=======================================================================
|
||||
|
||||
Caveat Catalina: The binary imapsync_bin_Darwin is detected as a malware
|
||||
Caveat Catalina: The binary imapsync_bin_Darwin is detected as malware
|
||||
or similar on the latest Mac OS X named Catalina.
|
||||
It's Catalina new security policy. Imapsync is not a malware or similar.
|
||||
All other Mac OS X releases are ok.
|
||||
@ -128,7 +127,7 @@ In order to pass away this detection, follow these steps:
|
||||
|
||||
Run imapsync_bin_Darwin
|
||||
After this first launch, the security asks to authorize the unknown
|
||||
developer program. Setup the root of the imapsync_bin_Darwin file
|
||||
developer program. Set up the root of the imapsync_bin_Darwin file
|
||||
and then run it again or any of the .sh files, it should run ok
|
||||
without any notice any more.
|
||||
|
||||
@ -178,18 +177,19 @@ Install the "make" command in case it is not already installed.
|
||||
|
||||
First let us install cpanminus locally in ~/perl5
|
||||
|
||||
wget --no-check-certificate -O- http://cpanmin.us | perl - -l ~/perl5 App::cpanminus local::lib
|
||||
curl -L https://cpanmin.us | perl - -l ~/perl5 App::cpanminus local::lib
|
||||
|
||||
Then take this install into account in the current environment
|
||||
|
||||
eval `perl -I ~/perl5/lib/perl5 -Mlocal::lib`
|
||||
perl -I ~/perl5/lib/perl5 -Mlocal::lib
|
||||
perl -I ~/perl5/lib/perl5 -Mlocal::lib # just to see the variables
|
||||
eval `perl -I ~/perl5/lib/perl5 -Mlocal::lib` # doing the variables assignments
|
||||
|
||||
If you want to have always this setting in your environment then run the commands
|
||||
|
||||
echo 'eval `perl -I ~/perl5/lib/perl5 -Mlocal::lib`' >> ~/.profile
|
||||
echo 'export MANPATH=$HOME/perl5/man:$MANPATH' >> ~/.profile
|
||||
cat ~/.profile
|
||||
. ~/.profile
|
||||
|
||||
Now let's update the standard CPAN Perl module
|
||||
|
||||
@ -202,18 +202,27 @@ helps to verify what is needed to install on your system
|
||||
sh prerequisites_imapsync
|
||||
|
||||
cpanm Authen::NTLM
|
||||
cpanm File::Copy::Recursive IO::Tee
|
||||
cpanm Mail::IMAPClient
|
||||
cpanm Readonly
|
||||
cpanm IO::Tee
|
||||
cpanm Mail::IMAPClient # File::Copy::Recursive?
|
||||
|
||||
cpanm Unicode::String
|
||||
cpanm Sys::MemInfo
|
||||
cpanm File::Tail
|
||||
cpanm Proc::ProcessTable
|
||||
|
||||
cpanm Test::MockObject
|
||||
|
||||
cpanm Readonly
|
||||
cpanm Data::Uniqid
|
||||
cpanm JSON::WebToken
|
||||
|
||||
We're ready to install and test the latest imapsync
|
||||
|
||||
wget -c http://imapsync.lamiral.info/imapsync
|
||||
curl -L http://imapsync.lamiral.info/imapsync > imapsync
|
||||
chmod +x imapsync
|
||||
./imapsync
|
||||
./imapsync --modules
|
||||
./imapsync --testslive
|
||||
./imapsync --tests
|
||||
|
||||
You can rerun "sh prerequisites_imapsync"
|
||||
to verify everything is ok:
|
||||
@ -223,10 +232,6 @@ to verify everything is ok:
|
||||
When everything is ok the script execution ends with this sentence
|
||||
"All needed modules are already installed"
|
||||
|
||||
Now imapsync should work on your system.
|
||||
|
||||
./imapsync --testslive
|
||||
|
||||
=======================================================================
|
||||
E) Building imapsync binary on Darwin / Mac OS X
|
||||
=======================================================================
|
||||
@ -234,7 +239,7 @@ E) Building imapsync binary on Darwin / Mac OS X
|
||||
cpanm Module::ScanDeps
|
||||
cpanm PAR::Packer
|
||||
|
||||
pp -o imapsync.bin imapsync
|
||||
pp -x -u -o imapsync.bin imapsync
|
||||
|
||||
./imapsync.bin
|
||||
./imapsync.bin --testslive
|
||||
|
||||
@ -1,24 +1,27 @@
|
||||
#!/bin/cat
|
||||
# $Id: INSTALL.Debian.txt,v 1.32 2020/12/11 09:27:29 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
|
||||
https://imapsync.lamiral.info/INSTALL.d/
|
||||
https://imapsync.lamiral.info/INSTALL.d/INSTALL.Debian.txt
|
||||
|
||||
|
||||
There is three install sections in this document,
|
||||
1) one for Debian 9 Stretch and Debian 10 Buster
|
||||
2) one for Debian 8 Jessie
|
||||
3) one for Debian 7 Wheezy
|
||||
There are four install sections in this document,
|
||||
1) one for Debian 9 Stretch, Debian 10 Buster, Debian 11 Bullseye, Debian 12 Bookworm
|
||||
2) one for all the Debian, called "After installing the dependencies".
|
||||
3) one for Debian 8 Jessie (obsolete)
|
||||
4) one for Debian 7 Wheezy (even more obsolete)
|
||||
|
||||
After reading and following 1) or 2) or 3), you'll be invited to read and follow
|
||||
the fourth section "4) After installing the dependencies"
|
||||
After reading and following 1) or 3) or 4), you'll be invited to read and follow
|
||||
the section "2) After installing the dependencies"
|
||||
|
||||
What is your Debian release?
|
||||
Type on a terminal:
|
||||
|
||||
cat /etc/debian_version
|
||||
|
||||
12.x => Bookworm
|
||||
11.x => Bullseye
|
||||
10.x => Buster
|
||||
9.x => Stretch
|
||||
8.x => Jessie
|
||||
@ -27,20 +30,20 @@ Type on a terminal:
|
||||
where x is any number between 0 and 9, x is minor and to be forgotten.
|
||||
|
||||
|
||||
First a call to Debian packagers
|
||||
First, a call to Debian packagers
|
||||
Why imapsync is not in Debian as a package?
|
||||
Imapsync used to be in Debian from 2005-04-25 (release 1.125) to 2011-01-25 (release 1.315).
|
||||
It could be in Debian nowadays, as always, my last words on this discussion were
|
||||
"Do what you want, I promise I won't complain anymore about the fact imapsync is on Debian or not."
|
||||
"Do what you want, I promise I won't complain anymore about the fact imapsync is in Debian or not."
|
||||
https://lists.debian.org/debian-legal/2011/01/msg00058.html
|
||||
The license is now "No limits to do anything with this work and this license".
|
||||
Feel free.
|
||||
The Imapsync license is "No limits to do anything with this work and this license".
|
||||
So feel free!
|
||||
See also a more detailed story at
|
||||
https://lists.debian.org/debian-user/2016/11/msg00849.html
|
||||
|
||||
|
||||
=======================================================================
|
||||
1) Installing imapsync on Debian 9 Stretch or Debian 10 Buster
|
||||
1) Installing imapsync on Debian 9 Stretch, 10 Buster, 11 Bullseye
|
||||
=======================================================================
|
||||
|
||||
How to install imapsync dependencies on a Debian system?
|
||||
@ -48,14 +51,24 @@ How to install imapsync dependencies on a Debian system?
|
||||
The repositories are the classical ones, ie, a
|
||||
/etc/apt/sources.list file with:
|
||||
|
||||
# Debian 9 Stretch
|
||||
deb http://deb.debian.org/debian stretch main contrib
|
||||
# Debian 12 Bookworm
|
||||
deb http://deb.debian.org/debian bookworm main contrib
|
||||
|
||||
or
|
||||
|
||||
# Debian 11 Bullseye
|
||||
deb http://deb.debian.org/debian bullseye main contrib
|
||||
|
||||
or
|
||||
|
||||
# Debian 10 Buster
|
||||
deb http://deb.debian.org/debian buster main contrib
|
||||
|
||||
or
|
||||
|
||||
# Debian 9 Stretch
|
||||
deb http://deb.debian.org/debian stretch main contrib
|
||||
|
||||
|
||||
You need root privilege to run it, be root or use sudo.
|
||||
|
||||
@ -74,6 +87,7 @@ apt install -y \
|
||||
libjson-webtoken-perl \
|
||||
libmail-imapclient-perl \
|
||||
libparse-recdescent-perl \
|
||||
libproc-processtable-perl \
|
||||
libmodule-scandeps-perl \
|
||||
libreadonly-perl \
|
||||
libregexp-common-perl \
|
||||
@ -88,20 +102,64 @@ apt install -y \
|
||||
libtest-deep-perl \
|
||||
libtest-warn-perl \
|
||||
make \
|
||||
time \
|
||||
cpanminus
|
||||
|
||||
|
||||
After installing the dependencies, imapsync should be working,
|
||||
go to the section "4) After installing the dependencies" below.
|
||||
go to the section "2) After installing the dependencies" below.
|
||||
|
||||
=======================================================================
|
||||
2) After installing the dependencies
|
||||
=======================================================================
|
||||
|
||||
You don't have to be root to test and use imapsync.
|
||||
|
||||
Take imapsync either on github:
|
||||
|
||||
wget -N https://raw.githubusercontent.com/imapsync/imapsync/master/imapsync
|
||||
|
||||
or be on the cutting edge with the upstream site:
|
||||
|
||||
wget -N https://imapsync.lamiral.info/imapsync
|
||||
|
||||
Add execution permission to the downloaded script:
|
||||
|
||||
chmod +x imapsync
|
||||
|
||||
Check the dependencies and print also the basic example:
|
||||
|
||||
./imapsync
|
||||
|
||||
Perform a live test showing imapsync job:
|
||||
|
||||
./imapsync --testslive
|
||||
|
||||
Now install imapsync on the system (need root privileges again):
|
||||
|
||||
cp imapsync /usr/bin/
|
||||
|
||||
That's finished for the installation part.
|
||||
You can now use imapsync without knowing where it is located
|
||||
on the system:
|
||||
|
||||
imapsync
|
||||
|
||||
Now go read the menu http://imapsync.lamiral.info/#doc
|
||||
and start with the tutorial
|
||||
https://imapsync.lamiral.info/doc/TUTORIAL_Unix.html
|
||||
|
||||
Feedback is welcome!
|
||||
|
||||
|
||||
=============================================
|
||||
2) Installing imapsync on Debian 8 Jessie
|
||||
=============================================
|
||||
|
||||
=======================================================================
|
||||
3) Installing imapsync on Debian 8 Jessie
|
||||
=======================================================================
|
||||
|
||||
How to install imapsync dependencies on a Debian system?
|
||||
|
||||
You need root priviledge.
|
||||
You need root privilege.
|
||||
|
||||
The first command installs standard Debian packages:
|
||||
apt install \
|
||||
@ -165,16 +223,16 @@ the module JSON::WebToken with the command:
|
||||
cpanm JSON::WebToken
|
||||
|
||||
After installing the dependencies, imapsync should be working,
|
||||
go to the section "4) After installing the dependencies" below.
|
||||
go to the section "2) After installing the dependencies" above.
|
||||
|
||||
|
||||
=======================================================================
|
||||
3) Installing imapsync on Debian 7 Wheezy
|
||||
4) Installing imapsync on Debian 7 Wheezy
|
||||
=======================================================================
|
||||
|
||||
How to install imapsync dependencies on a Debian system?
|
||||
|
||||
You need root priviledge to run the commands.
|
||||
You need root privilege to run the commands.
|
||||
|
||||
The first command installs standard Debian packages:
|
||||
|
||||
@ -234,40 +292,6 @@ the module JSON::WebToken with the command:
|
||||
|
||||
|
||||
After installing the dependencies, imapsync should be working,
|
||||
then go to the section "4) After installing the dependencies" below.
|
||||
|
||||
=======================================
|
||||
4) After installing the dependencies
|
||||
=======================================
|
||||
|
||||
You don't have to be root to test and use imapsync.
|
||||
|
||||
Take imapsync either on github or at the upstream site.
|
||||
|
||||
Add execution permission to the downloaded script:
|
||||
|
||||
chmod +x imapsync
|
||||
|
||||
Check the dependencies and print also the basic example:
|
||||
|
||||
./imapsync
|
||||
|
||||
Perform a live test showing imapsync job:
|
||||
|
||||
./imapsync --testslive
|
||||
|
||||
Now install imapsync on the system (need root priviledges again):
|
||||
|
||||
cp imapsync /usr/bin/
|
||||
|
||||
That's finished for the installation part.
|
||||
You can now use imapsync without knowing where it is located
|
||||
on the system:
|
||||
|
||||
imapsync
|
||||
|
||||
Now go to read http://imapsync.lamiral.info/#doc
|
||||
and start with the tutorial.
|
||||
then go to the section "2) After installing the dependencies" above.
|
||||
|
||||
=======================================================================
|
||||
=======================================================================
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
#!/bin/cat
|
||||
# $Id: INSTALL.Docker_build.txt,v 1.12 2019/11/28 14:43:48 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
|
||||
https://imapsync.lamiral.info/INSTALL.d/
|
||||
@ -10,39 +10,53 @@ https://imapsync.lamiral.info/INSTALL.d/INSTALL.Docker_build.txt
|
||||
=======================================================================
|
||||
|
||||
Nearly verbatim copy from https://imapsync.lamiral.info/INSTALL.d/Dockerfile
|
||||
(nearly but the Dockerfile rcs tag Id: removed, that would conflict)
|
||||
(verbatim but the Dockerfile rcs tag $ removed because it would conflict)
|
||||
|
||||
## Dockerfile for building a docker imapsync image
|
||||
|
||||
# Dockerfile,v 1.26 2019/11/27 15:49:13 gilles Exp gilles $
|
||||
# Id: Dockerfile,v 1.42 2022/04/04 19:16:50 gilles Exp gilles $
|
||||
# I use the following command to build the image:
|
||||
#
|
||||
# docker build -t gilleslamiral/imapsync .
|
||||
#
|
||||
# where this Dockerfile is in the current directory
|
||||
#
|
||||
# This Dockerfile builds an image with two imapsync
|
||||
# 1) One comes from https://imapsync.lamiral.info/imapsync
|
||||
# and goes to /usr/bin/imapsync in the Docker image
|
||||
# It is used with the command:
|
||||
#
|
||||
# docker run gilleslamiral/imapsync imapsync ...
|
||||
#
|
||||
# 2) One comes from the local file ./imapsync
|
||||
# and goes to /imapsync in the Docker image
|
||||
# It is used with the command:
|
||||
#
|
||||
# docker run gilleslamiral/imapsync /imapsync ...
|
||||
|
||||
|
||||
# I thank you very much
|
||||
# I like thanks
|
||||
# I like stars
|
||||
# I also like (and need) money
|
||||
# I thank you very much in advance
|
||||
# I like money to keep on doing this stuff
|
||||
|
||||
# Number of imapsync images pulled so far (2022_04_04): 673551
|
||||
# Command used:
|
||||
# curl -s https://hub.docker.com/v2/repositories/gilleslamiral/imapsync/ | jq '.pull_count'
|
||||
|
||||
FROM debian:buster
|
||||
# Debian Bullseye is Debian 11
|
||||
|
||||
FROM debian:bullseye
|
||||
|
||||
LABEL maintainer="Gilles LAMIRAL <gilles@lamiral.info>" \
|
||||
description="Imapsync" \
|
||||
documentation="https://imapsync.lamiral.info/#doc"
|
||||
|
||||
# Put a copy of the Dockerfile in the image itself
|
||||
# It can help future maintenance, isn't it?
|
||||
# I put a copy of the Dockerfile in the image itself
|
||||
# It can help maintenance, can't it?
|
||||
# Also put optionally my local and usually more recent imapsync on /, for testing purpose
|
||||
|
||||
COPY Dockerfile /
|
||||
|
||||
# Also put my local imapsync on /usr/bin/ for testing purpose
|
||||
# renamed imapsync_local since would be erased by the wget
|
||||
|
||||
COPY imapsync /usr/bin/imapsync_local
|
||||
COPY prerequisites_imapsync /usr/bin/prerequisites_imapsync_local
|
||||
COPY Dockerfile imapsyn[c] prerequisites_imapsyn[c] /
|
||||
|
||||
RUN set -xe && \
|
||||
apt-get update \
|
||||
@ -53,7 +67,8 @@ RUN set -xe && \
|
||||
libdata-uniqid-perl \
|
||||
libencode-imaputf7-perl \
|
||||
libfile-copy-recursive-perl \
|
||||
libfile-tail-perl \
|
||||
libfile-tail-perl \
|
||||
libio-compress-perl \
|
||||
libio-socket-ssl-perl \
|
||||
libio-socket-inet6-perl \
|
||||
libio-tee-perl \
|
||||
@ -63,6 +78,7 @@ RUN set -xe && \
|
||||
libparse-recdescent-perl \
|
||||
libmodule-scandeps-perl \
|
||||
libpar-packer-perl \
|
||||
libproc-processtable-perl \
|
||||
libreadonly-perl \
|
||||
libregexp-common-perl \
|
||||
libsys-meminfo-perl \
|
||||
@ -77,15 +93,23 @@ RUN set -xe && \
|
||||
make \
|
||||
cpanminus \
|
||||
lsof \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
ncat \
|
||||
openssl \
|
||||
ca-certificates \
|
||||
&& rm -rf /var/lib/apt/lists/* \
|
||||
&& cpanm IO::Socket::SSL
|
||||
|
||||
# I added the IO::Socket::SSL update to avoid the annoying, confusing and useless warning
|
||||
# DEBUG: .../IO/Socket/SSL.pm:1177: global error: Undefined SSL object
|
||||
|
||||
RUN set -xe \
|
||||
&& cd /usr/bin/ \
|
||||
&& pwd \
|
||||
&& wget -N https://imapsync.lamiral.info/imapsync \
|
||||
https://imapsync.lamiral.info/prerequisites_imapsync \
|
||||
&& mv imapsync /usr/bin/imapsync \
|
||||
&& chmod +x /usr/bin/imapsync /usr/bin/imapsync_local # just_a_comment_to_force_update 2019_11_26_12_58_34
|
||||
|
||||
&& wget -N --no-check-certificate https://imapsync.lamiral.info/imapsync \
|
||||
https://imapsync.lamiral.info/prerequisites_imapsync \
|
||||
https://raw.githubusercontent.com/google/gmail-oauth2-tools/master/python/oauth2.py \
|
||||
&& chmod +x imapsync oauth2.py \
|
||||
&& /usr/bin/imapsync --testslive && /usr/bin/imapsync --tests # just_a_comment_to_force_update 2022_04_04_21_16_50
|
||||
|
||||
USER nobody:nogroup
|
||||
|
||||
@ -100,8 +124,5 @@ CMD ["/usr/bin/imapsync"]
|
||||
#
|
||||
# End of imapsync Dockerfile
|
||||
|
||||
|
||||
|
||||
|
||||
=======================================================================
|
||||
=======================================================================
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
#!/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
|
||||
https://imapsync.lamiral.info/INSTALL.d/
|
||||
@ -9,7 +9,7 @@ https://imapsync.lamiral.info/INSTALL.d/INSTALL.FreeBSD.txt
|
||||
Installing imapsync on FreeBSD
|
||||
=======================================================================
|
||||
|
||||
Thanks to Kurt Jaeger pi@FreeBSD.org a imapsync package is available in FreeBSD
|
||||
Thanks to Kurt Jaeger pi@FreeBSD.org, an imapsync package is available in FreeBSD
|
||||
http://portsmon.freebsd.org/portoverview.py?category=mail&portname=imapsync
|
||||
So, to install imapsync you just have to type one command in a terminal:
|
||||
|
||||
@ -32,5 +32,8 @@ p5-Test-MockObject
|
||||
p5-CGI
|
||||
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: These are also the new Perl module dependencies to add
|
||||
for imapsync 2.206 and next ones:
|
||||
|
||||
Proc::ProcessTable
|
||||
@ -1,5 +1,5 @@
|
||||
#!/bin/cat
|
||||
# $Id: INSTALL.OnlineUI.txt,v 1.49 2021/03/19 09:39:01 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
|
||||
https://imapsync.lamiral.info/INSTALL.d/
|
||||
@ -11,7 +11,7 @@ https://imapsync.lamiral.info/INSTALL.d/INSTALL.OnlineUI.txt
|
||||
|
||||
|
||||
I'm now confident with /X since the /X service is up and running quite
|
||||
well since January 2017. Anyway, if you run this service on your own
|
||||
well since January 2017. Anyway, if you run this service on your own,
|
||||
online, you take responsibility for it.
|
||||
|
||||
=======================================================================
|
||||
@ -22,30 +22,28 @@ 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"
|
||||
|
||||
|
||||
|
||||
=======================================================================
|
||||
Installation
|
||||
|
||||
You have to be a little familiar with what a CGI script is
|
||||
and how to activate a CGI script on the Apache
|
||||
HTTP server, or any other HTTP server. I have received demands
|
||||
to run it on the Ngnix HTTP server but I haven't played with it yet.
|
||||
Linux is also a preferred platform (I run /X service on Linux and FreeBSD).
|
||||
You have to be a little familiar with what a CGI script is and how to
|
||||
activate a CGI script on the Apache HTTP server, or any other HTTP
|
||||
server. I have received demands to run it on the Ngnix HTTP server but
|
||||
I haven't played with it yet. Linux is also a preferred platform (I
|
||||
run /X service on Linux and FreeBSD).
|
||||
|
||||
I have tested this visual interface on Mac. It works.
|
||||
For now, it demands some skills few Mac users have.
|
||||
Drop me a note in case you want to do that.
|
||||
I have tested this visual interface on Mac. It works. For now, it
|
||||
demands some skills few Mac users have. Drop me a note in case you
|
||||
want to do that.
|
||||
|
||||
I have tested this visual interface on Windows,
|
||||
it fails on Windows because of some hardcoded Unix paths.
|
||||
I'm working on it to be Windows ok but it's not done yet (May 2020).
|
||||
I have tested this visual interface on Windows, it fails on Windows
|
||||
because of some hardcoded Unix paths. I'm working on it to be Windows
|
||||
ok but it's not done yet (May 2020).
|
||||
|
||||
Some users have successfully installed a /X visual interface
|
||||
on Windows using a Linux VM machine.
|
||||
Some users have successfully installed a /X visual interface on
|
||||
Windows using a Linux VM machine.
|
||||
|
||||
The web visual user interface frontend /X is compounded in four
|
||||
files: a html5 file, a CSS file, a javascript file, and
|
||||
a logo image:
|
||||
The web visual user interface frontend /X is compounded in four files:
|
||||
a html5 file, a CSS file, a javascript file, and a logo image:
|
||||
|
||||
* https://imapsync.lamiral.info/X/imapsync_form_extra.html
|
||||
* https://imapsync.lamiral.info/X/imapsync_form.css
|
||||
@ -53,29 +51,28 @@ a logo image:
|
||||
* https://imapsync.lamiral.info/X/logo_imapsync_Xn.png
|
||||
|
||||
|
||||
You can do a "view source" to see the HTML file as
|
||||
it is written, and a "save" to get it locally.
|
||||
The three other files can be saved the same way or
|
||||
with a command named "wget". I suggest using wget,
|
||||
see below the ready-to-use command lines.
|
||||
You can do a "view source" to see the HTML file as it is written, and
|
||||
a "save" to get it locally. The three other files can be saved the
|
||||
same way or with a command named "wget". I strongly suggest using
|
||||
wget, see below the ready-to-use command lines.
|
||||
|
||||
Those four files can be put anywhere on a web server,
|
||||
as long as they stand in the same directory. If you
|
||||
want to put them in different directories, just change
|
||||
the content of imapsync_form_extra.html to reflect the change,
|
||||
ie, change the two lines referencing imapsync_form.css and imapsync_form.js
|
||||
href="imapsync_form.css" (near the beginning of imapsync_form_extra.html)
|
||||
src="imapsync_form.js" (near the end of imapsync_form_extra.html)
|
||||
I let you change the image logo as an exercise, it's safe if you fail.
|
||||
Those four files can be put anywhere on a web server, as long as they
|
||||
stand in the same directory. If you want to put them in different
|
||||
directories, just change the content of imapsync_form_extra.html to
|
||||
reflect the change, ie, change the two lines referencing
|
||||
imapsync_form.css and imapsync_form.js href="imapsync_form.css" (near
|
||||
the beginning of imapsync_form_extra.html) src="imapsync_form.js"
|
||||
(near the end of imapsync_form_extra.html) I let you change the image
|
||||
logo as an exercise, it's safe if you fail.
|
||||
|
||||
The actual imap syncing work is done by imapsync acting as a CGI,
|
||||
the visual interface is only there to give imapsync the parameters
|
||||
needed for the sync.
|
||||
The actual imap syncing work is done by imapsync acting as a CGI, the
|
||||
visual interface is only there to give imapsync the parameters needed
|
||||
for the sync.
|
||||
|
||||
Use at least Perl module CGI.pm release 4.08 (2014-10-18)
|
||||
to avoid the bug "Undefined subroutine CGI::multi_param".
|
||||
You can use the command named cpanm to upgrade CGI.pm to
|
||||
its last version, it's the easiest way.
|
||||
Use at least Perl module CGI.pm release 4.08 (2014-10-18) to avoid the
|
||||
bug "Undefined subroutine CGI::multi_param". You can use the command
|
||||
named cpanm to upgrade CGI.pm to its last version, it's the easiest
|
||||
way.
|
||||
|
||||
Print the CGI.pm release with:
|
||||
|
||||
@ -85,8 +82,12 @@ If it is under release 4.08 (2014-10-18) then upgrade it with
|
||||
|
||||
cpanm CGI
|
||||
|
||||
It is a good thing to remove the old one if it was installed
|
||||
by a distribution package, I let you this part as an exercise too.
|
||||
It is a good thing to remove the old one if it was installed by a
|
||||
distribution package, I let you this part as an exercise too. Ok, here
|
||||
is a way:
|
||||
|
||||
apt remove libcgi-pm-perl # for the Debian family
|
||||
dnf remove perl-CGI # for the Centos family
|
||||
|
||||
To check and fix the Perl modules dependencies, run:
|
||||
|
||||
@ -94,53 +95,69 @@ To check and fix the Perl modules dependencies, run:
|
||||
wget -N https://imapsync.lamiral.info/prerequisites_imapsync
|
||||
sh prerequisites_imapsync
|
||||
|
||||
To make imapsync work as a CGI script, there are two conditions.
|
||||
First, imapsync has to work by itself on the web host.
|
||||
To make imapsync work as a CGI script, there are three conditions.
|
||||
|
||||
If imapsync doesn't work by itself, as a command line,
|
||||
then it won't work as a CGI script.
|
||||
First, imapsync has to work by itself on the web host. If imapsync
|
||||
doesn't work by itself, as a command line, then it won't work as a CGI
|
||||
script.
|
||||
|
||||
Second, imapsync has to work by itself on the web host using
|
||||
the Unix user running the webserver. Detailed examples to
|
||||
verify that will be provided further in this document.
|
||||
Second, imapsync has to work by itself on the web host using the Unix
|
||||
user running the webserver.
|
||||
|
||||
Third, the file imapsync has to be considered as a cgi script.
|
||||
|
||||
Command lines to provide and verify those three conditions will be
|
||||
provided further in this document, for the Debian family systems and
|
||||
for the Centos family systems. You are strongly advised to follow this
|
||||
commands if need and want help from me because I will first ask you to
|
||||
run them before searching what you did wrong.
|
||||
|
||||
The imapsync_form_extra.html file in action calls the CGI location
|
||||
/cgi-bin/imapsync
|
||||
which has to be imapsync itself, the file script (not the directory).
|
||||
|
||||
The very latest and relatively stable imapsync is at
|
||||
The very latest and relatively stable imapsync is
|
||||
https://imapsync.lamiral.info/imapsync
|
||||
This file is the program file used verbatim for the service given at
|
||||
https://imapsync.lamiral.info/X/
|
||||
|
||||
Copy the three files imapsync_form.* on a directory that is exported
|
||||
Copy the three files imapsync_form.* on a directory that is exported
|
||||
by your HTTP server.
|
||||
|
||||
Copy the imapsync script on the cgi-bin/ directory
|
||||
allowing CGIs and you'll have your imapsync visual interface
|
||||
and service. The cgi-bin/ directory is usually outside the
|
||||
hierarchy exported to anybody by the HTTP server.
|
||||
|
||||
The default Apache 2.4 timeout is 60 seconds, one minute, 300 for older Apache.
|
||||
The default Apache 2.4 timeout is 60 seconds, one minute, and 300
|
||||
secondes for older Apache, 5 minutes. See
|
||||
https://httpd.apache.org/docs/2.4/mod/core.html#timeout
|
||||
Mine is now "Timeout 3600", 3600 seconds, an hour. I chose this huge
|
||||
timeout value because imapsync can spend a long time without talking while
|
||||
getting the headers of huge folders of 100k messages.
|
||||
If you intend to offer this service for huge mailboxes or for a long
|
||||
time, I strongly recommand you to set this "Timeout 3600" in
|
||||
the Apache configuration right now because you will sure end up with this
|
||||
timeout issue in a few months.
|
||||
Search for timeouts in the Apache error log to see if you have timeout issues.
|
||||
|
||||
Now that I have explained the general context for any system,
|
||||
I'll describe concrete examples on several systems,
|
||||
Debian/Ubuntu and Centos. Feedbacks show that the Centos
|
||||
process is easier in case you don't know very much any of the
|
||||
Linux distributions.
|
||||
I use "Timeout 3600", 3600 seconds, an hour. I chose this huge timeout
|
||||
value because imapsync can spend a long time without talking while
|
||||
getting the headers of huge folders of 100k messages. If you intend
|
||||
to offer this service for huge mailboxes or for a long time, I
|
||||
strongly recommend you to set this "Timeout 3600" in the Apache
|
||||
configuration right now because you will sure end up with this timeout
|
||||
issue in a few months. You can search for timeouts in the Apache error
|
||||
log to see if you have timeout issues.
|
||||
|
||||
Now that I have explained the general context for any system, I'll
|
||||
describe concrete examples on several systems, Debian/Ubuntu and
|
||||
Centos. Feedbacks show that the Centos process is easier in case you
|
||||
don't know very much any Linux distribution. But I have to add that if
|
||||
you don't know very much the Linux distribution you use, then you
|
||||
shouldn't install this imapsync service at all.
|
||||
|
||||
|
||||
=============================================================================
|
||||
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
|
||||
|
||||
This classical /cgi-bin directory is usually already configured
|
||||
@ -151,7 +168,9 @@ or
|
||||
|
||||
This configuration file contains the following section
|
||||
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/
|
||||
<Directory "/usr/lib/cgi-bin">
|
||||
@ -172,7 +191,18 @@ ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
|
||||
Require all granted
|
||||
</Directory>
|
||||
|
||||
That's all for the Apache configuration side.
|
||||
In recent Debian distributions you can activate this cgi
|
||||
stuff with the following commands:
|
||||
|
||||
a2enmod cgi
|
||||
a2enconf serve-cgi-bin
|
||||
/etc/init.d/apache2 restart
|
||||
|
||||
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
|
||||
wget -nv -S -O- http://localhost/cgi-bin/imapsync?testslive=1
|
||||
|
||||
That's all for the Apache Debian family configuration side.
|
||||
|
||||
Now get, test, and install the latest imapsync:
|
||||
|
||||
@ -186,15 +216,25 @@ Now get, test, and install the latest imapsync:
|
||||
|
||||
cp imapsync /usr/lib/cgi-bin/
|
||||
|
||||
Assuming that the Unix account running Apache is www-data,
|
||||
check that it will work under Apache with this command:
|
||||
Assuming that the Unix account running Apache is www-data, check that
|
||||
it will work under Apache with this command:
|
||||
|
||||
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:
|
||||
|
||||
wget -nv -S -O- http://localhost/cgi-bin/imapsync?testslive=1
|
||||
|
||||
The last command should print something like:
|
||||
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 or a 5xx here then review the cgi installation and
|
||||
configuration part.
|
||||
|
||||
|
||||
You can also verify that the webserver is not buffering its output with the
|
||||
@ -202,17 +242,16 @@ command:
|
||||
|
||||
wget -nv -S -O- 'http://localhost/cgi-bin/imapsync?testslive=1&simulong=10'
|
||||
|
||||
You should get the output as time goes on. If you don't get the
|
||||
output as time goes on, ie you see no output then all output
|
||||
at once, it means the webserver is buffering. Fix it with
|
||||
the "SetEnv no-gzip 1" described above.
|
||||
You should get the output as time goes on. If you don't get the output
|
||||
as time goes on, ie you see no output then all output at once, it
|
||||
means the webserver is buffering. Fix it with the "SetEnv no-gzip 1"
|
||||
described above.
|
||||
|
||||
|
||||
The UI front-end file place on the server disk in
|
||||
this example is
|
||||
The UI front-end file place on the server disk in this example is
|
||||
/var/www/html/X/imapsync_form_extra.html
|
||||
but it can be placed anywhere on the disk, the important
|
||||
thing is that it has to be served by the webserver.
|
||||
but it can be placed anywhere on the disk, the important thing is that
|
||||
it has to be served by the webserver.
|
||||
|
||||
mkdir /var/www/html/X/
|
||||
cd /var/www/html/X/
|
||||
@ -225,9 +264,8 @@ thing is that it has to be served by the webserver.
|
||||
|
||||
The imapsync process working directory in cgi mode is
|
||||
/var/tmp/imapsync_cgi/
|
||||
it is not configurable unless changing it in
|
||||
imapsync directly, it is hard-coded in imapsync.
|
||||
In this directory will go the log files and
|
||||
it is not configurable unless changing it in imapsync directly, it is
|
||||
hard-coded in imapsync. In this directory will go the log files and
|
||||
the pid files.
|
||||
|
||||
Check
|
||||
@ -235,14 +273,20 @@ Check
|
||||
or the safer
|
||||
https://yourhost/X/imapsync_form_extra.html
|
||||
|
||||
That's all for installing a /X service on Debian.
|
||||
Let's encrypt your site because credentials 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.
|
||||
|
||||
=============================================================================
|
||||
B) Here is a concrete example on a Centos 7 server with the Apache
|
||||
webserver httpd:
|
||||
|
||||
First, follow and apply the section "Centos 7 and latest imapsync"
|
||||
at https://imapsync.lamiral.info/INSTALL.d/INSTALL.Centos.txt
|
||||
First, follow and apply the section "Centos 7 and latest imapsync" at
|
||||
https://imapsync.lamiral.info/INSTALL.d/INSTALL.Centos.txt
|
||||
|
||||
Then:
|
||||
|
||||
@ -288,14 +332,14 @@ The last command should print something like:
|
||||
Status: 200 OK to sync IMAP boxes. Load on bar is ...
|
||||
...
|
||||
|
||||
You can also verify that the webserver is not buffering its output with the
|
||||
command:
|
||||
You can also verify that the webserver is not buffering its output
|
||||
with the command:
|
||||
|
||||
wget -nv -S -O- 'http://localhost/cgi-bin/imapsync?testslive=1&simulong=10'
|
||||
|
||||
You should get the output as time goes on. If you don't, no output then all
|
||||
output at once, it means the webserver is buffering. Fix it with
|
||||
the "SetEnv no-gzip 1" described above.
|
||||
You should get the output as time goes on. If you don't, no output
|
||||
then all output at once, it means the webserver is buffering. Fix it
|
||||
with the "SetEnv no-gzip 1" described above.
|
||||
|
||||
Now check
|
||||
http://yourhost/X/imapsync_form_extra.html
|
||||
@ -307,62 +351,53 @@ That's all for installing a /X service on Centos 7.
|
||||
|
||||
B bis) How about Centos 8?
|
||||
|
||||
Follow the procedure for Centos 7. While imapsync is ok on the command line,
|
||||
you will encounter some permission denied in the CGI context. Something like:
|
||||
Follow the procedure for Centos 7. While imapsync is ok on the command
|
||||
line, you will encounter some permission denied in the CGI
|
||||
context. Something like:
|
||||
|
||||
wget -nv -S -O- http://localhost/cgi-bin/imapsync?testslive=1
|
||||
...
|
||||
Host1 failure: can not open imap connection on host1 [test1.lamiral.info]
|
||||
with user [test1]: Unable to connect to test1.lamiral.info: Permission denied
|
||||
Host1 failure: can not open imap connection on host1
|
||||
[test1.lamiral.info] with user [test1]: Unable to connect to
|
||||
test1.lamiral.info: Permission denied
|
||||
|
||||
The issue might come from SELinux. I haven't dig into SELinux enough to give
|
||||
you the commands that will allow imapsync online and only it while maintaining
|
||||
SELinux in enforcing mode.
|
||||
The issue might come from SELinux. I haven't dig into SELinux enough
|
||||
to give you the commands that will allow imapsync online and only it
|
||||
while maintaining SELinux in enforcing mode.
|
||||
|
||||
Quick solution:
|
||||
|
||||
sestatus
|
||||
setenforce 0
|
||||
sestatus
|
||||
getsebool httpd_can_network_connect # should show --> off
|
||||
setsebool -P httpd_can_network_connect=1
|
||||
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:
|
||||
|
||||
setenforce 1
|
||||
sestatus
|
||||
|
||||
getsebool httpd_can_network_connect # should show --> on
|
||||
setsebool -P httpd_can_network_connect=0
|
||||
getsebool httpd_can_network_connect # should show --> off
|
||||
|
||||
|
||||
Nota bene
|
||||
=========
|
||||
You may also want to avoid being placed by systemd in
|
||||
a directory like (where xxx are crypto hash characters):
|
||||
|
||||
You may also want to avoid being placed by systemd in a directory like
|
||||
(where xxx are crypto hash characters):
|
||||
|
||||
/var/tmp/systemd-private-xxx-httpd.service-xxx/tmp/
|
||||
|
||||
In that case, edit the file
|
||||
In that case, see the Troubleshooting section below.
|
||||
|
||||
/usr/lib/systemd/system/httpd.service
|
||||
|
||||
and in it, replace the line
|
||||
|
||||
PrivateTmp=true
|
||||
|
||||
by the line
|
||||
|
||||
PrivateTmp=false
|
||||
|
||||
then reload systemd and restart httpd with the commands:
|
||||
|
||||
systemctl daemon-reload
|
||||
systemctl restart httpd
|
||||
systemctl status httpd
|
||||
|
||||
|
||||
=======================================================================
|
||||
=================== Bandwidth statistics ==========================
|
||||
=======================================================================
|
||||
|
||||
If you want the bandwidth statistics like the ones at the bottom
|
||||
of the page and following the image link, more detailed at
|
||||
If you want the bandwidth statistics like the ones at the bottom of
|
||||
the page and following the image link, more detailed at
|
||||
https://imapsync.lamiral.info/vnstat/vnstati.html
|
||||
|
||||
Those stats are generated by vnstat
|
||||
@ -371,16 +406,18 @@ https://humdi.net/vnstat/
|
||||
Vnstat is already available as a package in most Linux distros.
|
||||
|
||||
The images are generated by the following commands, every minute:
|
||||
vnstati -s -o /var/www/vnstat/vnstat_s.png
|
||||
vnstati -h -o /var/www/vnstat/vnstat_h.png
|
||||
vnstati -hg -o /var/www/vnstat/vnstat_hg.png
|
||||
vnstati -hs -o /var/www/vnstat/vnstat_hs.png
|
||||
vnstati -d -o /var/www/vnstat/vnstat_d.png
|
||||
vnstati -m -o /var/www/vnstat/vnstat_m.png
|
||||
vnstati -y -o /var/www/vnstat/vnstat_y.png
|
||||
vnstati -t -o /var/www/vnstat/vnstat_t.png
|
||||
vnstati -vs -o /var/www/vnstat/vnstat_vs.png
|
||||
vnstati -5 -o /var/www/vnstat/vnstat_5.png
|
||||
vnstati -s -o /var/www/html/vnstat/vnstat_s.png
|
||||
vnstati -h -o /var/www/html/vnstat/vnstat_h.png
|
||||
vnstati -hg -o /var/www/html/vnstat/vnstat_hg.png
|
||||
vnstati -hs -o /var/www/html/vnstat/vnstat_hs.png
|
||||
vnstati -d -o /var/www/html/vnstat/vnstat_d.png
|
||||
vnstati -m -o /var/www/html/vnstat/vnstat_m.png
|
||||
vnstati -y -o /var/www/html/vnstat/vnstat_y.png
|
||||
vnstati -t -o /var/www/html/vnstat/vnstat_t.png
|
||||
vnstati -vs -o /var/www/html/vnstat/vnstat_vs.png
|
||||
vnstati -5 -o /var/www/html/vnstat/vnstat_5.png
|
||||
|
||||
|
||||
|
||||
|
||||
=======================================================================
|
||||
@ -389,39 +426,58 @@ vnstati -5 -o /var/www/vnstat/vnstat_5.png
|
||||
|
||||
The log says the temporary directory is
|
||||
/var/tmp/imapsync_cgi/
|
||||
but it is not in the system.
|
||||
but this directory is not in the system. What a mystery!
|
||||
|
||||
It may be that the apache or httpd service is run by systemd with a jailed
|
||||
temporary directory.
|
||||
It may be that the apache or httpd service is run by systemd with a
|
||||
jailed temporary directory.
|
||||
|
||||
Solution:
|
||||
|
||||
find /etc/systemd/ /usr/lib/systemd/ |xargs grep -s PrivateTmp
|
||||
find /etc/systemd/ /usr/lib/systemd/ | xargs grep -s PrivateTmp
|
||||
|
||||
If systemd jails Apache then you'll find a line like:
|
||||
If systemd jails Apache, then you'll find a line like:
|
||||
/etc/systemd/system/multi-user.target.wants/apache2.service:PrivateTmp=true
|
||||
(Debian/Ubuntu)
|
||||
or
|
||||
/usr/lib/systemd/system/httpd.service:PrivateTmp=true
|
||||
(Centos)
|
||||
|
||||
Replace this line "PrivateTmp=true"
|
||||
in /etc/systemd/system/multi-user.target.wants/apache2.service
|
||||
The goal is to override the line
|
||||
|
||||
PrivateTmp=true
|
||||
|
||||
found in /etc/systemd/system/multi-user.target.wants/apache2.service
|
||||
or
|
||||
/usr/lib/systemd/system/httpd.service
|
||||
|
||||
with:
|
||||
with the line:
|
||||
|
||||
PrivateTmp=false
|
||||
|
||||
Then reload the systemd daemon and restart the apache2 service
|
||||
The right way to do it is by using the "systemctl edit ..." command
|
||||
and then reload the systemd daemon and restart the apache2 service.
|
||||
You can also edit directly the file override.conf if you know where
|
||||
to do it. If you don't use the override.conf mechanism then your change will
|
||||
be canceled the next time the apache package is updated.
|
||||
|
||||
Debian:
|
||||
systemctl edit apache2
|
||||
|
||||
cat /etc/systemd/system/apache2.service.d/override.conf
|
||||
[Service]
|
||||
PrivateTmp=false
|
||||
|
||||
systemctl daemon-reload
|
||||
systemctl restart apache2
|
||||
systemctl status apache2
|
||||
|
||||
Centos:
|
||||
systemctl edit httpd
|
||||
|
||||
cat /etc/systemd/system/httpd.service.d/override.conf
|
||||
[Service]
|
||||
PrivateTmp=false
|
||||
|
||||
systemctl daemon-reload
|
||||
systemctl restart httpd
|
||||
systemctl status httpd
|
||||
@ -458,6 +514,7 @@ So if your https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js
|
||||
is not what it should be, your access looks compromised.
|
||||
|
||||
Thanks to Dominik Ulrich for this insight!
|
||||
|
||||
=======================================================================
|
||||
=======================================================================
|
||||
|
||||
@ -484,11 +541,11 @@ Debian:
|
||||
chmod +x imapsync_shell_wrapper
|
||||
cp imapsync_shell_wrapper /usr/lib/cgi-bin/
|
||||
|
||||
Normally, you only have to change the script imapsync_shell_wrapper
|
||||
to suit your needs.
|
||||
Normally, you only have to change the script imapsync_shell_wrapper to
|
||||
suit your needs.
|
||||
|
||||
Have in mind that the abort button will kill only one imapsync so
|
||||
it is not a working button in case of successive imapsync runs.
|
||||
Have in mind that the abort button will kill only one imapsync so it
|
||||
is not a working button in case of successive imapsync runs.
|
||||
|
||||
=======================================================================
|
||||
=======================================================================
|
||||
@ -497,13 +554,12 @@ it is not a working button in case of successive imapsync runs.
|
||||
====== mod_perl failure ======
|
||||
|
||||
This part is for mod_perl experts only.
|
||||
The script imapsync doesn't work under Modperl::Registry
|
||||
nor under ModPerl::PerlRun. So read on if you think you
|
||||
are better than me.
|
||||
|
||||
I tried the standard way, telling how any cgi Perl script
|
||||
can be run under mod_perl perlrun, but it fails with imapsync.
|
||||
Any hint welcome!
|
||||
The script imapsync doesn't work under Modperl::Registry nor under
|
||||
ModPerl::PerlRun. So read on if you think you are better than me.
|
||||
|
||||
I tried the standard way, telling how any cgi Perl script can be run
|
||||
under mod_perl perlrun, but it fails with imapsync. Any hint welcome!
|
||||
|
||||
# This is a Debian example
|
||||
|
||||
@ -542,6 +598,5 @@ Any hint welcome!
|
||||
|
||||
curl http://localhost/perl-run/imapsync
|
||||
|
||||
|
||||
=======================================================================
|
||||
=======================================================================
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
#!/bin/cat
|
||||
# $Id: INSTALL.Ubuntu.txt,v 1.17 2019/11/28 14:35: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
|
||||
https://imapsync.lamiral.info/INSTALL.d/
|
||||
@ -17,6 +17,7 @@ This command installs standard Ubuntu packages:
|
||||
sudo apt-get install \
|
||||
libauthen-ntlm-perl \
|
||||
libclass-load-perl \
|
||||
libcrypt-openssl-rsa-perl \
|
||||
libcrypt-ssleay-perl \
|
||||
libdata-uniqid-perl \
|
||||
libdigest-hmac-perl \
|
||||
@ -28,11 +29,13 @@ libio-compress-perl \
|
||||
libio-socket-inet6-perl \
|
||||
libio-socket-ssl-perl \
|
||||
libio-tee-perl \
|
||||
libjson-webtoken-perl \
|
||||
libmail-imapclient-perl \
|
||||
libmodule-scandeps-perl \
|
||||
libnet-dbus-perl \
|
||||
libnet-ssleay-perl \
|
||||
libpar-packer-perl \
|
||||
libproc-processtable-perl \
|
||||
libreadonly-perl \
|
||||
libregexp-common-perl \
|
||||
libsys-meminfo-perl \
|
||||
@ -49,6 +52,7 @@ libtest-nowarnings-perl \
|
||||
libtest-deep-perl \
|
||||
libtest-warn-perl \
|
||||
make \
|
||||
time \
|
||||
cpanminus
|
||||
|
||||
In case you want to update the Perl module
|
||||
@ -57,11 +61,6 @@ the following command installs it "manually":
|
||||
|
||||
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.
|
||||
|
||||
You don't have to be root to test and use imapsync.
|
||||
@ -84,7 +83,7 @@ A live test showing imapsync job:
|
||||
|
||||
./imapsync --testslive
|
||||
|
||||
Now the install command (need root priviledges again):
|
||||
Now the install command (need root privileges again):
|
||||
|
||||
cp imapsync /usr/bin/
|
||||
|
||||
|
||||
18
INSTALL.d/INSTALL.webserver.txt
Normal file
18
INSTALL.d/INSTALL.webserver.txt
Normal 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
|
||||
|
||||
|
||||
@ -1,5 +1,7 @@
|
||||
#!/bin/sh
|
||||
|
||||
# $Id: memo_docker,v 1.17 2022/04/04 14:46:21 gilles Exp gilles $
|
||||
|
||||
echo imapsync_docker_timestamp_dockerfile
|
||||
imapsync_docker_timestamp_dockerfile()
|
||||
{
|
||||
@ -14,11 +16,6 @@ imapsync_docker_build()
|
||||
{
|
||||
docker build -t gilleslamiral/imapsync . \
|
||||
&& imapsync_docker_add_tag_version && echo Build SUCCEEDED || echo Build FAILED
|
||||
|
||||
echo
|
||||
#docker run gilleslamiral/imapsync imapsync --testslive
|
||||
#docker run gilleslamiral/imapsync imapsync --testslive6
|
||||
# docker run gilleslamiral/imapsync imapsync --testslive6 --nossl2
|
||||
}
|
||||
|
||||
echo imapsync_docker_version
|
||||
@ -27,6 +24,12 @@ imapsync_docker_version()
|
||||
docker run gilleslamiral/imapsync imapsync --version
|
||||
}
|
||||
|
||||
echo imapsync_local_docker_version
|
||||
imapsync_local_docker_version()
|
||||
{
|
||||
docker run gilleslamiral/imapsync /imapsync --version
|
||||
}
|
||||
|
||||
echo imapsync_docker_add_tag_version
|
||||
imapsync_docker_add_tag_version()
|
||||
{
|
||||
@ -43,15 +46,15 @@ imapsync_docker_add_tag_version()
|
||||
echo imapsync_docker_testslive
|
||||
imapsync_docker_testslive()
|
||||
{
|
||||
echo docker run gilleslamiral/imapsync imapsync --testslive
|
||||
docker run gilleslamiral/imapsync imapsync --testslive
|
||||
echo docker run gilleslamiral/imapsync imapsync --testslive "$@"
|
||||
docker run gilleslamiral/imapsync imapsync --testslive "$@"
|
||||
}
|
||||
|
||||
echo imapsync_docker_testslive6
|
||||
imapsync_docker_testslive6()
|
||||
{
|
||||
echo docker run gilleslamiral/imapsync imapsync --testslive6 --ssl1 --ssl2
|
||||
docker run gilleslamiral/imapsync imapsync --testslive6 --ssl1 --ssl2
|
||||
echo docker run gilleslamiral/imapsync imapsync --testslive6 "$@"
|
||||
docker run gilleslamiral/imapsync imapsync --testslive6 "$@"
|
||||
}
|
||||
|
||||
echo imapsync_docker_tests
|
||||
@ -102,16 +105,29 @@ imapsync_docker_rebuild_from_scratch()
|
||||
imapsync_docker_build
|
||||
}
|
||||
|
||||
|
||||
echo is_release_number
|
||||
is_release_number()
|
||||
{
|
||||
echo "$1" | perl -pe 'm/^\d\.\d+$/ || exit 1'
|
||||
}
|
||||
|
||||
echo imapsync_docker_upload
|
||||
imapsync_docker_upload()
|
||||
{
|
||||
version=`imapsync_docker_version`
|
||||
version_local=`imapsync_local_docker_version`
|
||||
|
||||
# upload only after successful tests
|
||||
set -x \
|
||||
&& rcsdiff imapsync \
|
||||
&& is_release_number "$version" \
|
||||
&& is_release_number "$version_local" \
|
||||
&& test "$version" = "$version_local" \
|
||||
&& rcsdiff imapsync Dockerfile memo_docker \
|
||||
&& imapsync_docker_testslive \
|
||||
&& imapsync_docker_tests \
|
||||
&& docker run gilleslamiral/imapsync true \
|
||||
&& docker run gilleslamiral/imapsync diff /imapsync /usr/bin/imapsync \
|
||||
&& docker login --username=gilleslamiral --password=`cat $HOME/var/pass/secret.docker` \
|
||||
&& docker push gilleslamiral/imapsync:latest \
|
||||
&& docker push gilleslamiral/imapsync:$version \
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
#!/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='
|
||||
App::cpanminus
|
||||
@ -39,6 +39,7 @@ Package::Stash::XS
|
||||
PAR::Packer
|
||||
Parse::RecDescent
|
||||
Pod::Usage
|
||||
Proc::ProcessTable
|
||||
Readonly
|
||||
Regexp::Common
|
||||
Sys::MemInfo
|
||||
|
||||
328
Makefile
328
Makefile
@ -1,5 +1,5 @@
|
||||
|
||||
# $Id: Makefile,v 1.335 2021/07/06 02:00:46 gilles Exp gilles $
|
||||
# $Id: Makefile,v 1.349 2022/09/15 08:43:25 gilles Exp gilles $
|
||||
|
||||
.PHONY: help usage all doc
|
||||
|
||||
@ -34,6 +34,7 @@ usage:
|
||||
@echo "make upload_index"
|
||||
@echo "make upload_FAQ # upload FAQs and documentation"
|
||||
@echo "make upload_X # upload online UI"
|
||||
@echo "make upload_csv # upload online CSV service"
|
||||
@echo "make upload_latest # upload latest imapsync and binaries (dev)"
|
||||
@echo "make upload_cgi # upload latest imapsync online, after local and remote --tests success."
|
||||
@echo "make upload_cgi_memo # upload cgi_memo stat_patterns.txt to /X servers."
|
||||
@ -108,8 +109,6 @@ VERSION: imapsync
|
||||
touch -r ./imapsync ./VERSION
|
||||
|
||||
|
||||
|
||||
|
||||
doc/GOOD_PRACTICES.html: doc/GOOD_PRACTICES.t2t
|
||||
txt2tags -i doc/GOOD_PRACTICES.t2t -t html --toc -o doc/GOOD_PRACTICES.html
|
||||
./W/tools/validate_html4 doc/GOOD_PRACTICES.html
|
||||
@ -150,7 +149,7 @@ clean_bak:
|
||||
rm -f index.shtml.bak ./S/style.css.bak
|
||||
|
||||
clean_oauth2:
|
||||
rm oauth2/typescript oauth2/D_*txt
|
||||
rm -f oauth2/typescript oauth2/D_*txt
|
||||
|
||||
.PHONY: install dist man
|
||||
|
||||
@ -160,6 +159,7 @@ clean_man:
|
||||
rm -f W/imapsync.1
|
||||
|
||||
W/imapsync.1: imapsync
|
||||
mkdir -p W
|
||||
pod2man imapsync > W/imapsync.1
|
||||
|
||||
install: testp W/imapsync.1
|
||||
@ -170,36 +170,49 @@ install: testp W/imapsync.1
|
||||
install W/imapsync.1 $(DESTDIR)$(PREFIX)/share/man/man1/imapsync.1
|
||||
chmod 644 $(DESTDIR)$(PREFIX)/share/man/man1/imapsync.1
|
||||
|
||||
|
||||
|
||||
|
||||
###############
|
||||
# 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
|
||||
|
||||
|
||||
dailytests: linuxtests win32tests win64tests mactests
|
||||
|
||||
dailybuild: linuxbuild win32build win64build macbuild
|
||||
|
||||
linuxtests:
|
||||
./imapsync --tests
|
||||
|
||||
linuxtestsdebug:
|
||||
./imapsync --testsdebug
|
||||
|
||||
testsdebug: linuxtestsdebug win64testsdebug win32testsdebug mactestsdebug
|
||||
|
||||
testslive: mactestslive
|
||||
|
||||
|
||||
|
||||
|
||||
docker:
|
||||
@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_upload_docker_hub # upload last build to https://hub.docker.com/r/gilleslamiral/imapsync"
|
||||
@echo "ssh vp3 THEN cd docker/imapsync && . memo_docker"
|
||||
|
||||
docker_build:
|
||||
docker_build: docker_copy_to_vp3
|
||||
ssh vp3 'cd docker/imapsync && . memo_docker && imapsync_docker_build'
|
||||
|
||||
|
||||
|
||||
docker_copy_to_vp3:
|
||||
ssh vp3 'mkdir -p docker/imapsync/ var/pass/'
|
||||
rsync -av /g/var/pass/secret.docker vp3:var/pass/secret.docker
|
||||
rsync -av imapsync INSTALL.d/Dockerfile INSTALL.d/memo_docker INSTALL.d/prerequisites_imapsync INSTALL.d/secret.txt vp3:docker/imapsync/
|
||||
rsync -av RCS/imapsync,v INSTALL.d/RCS/Dockerfile,v INSTALL.d/RCS/memo_docker,v vp3:docker/imapsync/RCS/
|
||||
|
||||
docker_upload_docker_hub:
|
||||
docker_upload_docker_hub: docker_build
|
||||
ssh vp3 'cd docker/imapsync && . memo_docker && imapsync_docker_upload'
|
||||
|
||||
functree: W/imapsync_functions_tree_ppi.txt W/imapsync_functions_tree.txt
|
||||
@ -257,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
|
||||
|
||||
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
|
||||
echo | ci -l W/perlcritic_1.txt
|
||||
|
||||
@ -285,10 +298,10 @@ testv: imapsync tests.sh
|
||||
|
||||
tests: test
|
||||
|
||||
test: .test_3xx
|
||||
test: .tests_passed
|
||||
|
||||
# .test_3xx is created by tests.sh with success at all mandatory tests
|
||||
.test_3xx: imapsync tests.sh
|
||||
# .tests_passed is created by tests.sh with success at all mandatory tests
|
||||
.tests_passed: imapsync
|
||||
/usr/bin/time sh tests.sh 1>/dev/null
|
||||
|
||||
unitests:
|
||||
@ -330,6 +343,7 @@ win32testsdebug:
|
||||
./W/check_winerr test_testsdebug.bat
|
||||
|
||||
|
||||
|
||||
.PHONY: W/*.bat examples/*
|
||||
|
||||
|
||||
@ -450,20 +464,47 @@ imapsync_32bit.exe: imapsync
|
||||
chmod a+r+x imapsync_32bit.exe
|
||||
(date "+%s"| tr "\n" " "; echo -n "END 32bit " $(VERSION) ": "; date) >> W/.BUILD_EXE_TIME
|
||||
|
||||
win64tests: win64tests_p26
|
||||
|
||||
|
||||
win64tests:
|
||||
win64tests_p24:
|
||||
unix2dos W/test_tests.bat
|
||||
scp imapsync W/test_tests.bat pc_HP_DV7_p24:'Desktop/imapsync_build'
|
||||
ssh 'pc HP DV7'@p24 'Desktop/imapsync_build/test_tests.bat'
|
||||
./W/check_win64err test_tests.bat
|
||||
|
||||
win64testsdebug:
|
||||
win64testsdebug_p24:
|
||||
unix2dos W/test_testsdebug.bat
|
||||
scp imapsync W/test_testsdebug.bat pc_HP_DV7_p24:'Desktop/imapsync_build'
|
||||
ssh 'pc HP DV7'@p24 'Desktop/imapsync_build/test_testsdebug.bat'
|
||||
./W/check_win64err test_testsdebug.bat
|
||||
|
||||
win64testsdebug: win64testsdebug_p26
|
||||
|
||||
win64testsdebug_p26:
|
||||
unix2dos W/test_testsdebug.bat
|
||||
scp imapsync W/test_testsdebug.bat gille@p26:'OneDrive\Bureau\imapsync_build'
|
||||
ssh gille@p26 'OneDrive\Bureau\imapsync_build\test_testsdebug.bat'
|
||||
./W/check_p26err test_testsdebug.bat
|
||||
|
||||
|
||||
win64tests_p26:
|
||||
unix2dos W/test_tests.bat
|
||||
scp imapsync W/test_tests.bat gille@p26:'OneDrive\Bureau\imapsync_build'
|
||||
ssh gille@p26 'OneDrive\Bureau\imapsync_build\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:
|
||||
unix2dos W/build_exe.bat W/install_module_one.bat
|
||||
@ -517,30 +558,62 @@ W/test_tail.bat:
|
||||
win64sshaccess:
|
||||
ssh 'pc HP DV7'@p24 'perl -V'
|
||||
|
||||
|
||||
win64prepa:
|
||||
ssh 'pc HP DV7'@p24 'perl -V'
|
||||
winprepalocal:
|
||||
unix2dos W/build_exe.bat W/test_exe.bat W/install_modules.bat W/install_module_one.bat
|
||||
|
||||
win64prepa: winprepalocal
|
||||
ssh 'pc HP DV7'@p24 'perl -V'
|
||||
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 \
|
||||
pc_HP_DV7_p24:'Desktop/imapsync_build'
|
||||
ssh 'pc HP DV7'@p24 'Desktop/imapsync_build/build_exe.bat'
|
||||
./W/check_win64err build_exe.bat
|
||||
|
||||
win64build:
|
||||
unix2dos W/build_exe.bat W/install_modules.bat
|
||||
win64build_p24: winprepalocal
|
||||
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'
|
||||
./W/check_win64err build_exe.bat
|
||||
|
||||
imapsync.exe: imapsync_64bit.exe
|
||||
cp -a imapsync_64bit.exe imapsync.exe
|
||||
imapsync.exe: imapsync_64bit.exe_p26
|
||||
cp -a imapsync_64bit.exe_p26 imapsync.exe
|
||||
|
||||
win64build: imapsync_64bit.exe_p26
|
||||
|
||||
|
||||
imapsync_64bit.exe: imapsync
|
||||
|
||||
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
|
||||
|
||||
64exe: imapsync_64bit.exe_p26
|
||||
|
||||
imapsync_64bit.exe_p26: imapsync
|
||||
(date "+%s"| tr "\n" " "; echo -n "BEGIN 64bit " $(VERSION) ": "; date) >> W/.BUILD_EXE_TIME
|
||||
ssh 'pc HP DV7'@p24 'perl -V'
|
||||
unix2dos W/build_exe.bat W/test_exe.bat W/install_modules.bat W/install_module_one.bat
|
||||
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
|
||||
(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 'pc HP DV7'@p24 'perl -V'
|
||||
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 \
|
||||
pc_HP_DV7_p24:'Desktop/imapsync_build'
|
||||
@ -554,40 +627,43 @@ imapsync_64bit.exe: imapsync
|
||||
(date "+%s"| tr "\n" " "; echo -n "END 64bit " $(VERSION) ": "; date) >> W/.BUILD_EXE_TIME
|
||||
|
||||
|
||||
zip: dosify_bat
|
||||
zip: dosify_bat cidone
|
||||
rm -rfv ../prepa_zip/imapsync_$(VERSION)/
|
||||
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 W/build_exe.bat W/install_modules.bat W/test_cook_exe.bat W/test_cook_src.bat imapsync ../prepa_zip/imapsync_$(VERSION)/Cook/
|
||||
for f in README ; do cp -av $$f ../prepa_zip/imapsync_$(VERSION)/$$f.txt ; done
|
||||
cp -av README.txt ../prepa_zip/imapsync_$(VERSION)/
|
||||
cp -av FAQ.d/*.txt ../prepa_zip/imapsync_$(VERSION)/FAQ.d/
|
||||
cp -av imapsync.exe imapsync_32bit.exe README_Windows.txt ../prepa_zip/imapsync_$(VERSION)/
|
||||
unix2dos ../prepa_zip/imapsync_$(VERSION)/*.txt
|
||||
cd ../prepa_zip/ && rm -f ./imapsync_$(VERSION).zip && zip -r ./imapsync_$(VERSION).zip ./imapsync_$(VERSION)/
|
||||
scp ../prepa_zip/imapsync_$(VERSION).zip Admin@c:'C:/msys/1.0/home/Admin/'
|
||||
scp ../prepa_zip/imapsync_$(VERSION).zip pc_HP_DV7_p24:'Desktop/'
|
||||
# scp ../prepa_zip/imapsync_$(VERSION).zip pc_HP_DV7_p24:'Desktop/'
|
||||
cp ../prepa_zip/imapsync_$(VERSION).zip /fe/imapsync/
|
||||
|
||||
|
||||
# C:\Users\mansour\Desktop\imapsync
|
||||
|
||||
.PHONY: mac maccopy macforce mactests mactestsdebug mactestslive mactestslive6 bin win lin win64
|
||||
.PHONY: mac macstadiumcopy maccopy macforce mactests mactestsdebug mactestslive mactestslive6 bin win lin win64
|
||||
|
||||
mac: imapsync_bin_Darwin
|
||||
|
||||
maccopy:
|
||||
rsync -p -e 'ssh -4 -p 995' imapsync W/build_mac.sh INSTALL.d/prerequisites_imapsync webserver \
|
||||
gilleslamira@gate.polarhome.com:
|
||||
rsync -av -p -e 'ssh -4 -p 995' X/ gilleslamira@gate.polarhome.com:X/
|
||||
macstadiumcopy:
|
||||
rsync -pv imapsync W/build_mac.sh INSTALL.d/prerequisites_imapsync webserver administrator@macstadium.lamiral.info:
|
||||
rsync -pv examples/file.txt examples/sync_loop_darwin.sh administrator@macstadium.lamiral.info:examples/
|
||||
rsync -pv X/ administrator@macstadium.lamiral.info:X/
|
||||
|
||||
maccopy:
|
||||
rsync -v -p -e 'ssh -4 -p 995' imapsync W/build_mac.sh INSTALL.d/prerequisites_imapsync webserver \
|
||||
gilleslamira@gate.polarhome.com:
|
||||
rsync -v -p -e 'ssh -4 -p 995' examples/file.txt examples/sync_loop_darwin.sh gilleslamira@gate.polarhome.com:examples/
|
||||
rsync -v -p -e 'ssh -4 -p 995' X/ gilleslamira@gate.polarhome.com:X/
|
||||
|
||||
macforce: maccopy
|
||||
ssh -4 -p 995 gilleslamira@gate.polarhome.com 'sh -x build_mac.sh'
|
||||
|
||||
|
||||
imapsync_bin_Darwin: imapsync W/build_mac.sh INSTALL.d/prerequisites_imapsync
|
||||
imapsync_bin_Darwin: maccopy imapsync W/build_mac.sh INSTALL.d/prerequisites_imapsync
|
||||
rcsdiff imapsync
|
||||
rsync -p -e 'ssh -4 -p 995' imapsync W/build_mac.sh INSTALL.d/prerequisites_imapsync gilleslamira@gate.polarhome.com:
|
||||
ssh -4 -p 995 gilleslamira@gate.polarhome.com 'sh -x build_mac.sh'
|
||||
rsync -P -e 'ssh -4 -p 995' gilleslamira@gate.polarhome.com:imapsync_bin_Darwin .
|
||||
|
||||
@ -607,18 +683,32 @@ mactestslive6:
|
||||
rsync -p -e 'ssh -4 -p 995' imapsync gilleslamira@gate.polarhome.com:
|
||||
ssh -4 -p 995 gilleslamira@gate.polarhome.com '. .bash_profile; perl imapsync --testslive6'
|
||||
|
||||
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
|
||||
|
||||
bin: mac win
|
||||
|
||||
lin: $(BIN_NAME)
|
||||
|
||||
win: win64 win32 imapsync.exe
|
||||
win: win32 win64 imapsync.exe
|
||||
|
||||
win32: imapsync_32bit.exe
|
||||
|
||||
win64: imapsync_64bit.exe
|
||||
|
||||
win32build: imapsync_32bit.exe
|
||||
|
||||
linuxbuild: lin
|
||||
|
||||
|
||||
$(BIN_NAME): imapsync
|
||||
rcsdiff imapsync
|
||||
@ -705,21 +795,21 @@ biz: S/imapsync_sold_by_country.txt docker_pull_count
|
||||
auto_ci: docker_pull_count
|
||||
|
||||
docker_pull_count:
|
||||
cd W/ && rcsdiff docker_pull_count.txt || { echo | ci -l docker_pull_count.txt ; }
|
||||
rcsdiff W/docker_pull_count.txt || { echo | ci -l W/docker_pull_count.txt ; }
|
||||
|
||||
S/imapsync_sold_by_country.txt: /g/bin/imapsync_by_country
|
||||
cd S/ && /g/bin/imapsync_by_country && echo | ci -l imapsync_sold_by_country.txt
|
||||
cd S/ && /g/bin/imapsync_by_country && { echo | ci -l imapsync_sold_by_country.txt ; }
|
||||
|
||||
|
||||
ks:
|
||||
rsync -avHz --delete --exclude '*.exe' \
|
||||
. gilles@ks.lamiral.info:public_html/imapsync/
|
||||
ssh root@ks.lamiral.info 'apachectl configtest && /etc/init.d/apache2 reload'
|
||||
ssh root@ks.lamiral.info 'apachectl configtest && apachectl reload'
|
||||
|
||||
ksa:
|
||||
rsync -avHz --delete -P \
|
||||
. gilles@ks.lamiral.info:public_html/imapsync/
|
||||
ssh root@ks.lamiral.info 'apachectl configtest && /etc/init.d/apache2 reload'
|
||||
ssh root@ks.lamiral.info 'apachectl configtest && apachectl reload'
|
||||
|
||||
ks3:
|
||||
rsync -avHz --delete -P \
|
||||
@ -745,11 +835,10 @@ ks5tests: ks5tests_gilles ks5tests_root
|
||||
|
||||
ks5tests_gilles:
|
||||
rsync -P imapsync gilles@ks.lamiral.info:public_html/imapsync/
|
||||
rsync -P oauth2_access_token.txt oauth2_string_for_oauthdirect.txt gilles@ks.lamiral.info:
|
||||
ssh gilles@ks.lamiral.info 'public_html/imapsync/imapsync --tests'
|
||||
|
||||
ks5tests_root:
|
||||
rsync -P imapsync oauth2_access_token.txt oauth2_string_for_oauthdirect.txt root@ks5.lamiral.info:
|
||||
rsync -P imapsync root@ks5.lamiral.info:
|
||||
ssh root@ks5.lamiral.info './imapsync --tests'
|
||||
|
||||
|
||||
@ -825,19 +914,21 @@ W/.valid.index.shtml: index.shtml S/*.shtml
|
||||
S/template_xhtml1.shtml
|
||||
touch W/.valid.index.shtml
|
||||
|
||||
.PHONY: upload_index upload_FAQ ci_imapsync upload_bin
|
||||
.PHONY: upload_index ci_imapsync upload_latest upload_FAQ upload_bin
|
||||
|
||||
|
||||
upload_index: valid_index clean_permissions
|
||||
rcsdiff index.shtml README_Windows.txt S/style.css S/*.shtml FAQ.d/*.txt LICENSE CREDITS TODO examples/*.bat examples/*.sh index.shtml INSTALL.d/*.txt
|
||||
rcsdiff S/quiz/quiz_imapsync.html S/quiz/quiz_imapsync.js S/quiz/quiz_imapsync.css
|
||||
rm -f examples/LOG_imapsync/*
|
||||
rsync -avH index.shtml README_Windows.txt FAQ INSTALL NOLIMIT LICENSE CREDITS TODO S/robots.txt S/favicon.ico ../imapsync_website/
|
||||
rsync -aHv --delete ./W/ks.htaccess ../imapsync_website/.htaccess
|
||||
rsync -aHv --delete S/ ../imapsync_website/S/
|
||||
rsync -aHv --delete ./S/ ../imapsync_website/S/
|
||||
rsync -aHv --delete ./examples/ ../imapsync_website/examples/
|
||||
rsync -aHv --delete ./INSTALL.d/ ../imapsync_website/INSTALL.d/
|
||||
rsync -aHv --delete ./FAQ.d/ ../imapsync_website/FAQ.d/
|
||||
rsync -avH --delete ./doc/ ../imapsync_website/doc/
|
||||
rsync -avH --delete ./W/tools/ ../imapsync_website/W/tools/
|
||||
rsync -aHvz --delete ../imapsync_website/ root@ks5.lamiral.info:/usr/local/www/apache24/data/imapsync/
|
||||
|
||||
|
||||
@ -850,26 +941,148 @@ upload_latest: unitests ci_imapsync bin
|
||||
rsync -aHvzP --delete ../imapsync_website/ root@ks5.lamiral.info:/usr/local/www/apache24/data/imapsync/
|
||||
|
||||
|
||||
upload_cgi: unitests ks5tests ks5tests_root ci_imapsync
|
||||
rsync -a imapsync ./INSTALL.d/prerequisites_imapsync ../imapsync_website/
|
||||
rsync -aHvz --delete ../imapsync_website/ root@ks5.lamiral.info:/usr/local/www/apache24/data/imapsync/
|
||||
rsync -P imapsync root@ks5.lamiral.info:/home/www/apache24/cgi-bin/imapsync
|
||||
|
||||
.PHONY: upload_cgi upload_cgi_ks5 upload_cgi_memo upload_cgi_vp3 upload_cgi_vp4 upload_cgi_ks6 upload_tmphash_all
|
||||
|
||||
|
||||
upload_proximapsync:
|
||||
rcsdiff W/learn/proximapsync
|
||||
W/learn/proximapsync --tests
|
||||
W/learn/proximapsync --testslive | 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:
|
||||
dos2unix X/stat_patterns.txt X/server_survey_patterns.txt
|
||||
sed -i".bak" '/^[[:space:]]*$$/d' X/stat_patterns.txt X/server_survey_patterns.txt
|
||||
rsync -av X/cgi_memo X/stat_patterns.txt X/server_survey_patterns.txt root@ks5:/var/tmp/imapsync_cgi/
|
||||
|
||||
upload_cgi_memo_all:
|
||||
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@ks6:/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 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
|
||||
upload_cgi_vp3: ci_imapsync vp3tests
|
||||
rsync -P imapsync root@vp3.lamiral.info:/usr/lib/cgi-bin/imapsync_new
|
||||
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
|
||||
curl -v --data 'testslive=1;exitonload=0' https://vp3.lamiral.info/cgi-bin/imapsync 2>/dev/null | grep 'Exiting with return value 0'
|
||||
|
||||
# Centos
|
||||
upload_cgi_vp4: ci_imapsync vp4tests
|
||||
rsync -P imapsync root@vp4.lamiral.info:/var/www/cgi-bin/imapsync_new
|
||||
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
|
||||
curl -v --data 'testslive=1;exitonload=0' https://vp4.lamiral.info/cgi-bin/imapsync 2>/dev/null | grep 'Exiting with return value 0'
|
||||
|
||||
# Debian
|
||||
upload_cgi_ks6: ci_imapsync ks6tests
|
||||
rsync -P imapsync root@ks6.lamiral.info:/usr/lib/cgi-bin/imapsync_new
|
||||
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
|
||||
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
|
||||
|
||||
vp3tests:
|
||||
rsync -P imapsync root@vp3.lamiral.info:imapsync
|
||||
ssh root@vp3.lamiral.info ./imapsync --tests
|
||||
ssh root@vp3.lamiral.info ./imapsync --testslive6
|
||||
|
||||
vp4tests:
|
||||
rsync -P imapsync root@vp4.lamiral.info:imapsync
|
||||
ssh root@vp4.lamiral.info ./imapsync --tests
|
||||
ssh root@vp4.lamiral.info ./imapsync --testslive6
|
||||
|
||||
ks6tests:
|
||||
rsync -P imapsync root@ks6.lamiral.info:imapsync
|
||||
ssh root@ks6.lamiral.info ./imapsync --tests
|
||||
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:
|
||||
./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
|
||||
rcsdiff X/imapsync_form.html X/imapsync_form_extra.html X/imapsync_form_wrapper.html X/imapsync_form.css X/noscript.css
|
||||
rcsdiff X/imapsync_form.js X/imapsync_form_wrapper.js
|
||||
./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/proximapsync_form_extra_free.html
|
||||
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
|
||||
rsync -a ./INSTALL.d/INSTALL.OnlineUI.txt ../imapsync_website/INSTALL.d/INSTALL.OnlineUI.txt
|
||||
rsync -av --delete X/ ../imapsync_website/X/
|
||||
rsync -aHvz --delete ../imapsync_website/ root@ks5.lamiral.info:/usr/local/www/apache24/data/imapsync/
|
||||
|
||||
upload_csv:
|
||||
./W/tools/validate_xml_html5 X/sandbox_csv.html
|
||||
rcsdiff X/sandbox_csv.html X/sandbox_csv.js X/imapsync_csv_wrapper
|
||||
rsync -a X/sandbox_csv.html X/sandbox_csv.js X/imapsync_csv_wrapper ../imapsync_website/X/
|
||||
rsync -aHvz X/sandbox_csv.html X/sandbox_csv.js X/imapsync_csv_wrapper root@ks5.lamiral.info:/usr/local/www/apache24/data/imapsync/X/
|
||||
rsync X/imapsync_csv_wrapper root@ks5.lamiral.info:/home/www/apache24/cgi-bin/
|
||||
|
||||
|
||||
upload_FAQ:
|
||||
rcsdiff FAQ.d/*.txt LICENSE CREDITS TODO INSTALL.d/*.txt
|
||||
rsync -avH FAQ INSTALL CREDITS TODO ../imapsync_website/
|
||||
@ -878,6 +1091,10 @@ upload_FAQ:
|
||||
rsync -avH --delete ./doc/ ../imapsync_website/doc/
|
||||
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:
|
||||
rsync -av W/memo gilles@ks.lamiral.info:public_html/imapsync/W/memo
|
||||
@ -891,8 +1108,9 @@ upload_ks: ci tarball
|
||||
rsync -aHv --delete ./INSTALL.d/ ../imapsync_website/INSTALL.d/
|
||||
rsync -aHv --delete ./FAQ.d/ ../imapsync_website/FAQ.d/
|
||||
rsync -avH --delete ./doc/ ../imapsync_website/doc/
|
||||
rsync -avH --delete ./W/tools/ ../imapsync_website/W/tools/
|
||||
rsync -aHvz --delete ../imapsync_website/ root@ks5.lamiral.info:/usr/local/www/apache24/data/imapsync/
|
||||
ssh root@ks.lamiral.info 'apachectl configtest && /etc/init.d/apache2 reload'
|
||||
ssh root@ks.lamiral.info 'apachectl configtest && apachectl reload'
|
||||
|
||||
|
||||
upload_ks5:
|
||||
|
||||
140
README
140
README
@ -6,7 +6,7 @@ NAME
|
||||
|
||||
VERSION
|
||||
|
||||
This documentation refers to Imapsync $Revision: 2.140 $
|
||||
This documentation refers to Imapsync $Revision: 2.229 $
|
||||
|
||||
USAGE
|
||||
|
||||
@ -38,7 +38,7 @@ DESCRIPTION
|
||||
that are on the destination side but not on the source side stay as they
|
||||
are. See the --delete2 option to have strict sync and delete them.
|
||||
|
||||
How imapsync know a message is already on both sides? Same specific
|
||||
How does imapsync know a message is already on both sides? Same specific
|
||||
headers and the transfer is done only once. By default, the
|
||||
identification headers are "Message-Id:" and "Received:" lines but this
|
||||
choice can be changed with the --useheader option, most often a
|
||||
@ -46,8 +46,8 @@ DESCRIPTION
|
||||
|
||||
All flags are preserved, unread messages will stay unread, read ones
|
||||
will stay read, deleted will stay deleted. In the IMAP protocol, a
|
||||
deleted message is not really deleted, it is marked \Deleted and can be
|
||||
undelete. Real destruction comes with the EXPUNGE or UIDEXPUNGE IMAP
|
||||
deleted message is not deleted, it is marked \Deleted and can be
|
||||
undeleted. Real destruction comes with the EXPUNGE or UIDEXPUNGE IMAP
|
||||
commands.
|
||||
|
||||
You can abort the transfer at any time and restart it later, imapsync
|
||||
@ -76,16 +76,35 @@ DESCRIPTION
|
||||
There is no unidentified message on host1.
|
||||
Detected 0 errors
|
||||
|
||||
Imapsync mentions the total sizes of both accounts at the beginning of
|
||||
the sync and also at the end. Sometimes, even with a strict sync, those
|
||||
total sizes differ, and sometimes they differ a lot. The difference is
|
||||
not a good criterion to conclude the sync went wrong.
|
||||
|
||||
Why? That's because message sizes given by the imap servers are not
|
||||
always accurate, they are not always the same as the actual message
|
||||
sizes of the messages transferred by imapsync. Imapsync use the sizes
|
||||
given by the imap servers to calculate the big total size. They can
|
||||
differ. In the early days, Imapsync used the sizes of the messages as
|
||||
one of the criteria to identify the messages, different sizes implied
|
||||
different messages; but it was a mistake, the same message had different
|
||||
sizes on both sides sometimes, depending on the imap servers.
|
||||
|
||||
Another explanation for a big total size difference is that Gmail
|
||||
doesn't count the size of duplicate messages across folders twice, while
|
||||
imapsync does.
|
||||
|
||||
A classical scenario is synchronizing a mailbox B from another mailbox A
|
||||
where you just want to keep a strict copy of A in B. Strict meaning all
|
||||
messages in A will be in B but no more.
|
||||
|
||||
For this, option --delete2 can be used, it deletes messages in the host2
|
||||
folder B that are not in the host1 folder A. If you also need to destroy
|
||||
host2 folders that are not in host1 then use --delete2folders. See also
|
||||
--delete2foldersonly and --delete2foldersbutnot to set up exceptions on
|
||||
folders to destroy. INBOX will never be destroyed, it's a mandatory
|
||||
folder in IMAP so imapsync doesn't even try to remove it.
|
||||
For a strict synchronization, use the option --delete2. The option
|
||||
--delete2 deletes the messages in the host2 folder B that are not in the
|
||||
host1 folder A. If you also need to destroy host2 folders that are not
|
||||
in host1 then use --delete2folders. See also --delete2foldersonly and
|
||||
--delete2foldersbutnot to set up exceptions on folders to destroy. INBOX
|
||||
will never be destroyed, it's a mandatory folder in IMAP so imapsync
|
||||
doesn't even try to remove it.
|
||||
|
||||
A different scenario is to delete the messages from the source mailbox
|
||||
after a successful transfer, it can be a good feature when migrating
|
||||
@ -114,18 +133,19 @@ OPTIONS
|
||||
usage: imapsync [options]
|
||||
|
||||
The standard options are the six values forming the credentials. Three
|
||||
values on each side are needed in order to login into the IMAP servers.
|
||||
These six values are a hostname, a username, and a password, two times.
|
||||
values on each side are needed to login into the IMAP servers. These six
|
||||
values are a hostname, a username, and a password, two times.
|
||||
|
||||
Conventions used in the following descriptions of the options:
|
||||
Here are the conventions used in the following descriptions of the
|
||||
options:
|
||||
|
||||
str means string
|
||||
int means integer number
|
||||
flo means float number
|
||||
reg means regular expression
|
||||
cmd means command
|
||||
str means a string
|
||||
int means an integer number
|
||||
flo means a float number
|
||||
reg means a regular expression
|
||||
cmd means a command
|
||||
|
||||
--dry : Makes imapsync doing nothing for real; it just print what
|
||||
--dry : Makes imapsync do nothing for real; it just prints what
|
||||
would be done without --dry.
|
||||
|
||||
OPTIONS/credentials
|
||||
@ -182,16 +202,6 @@ OPTIONS
|
||||
--sslargs2 str : Pass any ssl parameter for host2 ssl or tls connection.
|
||||
See --sslargs1
|
||||
|
||||
--timeout1 flo : Connection timeout in seconds for host1.
|
||||
Default is 120 and 0 means no timeout at all.
|
||||
--timeout2 flo : Connection timeout in seconds for host2.
|
||||
Default is 120 and 0 means no timeout at all.
|
||||
|
||||
Caveat, under CGI context, you may encounter a timeout
|
||||
from the webserver, killing imapsync and the imap connexions.
|
||||
See the document INSTALL.OnlineUI.txt and search
|
||||
for "Timeout" for how to deal with this issue.
|
||||
|
||||
OPTIONS/authentication
|
||||
|
||||
--authmech1 str : Auth mechanism to use with host1:
|
||||
@ -215,7 +225,7 @@ OPTIONS
|
||||
It will be combined with the --user1 value to form the
|
||||
string to pass with XOAUTH2 authentication.
|
||||
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
|
||||
file containing the access token on the first line.
|
||||
If the value is a file, imapsync reads its first line
|
||||
@ -229,7 +239,8 @@ OPTIONS
|
||||
|
||||
--oauthdirect1 str : The direct string to pass with XOAUTH2 authentication.
|
||||
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
|
||||
|
||||
@ -247,9 +258,9 @@ OPTIONS
|
||||
|
||||
--nomixfolders : Do not merge folders when host1 is case-sensitive
|
||||
while host2 is not (like Exchange). Only the first
|
||||
similar folder is synced (example: with folders
|
||||
"Sent", "SENT" and "sent"
|
||||
on host1 only "Sent" will be synced to host2).
|
||||
similar folder is synced. Example: with folders
|
||||
"Sent", "SENT" and "sent" on host1, only "Sent"
|
||||
will be synced to host2.
|
||||
|
||||
--skipemptyfolders : Empty host1 folders are not created on host2.
|
||||
|
||||
@ -279,7 +290,7 @@ OPTIONS
|
||||
|
||||
--subfolder1 str : Syncs the host1 folders hierarchy which is under folder
|
||||
str to the root hierarchy of host2.
|
||||
It's the couterpart of a sync done by --subfolder2
|
||||
It's the counterpart of a sync done by --subfolder2
|
||||
when doing it in the reverse order.
|
||||
Backup/Restore scenario:
|
||||
Use --subfolder2 str for a backup to the folder str
|
||||
@ -358,7 +369,7 @@ OPTIONS
|
||||
|
||||
2019_12_22_23_57_59_532 is nearly the date of the start
|
||||
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.
|
||||
|
||||
@ -395,6 +406,12 @@ OPTIONS
|
||||
Example: 's/\000/ /g' # to replace null characters
|
||||
by spaces.
|
||||
--regexmess reg : and this one, etc.
|
||||
|
||||
--truncmess int : truncates messages when their size exceed the int
|
||||
value, specified in bytes. Good to sync too big
|
||||
messages or to "suppress" attachments.
|
||||
Have in mind that this way, messages become
|
||||
uncoherent somehow.
|
||||
|
||||
OPTIONS/labels
|
||||
|
||||
@ -595,6 +612,26 @@ OPTIONS
|
||||
|
||||
OPTIONS/behavior
|
||||
|
||||
--timeout1 flo : Connection timeout in seconds for host1.
|
||||
Default is 120 and 0 means no timeout at all.
|
||||
--timeout2 flo : Connection timeout in seconds for host2.
|
||||
Default is 120 and 0 means no timeout at all.
|
||||
|
||||
Caveat, under CGI context, you may encounter a timeout
|
||||
from the webserver, killing imapsync and the imap connections.
|
||||
See the document INSTALL.OnlineUI.txt and search
|
||||
for "Timeout" for how to deal with this issue.
|
||||
|
||||
--keepalive1 : https://metacpan.org/pod/Mail::IMAPClient#Keepalive
|
||||
Some firewalls and network gears like to timeout connections
|
||||
prematurely if the connection sits idle.
|
||||
This option enables SO_KEEPALIVE on the host1 socket.
|
||||
--keepalive1 is on by default since imapsync release 2.169
|
||||
Use --nokeepalive1 to disable it.
|
||||
|
||||
--keepalive2 : Same as --keepalive2 but for host2.
|
||||
Use --nokeepalive2 to disable it.
|
||||
|
||||
--maxmessagespersecond flo : limits the average number of messages
|
||||
transferred per second.
|
||||
|
||||
@ -617,6 +654,12 @@ OPTIONS
|
||||
it's an http request to
|
||||
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.
|
||||
|
||||
--justconnect : Just connect to both servers and print useful
|
||||
@ -710,8 +753,8 @@ LICENSE AND COPYRIGHT
|
||||
|
||||
Imapsync is free, open, public but not always gratis software cover by
|
||||
the NOLIMIT Public License, now called NLPL. See the LICENSE file
|
||||
included in the distribution or just read this simple sentence as it IS
|
||||
the licence text:
|
||||
included in the distribution or just read the following simple sentence
|
||||
as it IS the license text:
|
||||
|
||||
"No limits to do anything with this work and this license."
|
||||
|
||||
@ -728,7 +771,7 @@ AUTHOR
|
||||
Good feedback is always welcome. Bad feedback is very often welcome.
|
||||
|
||||
Gilles LAMIRAL earns his living by writing, installing, configuring and
|
||||
sometimes teaching free, open and often gratis software. Imapsync used
|
||||
sometimes teaching free, open, and often gratis software. Imapsync used
|
||||
to be "always gratis" but now it is only "often gratis" because imapsync
|
||||
is sold by its author, your servitor, a good way to maintain and support
|
||||
free open public software tools over decades.
|
||||
@ -780,19 +823,19 @@ INSTALL
|
||||
|
||||
Imapsync works under most Windows (2000, XP, Vista, Seven, Eight, Ten
|
||||
and all Server releases 2000, 2003, 2008 and R2, 2012 and R2, 2016)
|
||||
as a standalone binary software called imapsync.exe,
|
||||
usually launched from a batch file in order to avoid always typing
|
||||
the options. There is also a 32bit binary called imapsync_32bit.exe
|
||||
as a standalone binary software called imapsync.exe, usually launched
|
||||
from a batch file in order to avoid always typing the options. There
|
||||
is also a 32bit binary called imapsync_32bit.exe
|
||||
|
||||
Imapsync works under OS X as a standalone binary
|
||||
software called imapsync_bin_Darwin
|
||||
Imapsync works under OS X as a standalone binary software called
|
||||
imapsync_bin_Darwin
|
||||
|
||||
Purchase latest imapsync at
|
||||
https://imapsync.lamiral.info/
|
||||
|
||||
You'll receive a link to a compressed tarball called imapsync-x.xx.tgz
|
||||
where x.xx is the version number. Untar the tarball where
|
||||
you want (on Unix):
|
||||
You'll receive a link to a compressed tarball called
|
||||
imapsync-x.xx.tgz where x.xx is the version number.
|
||||
Untar the tarball where you want (on Unix):
|
||||
|
||||
tar xzvf imapsync-x.xx.tgz
|
||||
|
||||
@ -837,7 +880,7 @@ SIMILAR SOFTWARE
|
||||
imapmigrate: http://sourceforge.net/projects/cyrus-utils/
|
||||
larch: https://github.com/rgrove/larch (derived from wonko_imapsync, good at Gmail)
|
||||
wonko_imapsync: http://wonko.com/article/554 (superseded by larch)
|
||||
pop2imap: http://www.linux-france.org/prj/pop2imap/ (I wrote that too)
|
||||
pop2imap: https://pop2imap.lamiral.info/ (I wrote that too)
|
||||
exchange-away: http://exchange-away.sourceforge.net/
|
||||
SyncBackPro: http://www.2brightsparks.com/syncback/sbpro.html
|
||||
ImapSyncClient: https://github.com/ridaamirini/ImapSyncClient
|
||||
@ -848,6 +891,7 @@ SIMILAR SOFTWARE
|
||||
BitRecover email-backup 99 USD, 299 USD https://www.bitrecover.com/email-backup/.
|
||||
ImportExportTools: https://addons.thunderbird.net/en-us/thunderbird/addon/importexporttools/ ImportExportTools for Mozilla Thunderbird by Paolo Kaosmos. ImportExportTools does not do IMAP.
|
||||
rximapmail: https://sourceforge.net/projects/rximapmail/
|
||||
Shoviv: https://www.shoviv.com/email-backup.html Allows backup from various sources including Office 365 (Exchange Online, Exchange On-Premises), IMAP, and Google Workspace.
|
||||
CodeTwo: https://www.codetwo.com/ but CodeTwo does imap source to Office365 only.
|
||||
|
||||
HISTORY
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
# $Id: README_Windows.txt,v 1.24 2021/06/15 10:29:45 gilles Exp gilles $
|
||||
# $Id: README_Windows.txt,v 1.27 2022/04/05 19:45:21 gilles Exp gilles $
|
||||
#
|
||||
# This is the README_Windows.txt file for imapsync
|
||||
# imapsync: IMAP syncing and migration tool.
|
||||
@ -21,48 +21,52 @@ A) Simplest way
|
||||
|
||||
A.0) Preamble for visual users looking for a visual tool.
|
||||
|
||||
First, the visual thing I am talking about here is not the online visual
|
||||
interface I call /X that you might have seen and used at the URL
|
||||
https://imapsync.lamiral.info/X/
|
||||
First, the visual thing I am talking about here is not the online
|
||||
visual interface I call /X that you might have seen and used at the
|
||||
URL https://imapsync.lamiral.info/X/
|
||||
|
||||
This /X visual interface is not yet available on Windows as a service
|
||||
that you can install and use in your system.
|
||||
I plan to make a visual tool available on Windows but, for now,
|
||||
I encountered technical issues.
|
||||
that you can install and use in your system. I plan to make a visual
|
||||
tool available on Windows but, for now, I encountered technical
|
||||
issues.
|
||||
|
||||
So what visual thing am I talking about?
|
||||
|
||||
Imapsync itself is not a visual tool. The visual tool is Notepad or
|
||||
any text editor. Many pure visual users have succeeded in using
|
||||
imapsync to transfer their email accounts. As you can guess, only
|
||||
the ones that tried have succeeded, so don't give up before
|
||||
trying at least once. Another assumption is that visual users can read.
|
||||
imapsync to transfer their email accounts. As you can guess, only the
|
||||
ones that tried have succeeded, so don't give up before trying at
|
||||
least once. Another assumption is that visual users can read.
|
||||
|
||||
Let's go for some reading!
|
||||
|
||||
A.1) Get imapsync.
|
||||
|
||||
Get imapsync at https://imapsync.lamiral.info/
|
||||
You'll then have access to a zip archive file named imapsync_1.977.zip
|
||||
where 1.977 is the imapsync release number.
|
||||
You'll then have access to a zip archive file named imapsync_2.200.zip
|
||||
where 2.200 is the imapsync release number.
|
||||
|
||||
A.2) Extract the zip file in a folder where you will work with imapsync.
|
||||
|
||||
You can work on the Desktop since the zip file extraction creates
|
||||
a unique folder named imapsync_1.977/
|
||||
a unique folder named imapsync_2.200/
|
||||
|
||||
Do not unzip the archive in what is called a "system" directory since
|
||||
you may encounter permission issues.
|
||||
|
||||
Two-point to have in mind:
|
||||
Two points to have in mind:
|
||||
* You don't need to be an Administrator to unzip the zip archive.
|
||||
* You don't need to be an Administrator to run imapsync.
|
||||
|
||||
In short, any user on your system can use imapsync.
|
||||
|
||||
A.3) Check the folder
|
||||
|
||||
In the folder extracted imapsync_1.977 you see 7 files and 2 directories,
|
||||
which may be presented in a different order than the following, the order
|
||||
is not important anyway. The really important files to get your mailbox
|
||||
transfer job started in a few minutes are the first two files of the
|
||||
In the folder extracted and called imapsync_2.200, you see 7 files
|
||||
and 2 directories. Those files and directories may be presented in a
|
||||
different order than the following, the order is not important
|
||||
anyway. There are only two important files to get your mailbox
|
||||
transfer job started in a few minutes, the first two files of the
|
||||
following list:
|
||||
|
||||
* README_Windows.txt is the current file you are reading.
|
||||
@ -80,90 +84,104 @@ A.3) Check the folder
|
||||
You can copy or rename the file imapsync_example.bat as you wish,
|
||||
as long as its extension remains ".bat", for example, mysync.bat
|
||||
|
||||
On Windows systems, a file name ending with a .bat extension means "I am a batch script".
|
||||
A batch script is a file containing commands, it's a program.
|
||||
Don't be afraid, a program can be very simple to modify and I hope
|
||||
imapsync_example.bat is one of them.
|
||||
On Windows systems, a file name ending with a .bat extension means
|
||||
"I'm a batch script". A batch script is a file containing commands,
|
||||
it's a program. Don't be afraid, a program can be very simple to
|
||||
modify and I hope imapsync_example.bat is one of them.
|
||||
|
||||
The batch scripts have to stay in the same directory as
|
||||
imapsync.exe because of the way they call imapsync.exe.
|
||||
They use the string ".\imapsync.exe", so let them be in the same directory.
|
||||
The batch scripts have to stay in the same directory as imapsync.exe
|
||||
because of the way they call imapsync.exe. They use the string
|
||||
".\imapsync.exe", so let them be in the same directory.
|
||||
|
||||
You can change the path .\ to whatever you want if you understand what
|
||||
you are doing (you have to use a pathname from the script point of view).
|
||||
You can change the path .\ to whatever you want if you understand
|
||||
what you are doing (you have to use a pathname from the script point
|
||||
of view).
|
||||
|
||||
For the rest of this documentation, I assume you copied
|
||||
imapsync_example.bat to a file named mysync.bat
|
||||
|
||||
If you don't know how to copy and rename a file then use imapsync_example.bat
|
||||
itself, it's ok. The original file is still in the zip file in case
|
||||
you want to restart from scratch.
|
||||
If you don't know how to copy and rename a file then use
|
||||
imapsync_example.bat itself, it's ok. The original file is still in
|
||||
the zip file in case you want to restart from scratch.
|
||||
|
||||
A.4) Edit the batch file
|
||||
|
||||
This section describes how to edit the file mysync.bat to change
|
||||
the example values with yours.
|
||||
This section describes how to edit the file mysync.bat and change
|
||||
it by replacing example values with your values.
|
||||
|
||||
To edit mysync.bat, you have to right-click on it and select "modify"
|
||||
in the list presented in the small window menu.
|
||||
|
||||
Notepad or Notepadd++ are very good editor candidates to modify it.
|
||||
Notepad is already installed on any Windows system, Notepadd++
|
||||
is not usually installed but if you have it then use it.
|
||||
Notepad or Notepadd++ are very good editor candidates to modify the
|
||||
script. Notepad is already installed on any Windows system,
|
||||
Notepadd++ is not usually installed but if you have it, then use it.
|
||||
|
||||
Office Word or any powerful text processor is NOT good for that job.
|
||||
Text processors transform files in a special format that is wrong to
|
||||
make them stay a good batch file, so don't use them!
|
||||
|
||||
Files FAQ.txt and FAQ.d/* contain many tips and special options sometimes
|
||||
needed by specific imap software servers like Exchange, Office365, or Gmail.
|
||||
Those files are also available online at
|
||||
The documents FAQ.txt and FAQ.d/* contain many tips. They describe
|
||||
some special options that are sometimes needed by specific imap
|
||||
software servers like Exchange, Office365, or Gmail.
|
||||
|
||||
Those documents are also available online at
|
||||
https://imapsync.lamiral.info/FAQ.d/
|
||||
You don't have to look into them unless you encounter problems.
|
||||
|
||||
A.5) Run the batch file
|
||||
|
||||
To run imapsync with your values just double-click on the batch file mysync.bat
|
||||
To run imapsync with your values just double-click on the batch file
|
||||
mysync.bat
|
||||
|
||||
There is no need to have administrator privileges to run imapsync.
|
||||
|
||||
The run happens in a DOS window; usually, this window is black.
|
||||
|
||||
If imapsync.exe returns immediately with the ERRORLEVEL -1, it may be
|
||||
because you have a Group Policy in place to prevent the execution of
|
||||
programs in the %TEMP% directory. Temporarily remove this restriction
|
||||
and imapsync will work as expected. Thanks to Walter H. for this
|
||||
input!
|
||||
|
||||
If imapsync.exe returns immediately with the ERRORLEVEL -1, it may be
|
||||
because you have an Group Policy in place to prevent execution of
|
||||
programs in %TEMP%. Temporarily remove this restriction and imapsync
|
||||
will work as expected. Thanks to Walter H. for this input!
|
||||
Technically imapsync.exe is an embedded Perl script with also Perl
|
||||
and many Perl modules glued together in an archive auto-extracted.
|
||||
Technically speaking, imapsync.exe is an embedded Perl script with
|
||||
also the Perl interpreter and many Perl modules, all glued together
|
||||
in an archive auto-extracted at run time. So it needs write-access to
|
||||
the temporary directory. The temporary directory name depends on the
|
||||
user but its value is in the variable %TEMP%. You can have the value
|
||||
by running the command ECHO %TEMP% in a DOS window. You can have a
|
||||
DOS window by launching the command cmd.exe
|
||||
|
||||
A.6) Look at the sync running.
|
||||
|
||||
You can abort the sync at any time with a quick double ctrl-c,
|
||||
ie hit ctrl-c twice within one second.
|
||||
You can abort the sync at any time with a quick double ctrl-c, hit
|
||||
ctrl-c twice within one second.
|
||||
|
||||
A single ctrl-c will reconnect to both imap servers.
|
||||
You can also simply abort the sync by closing the DOS window,
|
||||
using the cross situated at the up-right corner.
|
||||
|
||||
You can also simply abort the sync by closing the DOS window, using
|
||||
the cross situated at the up-right corner.
|
||||
|
||||
What you see in this DOS terminal is also put in a logfile located
|
||||
in the subdirectory LOG_imapsync/
|
||||
|
||||
A.7) Control what happened.
|
||||
|
||||
When the sync is finished you can find the whole log file
|
||||
of the output in the folder named "LOG_imapsync/".
|
||||
The logfile name is based on the launching date,
|
||||
hour, minute, second, milliseconds, plus the user1 and user2 parameters.
|
||||
When the sync is finished you can find the whole log file of the
|
||||
output in the folder named "LOG_imapsync/".
|
||||
|
||||
The logfile name is based on the launching date, hour, minute,
|
||||
second, milliseconds, plus the user1 and user2 parameters.
|
||||
|
||||
For example, a file name can be
|
||||
LOG_imapsync\2019_11_29_14_49_36_514_tata_titi.txt
|
||||
|
||||
There is one log file created for each run.
|
||||
The log file name is printed at the end of the imapsync run.
|
||||
There is one log file created for each run. The log file name is
|
||||
printed both at the beginning and the end of the imapsync run.
|
||||
|
||||
IMPORTANT: When there is a problem, the problem is very often described
|
||||
at the end of the log file. It means you don't have to read all this
|
||||
bloody ununderstandable verbose logfile, just read the end first.
|
||||
IMPORTANT: When there is a problem, the problem is very often
|
||||
described at the end of the log file. It means you don't have to read
|
||||
all this bloody ununderstandable verbose logfile, just read the end
|
||||
first.
|
||||
|
||||
|
||||
A.8) Loop on A.4 through A.7
|
||||
@ -173,7 +191,7 @@ A.8) Loop on A.4 through A.7
|
||||
* A.6) look at the run and the log file
|
||||
* A.7) control what happened.
|
||||
|
||||
Loop on the process of editing, running, and controlling imapsync
|
||||
Loop on the process of editing, running and controlling imapsync
|
||||
until you solve all issues and the sync is over.
|
||||
|
||||
A good sign that the sync went very well is when the nearly last lines are like:
|
||||
@ -195,8 +213,8 @@ This is the way for modifying imapsync.exe if needed.
|
||||
B.1) Install Perl if it isn't already installed.
|
||||
Strawberry Perl is a very good candidate
|
||||
http://strawberryperl.com/
|
||||
I use 5.30.1.1 (released 2019-11-22) but previous and later releases
|
||||
should work as well (Perl 5.18 to 5.26 do).
|
||||
I use 5.32.1.1 (released 2021-01-24) but previous and later releases
|
||||
should work as well (Perl 5.18 to 5.30 do).
|
||||
|
||||
B.2) Go into the Cook/ directory
|
||||
B.3) Double-click build_exe.bat
|
||||
@ -205,4 +223,3 @@ It should create a binary imapsync.exe in the current Cook/ directory.
|
||||
|
||||
B.4) Move imapsync.exe in the upper directory and follow instructions
|
||||
from A.3) to A.8)
|
||||
|
||||
|
||||
@ -57,7 +57,7 @@
|
||||
<li> imapmigrate: <a href="http://sourceforge.net/projects/cyrus-utils/">http://sourceforge.net/projects/cyrus-utils/</a></li>
|
||||
<li> larch: <a href="https://github.com/rgrove/larch">https://github.com/rgrove/larch</a> (derived from wonko_imapsync, good at Gmail)</li>
|
||||
<li> wonko_imapsync: <a href="http://web.archive.org/web/20130807173030/http://wonko.com/post/ruby_script_to_sync_email_from_any_imap_server_to_gmail">http://wonko.com/article/554</a> (superseded by larch)</li>
|
||||
<li> pop2imap: <a href="http://www.linux-france.org/prj/pop2imap/">http://www.linux-france.org/prj/pop2imap/</a> (I wrote that too)</li>
|
||||
<li> pop2imap: <a href="https://pop2imap.lamiral.info/">https://pop2imap.lamiral.info/</a> (I wrote that too)</li>
|
||||
<li> exchange-away: <a href="http://exchange-away.sourceforge.net/">http://exchange-away.sourceforge.net/</a></li>
|
||||
<li> SyncBackPro: <a href="http://www.2brightsparks.com/syncback/sbpro.html">http://www.2brightsparks.com/syncback/sbpro.html</a></li>
|
||||
|
||||
@ -65,9 +65,13 @@
|
||||
<li> MailStore: <a href="https://www.mailstore.com/en/products/mailstore-home/">https://www.mailstore.com/en/products/mailstore-home/</a></li>
|
||||
<li> mnIMAPSync: <a href="https://github.com/manusa/mnIMAPSync">https://github.com/manusa/mnIMAPSync</a></li>
|
||||
<li> imap-upload: <a href="http://imap-upload.sourceforge.net/">http://imap-upload.sourceforge.net/</a>
|
||||
(A tool for uploading a local mbox file to IMAP4 server)</li>
|
||||
(A tool to upload a local mbox file to IMAP4 server)</li>
|
||||
<li> imapbackup: <a href="https://github.com/rcarmo/imapbackup">https://github.com/rcarmo/imapbackup</a>
|
||||
(A Python script for incremental backups of IMAP mailboxes)</li>
|
||||
(A Python script to incremental backups of IMAP mailboxes)</li>
|
||||
|
||||
<li> imap-backup: <a href="https://github.com/joeyates/imap-backup">https://github.com/joeyates/imap-backup</a>
|
||||
(A Ruby script to backup GMail (or other IMAP) accounts to disk)</li>
|
||||
|
||||
|
||||
<li> BitRecover email-backup <b>99 USD, 299 USD</b> <a href="https://www.bitrecover.com/email-backup/">https://www.bitrecover.com/email-backup/</a>.</li>
|
||||
|
||||
@ -87,12 +91,11 @@
|
||||
</h1>
|
||||
|
||||
<p>These services are similar to the
|
||||
<a href="https://imapsync.lamiral.info/X/" title="Free online service under 1 GB">imapsync <b>online service</b></a>
|
||||
<a href="https://imapsync.lamiral.info/X/" title="Free online service under 3 GB">imapsync <b>online service</b></a>
|
||||
I call /X. Some are an exact copy of /X, some are not, some use Imapsync, some don't.<br/>
|
||||
|
||||
I have no share in these free or paid services.
|
||||
Prices are given par mailbox and may be outdated
|
||||
(Last checked on Tuesday 10th November 2020).
|
||||
Prices are given par mailbox and may be outdated (Last checked on Saturday 19 February 2022).
|
||||
</p>
|
||||
|
||||
<h2>Imapsync based</h2>
|
||||
@ -118,29 +121,28 @@ this is a better choice to avoid duplicates with some imap servers.
|
||||
</p>
|
||||
|
||||
<ol>
|
||||
<li> NameHero <b>0 USD</b>: <a href="https://imapsync.net/">https://imapsync.net/</a> (imapsync 2.140)</li>
|
||||
<li> Slovenia Control Panel <b>0 USD</b>: <a href="https://tools.controlpanel.si/imapsync/">https://tools.controlpanel.si/imapsync/</a> (imapsync 1.810)</li>
|
||||
<li> Intertune Cloud <b>0 USD</b>: <a href="https://tools.intertune.io/imapsync/X/" >https://tools.intertune.io/imapsync/X/</a> (imapsync 1.882)</li>
|
||||
<li> Web Hosting Canada <b>0 USD</b>: <a href="https://imapsync.whc.ca/" >https://imapsync.whc.ca/</a> (imapsync 1.882)</li>
|
||||
<li> BoomHost <b>0 USD</b>: <a href="https://imapsync.boomhost.com/" >https://imapsync.boomhost.com/</a> (imapsync 1.925)</li>
|
||||
<li> WebHosting|4u (greek) <b>0 USD</b>: <a href="https://imapcopy.webhosting4u.gr/" >https://imapcopy.webhosting4u.gr/</a> (imapsync 1.977)</li>
|
||||
<li> WebHosting|4u (greek) <b>0 USD</b>: <a href="https://imapcopy.webhosting4u.gr/" >https://imapcopy.webhosting4u.gr/</a> (imapsync 2.178)</li>
|
||||
<li> Vimexx <b>0 USD</b>: <a href="https://imapsync.nl/" >https://imapsync.nl/</a> (imapsync 1.991)</li>
|
||||
<li> Timetakernet <b>0 USD</b>: <a href="https://mailsync.timetakernet.info/" >https://mailsync.timetakernet.info/</a> (imapsync 1.998)</li>
|
||||
<li> KeurigOnline <b>0 USD</b>: <a href="https://imapsync.keurigonline.nl/" >https://imapsync.keurigonline.nl/</a> (imapsync 1.998)</li>
|
||||
|
||||
<li> UK Migration Wizard <b>0 USD</b>: <a href="https://app.migrationwizard.co.uk/" >https://app.migrationwizard.co.uk/</a> (imapsync ?.???)</li>
|
||||
</ol>
|
||||
|
||||
<h2>Not Imapsync based</h2>
|
||||
<ol>
|
||||
<li> Ovh migration <b>0 EUR</b>: <a href="https://omm.ovh.net/Migration/Create">https://omm.ovh.net/Migration/Create</a></li>
|
||||
<li> Rackspace migration <b>0 USD</b>: <a href="http://www.rackspace.com/email-hosting/migrations">http://www.rackspace.com/email-hosting/migrations</a></li>
|
||||
<li> Movemymail one free, 5 USD after: <a href="https://movemymail.net">https://movemymail.net/</a></li>
|
||||
<li> TransferMyEmail 1.50 USD for a day pass: <a href="https://transfermyemail.ca/">https://transfermyemail.ca/</a></li>
|
||||
<li> Migrationwiz 11.99 USD: <a href="https://www.bittitan.com/products/migrationwiz/">https://www.bittitan.com/products/migrationwiz/</a> </li>
|
||||
<li> Audriga 11.90 EUR: <a href="https://www.groupware-migration.com/">https://www.groupware-migration.com/</a></li>
|
||||
<li> Movemymail one free, <a href="https://movemymail.net/faq.php">5 USD</a> after: <a href="https://movemymail.net">https://movemymail.net/</a></li>
|
||||
<li> TransferMyEmail <a href="https://transfermyemail.ca/shop/">1.50 USD</a> for a day pass: <a href="https://transfermyemail.ca/">https://transfermyemail.ca/</a></li>
|
||||
<li> Migrationwiz <a href="https://www.bittitan.com/pricing/">12 USD</a>: <a href="https://www.bittitan.com/products/migrationwiz/">https://www.bittitan.com/products/migrationwiz/</a> </li>
|
||||
<li> Audriga <a href="https://www.audriga.com/en/Self-service_migration/Pricing">11.90 EUR</a>: <a href="https://www.audriga.com/">https://www.audriga.com/</a></li>
|
||||
<li> <del>Yippiemove 14.95 USD</del> (discontinued on April 2019): <a href="http://www.yippiemove.com">http://www.yippiemove.com/</a>
|
||||
( See <a href="https://web.archive.org/web/20161027124328/https://www.yippiemove.com/help/faq_generic.html#imapsync">Yippiemove vs ImapSync</a> )</li>
|
||||
<li> ShuttleCloud one free, 19.95 USD after <a href="https://www.shuttlecloud.com/">https://www.shuttlecloud.com/</a></li>
|
||||
<li> Cloudasta ??? USD: <a href="https://cloudasta.com/">https://cloudasta.com/</a></li>
|
||||
</ol>
|
||||
|
||||
<h2>Imap to files services</h2>
|
||||
@ -182,7 +184,7 @@ alt="Viewable With Any Browser" />
|
||||
<!--#config timefmt="%D" -->
|
||||
<!--#config timefmt="%A %B %d, %Y" -->
|
||||
<b>This document last modified on <!--#echo var="LAST_MODIFIED" --></b>
|
||||
($Id: external.shtml,v 1.58 2021/06/30 20:34:23 gilles Exp gilles $)<br/>
|
||||
($Id: external.shtml,v 1.61 2022/02/19 20:26:25 gilles Exp gilles $)<br/>
|
||||
<a href="#TOP">Top of the page</a>
|
||||
</p>
|
||||
|
||||
|
||||
BIN
S/images/5c019d917bba312af7553b49_MacStadium-developerlogo.png
Normal file
BIN
S/images/5c019d917bba312af7553b49_MacStadium-developerlogo.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 54 KiB |
BIN
S/images/logo_imapsync_s1.png
Normal file
BIN
S/images/logo_imapsync_s1.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 3.9 KiB |
BIN
S/images/logo_imapsync_s2.png
Normal file
BIN
S/images/logo_imapsync_s2.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 3.9 KiB |
@ -4,7 +4,7 @@
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" id="TOP">
|
||||
|
||||
<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="author" content="Gilles LAMIRAL" />
|
||||
<meta name="date" content="2016-04-10T00:24:15+0200" />
|
||||
@ -27,12 +27,13 @@
|
||||
<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>
|
||||
</h1>
|
||||
|
||||
<p>To know whether your IMAP server is a widespread choice,
|
||||
take a look at <a href="http://openemailsurvey.org/">http://openemailsurvey.org/</a><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&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!
|
||||
</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>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>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>
|
||||
(<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]
|
||||
@ -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>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>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
|
||||
(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>
|
||||
@ -246,7 +252,7 @@ alt="Viewable With Any Browser" />
|
||||
<!--#config timefmt="%D" -->
|
||||
<!--#config timefmt="%A %B %d, %Y" -->
|
||||
<b>This document last modified on <!--#echo var="LAST_MODIFIED" --></b>
|
||||
($Id: imapservers.shtml,v 1.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>
|
||||
</p>
|
||||
|
||||
|
||||
@ -1,100 +1,108 @@
|
||||
1 Bahrein_________________ 0.01 % 100 % 0 % 99
|
||||
1 Bolivie_________________ 0.01 % 100 % 0 % 98
|
||||
1 Burkina_Faso____________ 0.01 % 100 % 0 % 97
|
||||
1 Cameroun________________ 0.01 % 100 % 0 % 96
|
||||
1 Coree_du_Sud____________ 0.01 % 100 % 0 % 95
|
||||
1 Grenade_________________ 0.01 % 100 % 0 % 94
|
||||
1 Iles_Feroe______________ 0.01 % 100 % 0 % 93
|
||||
1 Iles_Vierges_britanniques__ 0.01 % 100 % 0 % 92
|
||||
1 Jamaique________________ 0.01 % 100 % 0 % 91
|
||||
1 Jordanie________________ 0.01 % 100 % 0 % 90
|
||||
1 Kenya___________________ 0.01 % 100 % 0 % 89
|
||||
1 Koweit__________________ 0.01 % 100 % 0 % 88
|
||||
1 Maldives________________ 0.01 % 100 % 0 % 87
|
||||
1 Monaco__________________ 0.01 % 100 % 0 % 86
|
||||
1 Mongolie________________ 0.01 % 100 % 0 % 85
|
||||
1 Namibie_________________ 0.01 % 100 % 0 % 84
|
||||
1 Oman____________________ 0.01 % 100 % 0 % 83
|
||||
1 Panama__________________ 0.01 % 100 % 0 % 82
|
||||
1 Qatar___________________ 0.01 % 100 % 0 % 81
|
||||
1 Republique_d'Azerbaidjan__ 0.01 % 100 % 0 % 80
|
||||
1 Saint_Christophe-Nevis-Anguilla__ 0.01 % 100 % 0 % 79
|
||||
1 Senegal_________________ 0.01 % 100 % 0 % 78
|
||||
1 Tanzanie________________ 0.01 % 100 % 0 % 77
|
||||
1 Trinite-et-Tobago_______ 0.01 % 100 % 0 % 76
|
||||
2 Albanie_________________ 0.03 % 100 % 0 % 75
|
||||
2 Antilles_neerlandaises__ 0.03 % 100 % 0 % 74
|
||||
2 Arabie_Saoudite_________ 0.03 % 100 % 0 % 73
|
||||
2 Bosnie-Herzegovine______ 0.03 % 100 % 0 % 72
|
||||
2 Colombie________________ 0.03 % 100 % 0 % 71
|
||||
2 Ile_Maurice_____________ 0.03 % 100 % 0 % 70
|
||||
2 Moldavie________________ 0.03 % 100 % 0 % 69
|
||||
2 Nouvelle-Caledonie______ 0.03 % 100 % 0 % 68
|
||||
2 Perou___________________ 0.03 % 99 % 1 % 67
|
||||
3 Costa_Rica______________ 0.04 % 99 % 1 % 66
|
||||
3 Maroc___________________ 0.04 % 99 % 1 % 65
|
||||
3 Nigeria_________________ 0.04 % 99 % 1 % 64
|
||||
3 Taiwan__________________ 0.04 % 99 % 1 % 63
|
||||
3 Ukraine_________________ 0.04 % 99 % 1 % 62
|
||||
3 Venezuela_______________ 0.04 % 99 % 1 % 61
|
||||
4 Indonesie_______________ 0.05 % 99 % 1 % 60
|
||||
4 Serbie__________________ 0.05 % 99 % 1 % 59
|
||||
4 Turquie_________________ 0.05 % 99 % 1 % 58
|
||||
4 Uruguay_________________ 0.05 % 99 % 1 % 57
|
||||
4 Vietnam_________________ 0.05 % 99 % 1 % 56
|
||||
5 Ireland_________________ 0.06 % 99 % 1 % 55
|
||||
5 Philippines_____________ 0.06 % 99 % 1 % 54
|
||||
6 Egypte__________________ 0.08 % 99 % 1 % 53
|
||||
6 Lituanie________________ 0.08 % 99 % 1 % 52
|
||||
7 Islande_________________ 0.09 % 99 % 1 % 51
|
||||
7 Malte___________________ 0.09 % 99 % 1 % 50
|
||||
7 Russie,_Federation______ 0.09 % 99 % 1 % 49
|
||||
8 Bulgarie________________ 0.10 % 98 % 2 % 48
|
||||
8 Estonie_________________ 0.10 % 98 % 2 % 47
|
||||
10 Chypre__________________ 0.13 % 98 % 2 % 46
|
||||
10 Lettonie________________ 0.13 % 98 % 2 % 45
|
||||
11 Croatie_________________ 0.14 % 98 % 2 % 44
|
||||
11 Emirats_Arabes_Unis_____ 0.14 % 98 % 2 % 43
|
||||
12 Thailande_______________ 0.15 % 98 % 2 % 42
|
||||
15 Israel__________________ 0.19 % 98 % 2 % 41
|
||||
16 Chine___________________ 0.20 % 97 % 3 % 40
|
||||
18 Malaisie________________ 0.23 % 97 % 3 % 39
|
||||
18 Singapour_______________ 0.23 % 97 % 3 % 38
|
||||
20 Argentine_______________ 0.25 % 97 % 3 % 37
|
||||
20 Chili___________________ 0.25 % 96 % 4 % 36
|
||||
20 Luxembourg______________ 0.25 % 96 % 4 % 35
|
||||
20 Slovenie________________ 0.25 % 96 % 4 % 34
|
||||
23 Mexique_________________ 0.29 % 96 % 4 % 33
|
||||
24 Slovaquie_______________ 0.30 % 95 % 5 % 32
|
||||
26 Hong-Kong_______________ 0.33 % 95 % 5 % 31
|
||||
27 Inde____________________ 0.34 % 95 % 5 % 30
|
||||
27 Irlande_________________ 0.34 % 94 % 6 % 29
|
||||
28 Grece___________________ 0.35 % 94 % 6 % 28
|
||||
29 Afrique_du_Sud__________ 0.36 % 94 % 6 % 27
|
||||
30 Roumanie________________ 0.38 % 93 % 7 % 26
|
||||
31 Russie__________________ 0.39 % 93 % 7 % 25
|
||||
32 Japon___________________ 0.40 % 93 % 7 % 24
|
||||
36 Nouvelle-Zelande________ 0.45 % 92 % 8 % 23
|
||||
40 ________________________ 0.50 % 92 % 8 % 22
|
||||
41 Hongrie_________________ 0.52 % 91 % 9 % 21
|
||||
45 Portugal________________ 0.57 % 91 % 9 % 20
|
||||
55 Finlande________________ 0.69 % 90 % 10 % 19
|
||||
56 Norvege_________________ 0.70 % 90 % 10 % 18
|
||||
61 Republique_tcheque______ 0.77 % 89 % 11 % 17
|
||||
85 Bresil__________________ 1.07 % 88 % 12 % 16
|
||||
105 Danemark________________ 1.32 % 87 % 13 % 15
|
||||
107 Pologne_________________ 1.35 % 86 % 14 % 14
|
||||
122 Suede___________________ 1.53 % 84 % 16 % 13
|
||||
135 Belgique________________ 1.70 % 83 % 17 % 12
|
||||
170 Espagne_________________ 2.14 % 81 % 19 % 11
|
||||
186 Autriche________________ 2.34 % 79 % 21 % 10
|
||||
249 Australie_______________ 3.13 % 77 % 23 % 9
|
||||
301 Suisse__________________ 3.79 % 73 % 27 % 8
|
||||
317 Canada__________________ 3.99 % 70 % 30 % 7
|
||||
354 Pays-Bas________________ 4.45 % 66 % 34 % 6
|
||||
407 France__________________ 5.12 % 61 % 39 % 5
|
||||
498 Italie__________________ 6.26 % 56 % 44 % 4
|
||||
703 Royaume-Uni_____________ 8.84 % 50 % 50 % 3
|
||||
1568 Allemagne_______________ 19.72 % 41 % 59 % 2
|
||||
1693 Etats-Unis______________ 21.29 % 21 % 79 % 1
|
||||
TOTAL = 7951 sales 407161 EUR over 99 countries on Wed Dec 2 12:24:33 CET 2020
|
||||
1 Bahrein_________________ 0.01 % 100 % 0 % 107
|
||||
1 Bolivie_________________ 0.01 % 100 % 0 % 106
|
||||
1 Botswana________________ 0.01 % 100 % 0 % 105
|
||||
1 Burkina_Faso____________ 0.01 % 100 % 0 % 104
|
||||
1 Cameroun________________ 0.01 % 100 % 0 % 103
|
||||
1 Coree_du_Sud____________ 0.01 % 100 % 0 % 102
|
||||
1 Equateur________________ 0.01 % 100 % 0 % 101
|
||||
1 Grenade_________________ 0.01 % 100 % 0 % 100
|
||||
1 Guatemala_______________ 0.01 % 100 % 0 % 99
|
||||
1 Honduras________________ 0.01 % 100 % 0 % 98
|
||||
1 Iles_Feroe______________ 0.01 % 100 % 0 % 97
|
||||
1 Iles_Vierges_britanniques__ 0.01 % 100 % 0 % 96
|
||||
1 Jamaique________________ 0.01 % 100 % 0 % 95
|
||||
1 Jordanie________________ 0.01 % 100 % 0 % 94
|
||||
1 Koweit__________________ 0.01 % 100 % 0 % 93
|
||||
1 Madagascar______________ 0.01 % 100 % 0 % 92
|
||||
1 Maldives________________ 0.01 % 100 % 0 % 91
|
||||
1 Monaco__________________ 0.01 % 100 % 0 % 90
|
||||
1 Mongolie________________ 0.01 % 100 % 0 % 89
|
||||
1 Mozambique______________ 0.01 % 100 % 0 % 88
|
||||
1 Namibie_________________ 0.01 % 100 % 0 % 87
|
||||
1 Polynesie_francaise_____ 0.01 % 100 % 0 % 86
|
||||
1 Qatar___________________ 0.01 % 100 % 0 % 85
|
||||
1 Republique_d'Azerbaidjan__ 0.01 % 100 % 0 % 84
|
||||
1 Saint_Christophe-Nevis-Anguilla__ 0.01 % 100 % 0 % 83
|
||||
1 Salvador________________ 0.01 % 100 % 0 % 82
|
||||
1 Trinite-et-Tobago_______ 0.01 % 100 % 0 % 81
|
||||
2 Albanie_________________ 0.02 % 100 % 0 % 80
|
||||
2 Antilles_neerlandaises__ 0.02 % 100 % 0 % 79
|
||||
2 Arabie_Saoudite_________ 0.02 % 100 % 0 % 78
|
||||
2 Bosnie-Herzegovine______ 0.02 % 100 % 0 % 77
|
||||
2 Ile_Maurice_____________ 0.02 % 100 % 0 % 76
|
||||
2 Moldavie________________ 0.02 % 100 % 0 % 75
|
||||
2 Nouvelle-Caledonie______ 0.02 % 100 % 0 % 74
|
||||
2 Oman____________________ 0.02 % 100 % 0 % 73
|
||||
2 Panama__________________ 0.02 % 100 % 0 % 72
|
||||
2 Senegal_________________ 0.02 % 99 % 1 % 71
|
||||
2 Tanzanie________________ 0.02 % 99 % 1 % 70
|
||||
3 Colombie________________ 0.03 % 99 % 1 % 69
|
||||
3 Kenya___________________ 0.03 % 99 % 1 % 68
|
||||
3 Maroc___________________ 0.03 % 99 % 1 % 67
|
||||
3 Taiwan__________________ 0.03 % 99 % 1 % 66
|
||||
3 Ukraine_________________ 0.03 % 99 % 1 % 65
|
||||
4 Costa_Rica______________ 0.04 % 99 % 1 % 64
|
||||
4 Nigeria_________________ 0.04 % 99 % 1 % 63
|
||||
4 Perou___________________ 0.04 % 99 % 1 % 62
|
||||
4 Serbie__________________ 0.04 % 99 % 1 % 61
|
||||
4 Turquie_________________ 0.04 % 99 % 1 % 60
|
||||
4 Venezuela_______________ 0.04 % 99 % 1 % 59
|
||||
4 Vietnam_________________ 0.04 % 99 % 1 % 58
|
||||
5 Indonesie_______________ 0.06 % 99 % 1 % 57
|
||||
5 Ireland_________________ 0.06 % 99 % 1 % 56
|
||||
5 Uruguay_________________ 0.06 % 99 % 1 % 55
|
||||
6 Egypte__________________ 0.07 % 99 % 1 % 54
|
||||
6 Philippines_____________ 0.07 % 99 % 1 % 53
|
||||
8 Islande_________________ 0.09 % 99 % 1 % 52
|
||||
8 Malte___________________ 0.09 % 99 % 1 % 51
|
||||
9 Lituanie________________ 0.10 % 98 % 2 % 50
|
||||
10 Bulgarie________________ 0.11 % 98 % 2 % 49
|
||||
10 Estonie_________________ 0.11 % 98 % 2 % 48
|
||||
10 Russie,_Federation______ 0.11 % 98 % 2 % 47
|
||||
11 Lettonie________________ 0.12 % 98 % 2 % 46
|
||||
12 Croatie_________________ 0.13 % 98 % 2 % 45
|
||||
12 Emirats_Arabes_Unis_____ 0.13 % 98 % 2 % 44
|
||||
12 Thailande_______________ 0.13 % 98 % 2 % 43
|
||||
15 Chypre__________________ 0.17 % 98 % 2 % 42
|
||||
15 Israel__________________ 0.17 % 97 % 3 % 41
|
||||
16 Chine___________________ 0.18 % 97 % 3 % 40
|
||||
19 Singapour_______________ 0.21 % 97 % 3 % 39
|
||||
21 Argentine_______________ 0.23 % 97 % 3 % 38
|
||||
22 Luxembourg______________ 0.24 % 97 % 3 % 37
|
||||
24 Chili___________________ 0.27 % 96 % 4 % 36
|
||||
24 Malaisie________________ 0.27 % 96 % 4 % 35
|
||||
27 Hong-Kong_______________ 0.30 % 96 % 4 % 34
|
||||
27 Slovenie________________ 0.30 % 96 % 4 % 33
|
||||
28 Slovaquie_______________ 0.31 % 95 % 5 % 32
|
||||
30 Inde____________________ 0.33 % 95 % 5 % 31
|
||||
30 Mexique_________________ 0.33 % 95 % 5 % 30
|
||||
31 Russie__________________ 0.34 % 94 % 6 % 29
|
||||
32 Irlande_________________ 0.36 % 94 % 6 % 28
|
||||
33 Japon___________________ 0.37 % 94 % 6 % 27
|
||||
34 Roumanie________________ 0.38 % 93 % 7 % 26
|
||||
39 Afrique_du_Sud__________ 0.43 % 93 % 7 % 25
|
||||
39 Grece___________________ 0.43 % 92 % 8 % 24
|
||||
41 Nouvelle-Zelande________ 0.46 % 92 % 8 % 23
|
||||
49 Hongrie_________________ 0.55 % 91 % 9 % 22
|
||||
58 Finlande________________ 0.65 % 91 % 9 % 21
|
||||
60 Portugal________________ 0.67 % 90 % 10 % 20
|
||||
61 Norvege_________________ 0.68 % 90 % 10 % 19
|
||||
65 ________________________ 0.72 % 89 % 11 % 18
|
||||
69 Republique_tcheque______ 0.77 % 88 % 12 % 17
|
||||
102 Bresil__________________ 1.13 % 87 % 13 % 16
|
||||
116 Danemark________________ 1.29 % 86 % 14 % 15
|
||||
127 Suede___________________ 1.41 % 85 % 15 % 14
|
||||
148 Belgique________________ 1.65 % 84 % 16 % 13
|
||||
150 Pologne_________________ 1.67 % 82 % 18 % 12
|
||||
206 Autriche________________ 2.29 % 80 % 20 % 11
|
||||
210 Espagne_________________ 2.34 % 78 % 22 % 10
|
||||
275 Australie_______________ 3.06 % 76 % 24 % 9
|
||||
319 Suisse__________________ 3.55 % 73 % 27 % 8
|
||||
347 Canada__________________ 3.86 % 69 % 31 % 7
|
||||
404 Pays-Bas________________ 4.50 % 65 % 35 % 6
|
||||
511 France__________________ 5.69 % 61 % 39 % 5
|
||||
592 Italie__________________ 6.59 % 55 % 45 % 4
|
||||
793 Royaume-Uni_____________ 8.82 % 48 % 52 % 3
|
||||
1720 Allemagne_______________ 19.14 % 40 % 60 % 2
|
||||
1837 Etats-Unis______________ 20.44 % 20 % 80 % 1
|
||||
TOTAL = 8987 sales 467605 EUR over 107 countries on Mon Mar 28 11:40:45 CEST 2022
|
||||
|
||||
@ -61,8 +61,8 @@ http://www.w3schools.com/html/html5_browsers.asp
|
||||
|
||||
<p>
|
||||
The <b>list archives</b> are available at
|
||||
<a href="http://www.linux-france.org/prj/imapsync_list/">
|
||||
http://linux-france.org/prj/imapsync_list/</a><br />
|
||||
<a href="https://web.archive.org/web/20211024051744/http://linux-france.org/prj/imapsync_list/">
|
||||
https://web.archive.org/web/20211024051744/http://linux-france.org/prj/imapsync_list/</a><br />
|
||||
So consider that the list is public, anyone can see your post.<br />
|
||||
<i>Use a pseudonym or do not post to
|
||||
this list if you want to stay private</i>.<br />
|
||||
|
||||
124
S/news.shtml
124
S/news.shtml
@ -58,11 +58,11 @@ If you are very interrested in those projects, don't hesitate to solicit me!
|
||||
|
||||
<!--
|
||||
<ul>
|
||||
<li><b>2.xxx</b></li>
|
||||
<li><b>2.230</b></li>
|
||||
<li><b>General</b>: </li>
|
||||
|
||||
<li><b>Dependencies removed</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>
|
||||
@ -82,9 +82,125 @@ 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>CGI context</b>: </li>
|
||||
<li><b>CGI context</b>: </li>
|
||||
<li><b>CGI context</b>: </li>
|
||||
<li><b>CGI context</b>: </li>
|
||||
|
||||
</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>
|
||||
<li><b>2.200</b></li>
|
||||
<li><b>Dependencies removed</b>: None </li>
|
||||
<li><b>Dependencies added</b>: None </li>
|
||||
|
||||
<li><b>Enhancement</b>: Append a final email report on each account at the end of the synchronization. Use --noemailreport1 and --noemailreport2 to avoid final emails reports in each INBOX.</li>
|
||||
<li><b>Enhancement</b>: Documented why total sizes can differ even when the sync is perfect.</li>
|
||||
<li><b>Enhancement</b>: Added SERVER_NAME SERVER_ADDR SERVER_ADMIN variables and values to the output.</li>
|
||||
<li><b>Enhancement</b>: Added the local ip address for the imap connexions. It can help configuring firewalls to allow the imap source IP.</li>
|
||||
<li><b>Enhancement</b>: Added "Posta inviata" for \Sent with --automap</li>
|
||||
|
||||
|
||||
<li><b>CGI context</b>: Upped ERRORS_MAX_CGI from 20 to 500.</li>
|
||||
<li><b>CGI context</b>: Added --var to get values from proximapsync for variables REMOTE_ADDR REMOTE_HOST HTTP_REFERER HTTP_USER_AGENT SERVER_SOFTWARE SERVER_PORT HTTP_COOKIE</li>
|
||||
|
||||
<li><b>Usability</b>: Added warning "parsing headers of folder ... It can take time for huge folders. Be patient."</li>
|
||||
|
||||
<li><b>Bug fix</b>: Do not turn on --delete2duplicates when --syncduplicates is on, unless --delete2duplicates is given.</li>
|
||||
<li><b>Bug fix</b>: Redirect STDERR to STDOUT in all cases, --log or --nolog</li>
|
||||
<li><b>Bug fix</b>: Do not allow --skipcrossduplicates and --usecache. Exit EX_USAGE 64</li>
|
||||
<li><b>Bug fix</b>: Dates were not displayed under Windows because POSIX::strftime %e is not portable. Fixed several other places where dates were wrong on Windows.</li>
|
||||
<li><b>Bug fix</b>: --tests --testslive was listing 0 folders.</li>
|
||||
|
||||
|
||||
<li><b>Refactoring</b>: Deglobalized $debuglist $debugflags </li>
|
||||
<li><b>Refactoring</b>: Added sync->{ permanentflags2 }</li>
|
||||
|
||||
|
||||
</ul>
|
||||
|
||||
|
||||
<ul>
|
||||
<li><b>2.178</b></li>
|
||||
|
||||
<li><b>Dependencies removed</b>: None </li>
|
||||
<li><b>Dependencies added</b>: Perl module Compress::Zlib</li>
|
||||
|
||||
<li><b>Enhancement</b>: Added final statistic line: "CPU time and %cpu : 13.27 sec 8.3 %cpu 2.1 %allcpus</li>
|
||||
<li><b>Enhancement</b>: Removed the hard limit --maxsize 35_651_584 set by --gmail2 since CAPABILITY is used and good.</li>
|
||||
<li><b>Enhancement</b>: Does not checknoabletosearch if --justfolders</li>
|
||||
<li><b>Enhancement</b>: When creating a folder, check if it is selectable and consider ok if it is selectable.</li>
|
||||
<li><b>Enhancement</b>: Options --gmail1 --gmail2 together sets --useheader X-Gmail-Received --useheader Message-Id</li>
|
||||
<li><b>Enhancement</b>: Added compression in the imap connexions.
|
||||
Compression is off by default no matter the capability announced.
|
||||
Use --compress1 and --compress2 to turn compression on.</li>
|
||||
<li><b>Enhancement</b>: Added --keepalive1 and --keepalive2 options.
|
||||
Some firewalls and network gears like to timeout connections prematurely if the connection sits idle.
|
||||
This option enables SO_KEEPALIVE on the host1 socket.
|
||||
--keepalive1 is on by default since imapsync release 2.169
|
||||
Use --nokeepalive1 to disable it. Same thing for --keepalive2 but for --host2. See <a href="https://metacpan.org/pod/Mail::IMAPClient#Keepalive">https://metacpan.org/pod/Mail::IMAPClient#Keepalive</a></li>
|
||||
|
||||
|
||||
<li><b>Usability</b>: Removed --fast option. It didn't do anything anyway, it was a fake option.</li>
|
||||
|
||||
<li><b>Usability</b>: Added advice inline advice on errors
|
||||
<ul>
|
||||
<li>ERR_OVERQUOTA. "The destination mailbox is 100% full, get free space on it and then resume the sync."</li>
|
||||
<li>ERR_TRANSFER_EXCEEDED. "The maximum transfer size for a single sync is reached ( over 3 GB ). Relaunch the sync to sync more."</li>
|
||||
<li>ERR_APPEND_SIZE. "The destination server refuses too big messages. Use --truncmess option. Read https://imapsync.lamiral.info/FAQ.d/FAQ.Messages_Too_Big.txt" </li>
|
||||
<li>ERR_CONNECTION_FAILURE_HOST1. "Check that host1 on port1 is the right IMAP server to be contacted for your mailbox."</li>
|
||||
<li>ERR_CONNECTION_FAILURE_HOST2. "Check that host2 on port2 is the right IMAP server to be contacted for your mailbox."</li>
|
||||
<li>ERR_AUTHENTICATION_FAILURE_USER1. "Check the credentials for user1."</li>
|
||||
<li>ERR_AUTHENTICATION_FAILURE_USER2. "Check the credentials for user2."</li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
<li><b>Usability</b>: Bytes sizes human readable are now presented in KB MB GB TB PB (1000 base) instead of KiB MiB GiB TiB PiB (1024 base)</li>
|
||||
<li><b>Usability</b>: Added README help for --truncmess</li>
|
||||
|
||||
|
||||
<li><b>CGI context</b>: Experimental loaddelay forced to 0 (no delay at all). So far a huge load is rarely a problem.</li>
|
||||
<li><b>CGI context</b>: Bugfix. Abort didn't set charset=UTF-8; same thing for heavy load 503 Service Unavailable</li>
|
||||
|
||||
|
||||
<li><b>Bug fix</b>: Made reconnect mechanism works with --oauthdirect1 --oauthdirect2 --oauthaccesstoken1 --oauthaccesstoken2</li>
|
||||
<li><b>Bug fix</b>: Upped the maximum number a pid can be. From 99999 to 2^22.
|
||||
See <a href="https://unix.stackexchange.com/questions/16883/what-is-the-maximum-value-of-the-process-id">what-is-the-maximum-value-of-the-process-id</a> </li>
|
||||
<li><b>Bug fix</b>: Load average on Mac was sometimes buggy. locale float 3,14 instead of 3.14</li>
|
||||
<li><b>Bug fix</b>: errors_incr() exited with CATCH_ALL</li>
|
||||
<li><b>Bug fix</b>: Memory consumption on Mac was not relevant. Use RSS instead of VSZ, on Mac only. Linux stays with VSZ.</li>
|
||||
|
||||
|
||||
<li><b>Docker context</b>: Current working directory changed from /var/tmp to /var/tmp/uid_$EFFECTIVE_USER_ID</li>
|
||||
|
||||
</ul>
|
||||
|
||||
|
||||
<ul>
|
||||
<li><b>2.140</b></li>
|
||||
<li><b>General</b>: New release numbering from 1.999 directly to 2.100; I want to avoid 1.1000 and sorting issues in directory listing.</li>
|
||||
@ -157,8 +273,6 @@ Exit value 112 (EXIT_WITH_ERRORS_MAX) is now replaced by the most common error e
|
||||
|
||||
<li><b>Refactoring</b>: Continuing to deglobalize the global variables.</li>
|
||||
<li><b>Refactoring</b>: 1734 unit tests.</li>
|
||||
<li><b>Refactoring</b>: </li>
|
||||
|
||||
|
||||
</ul>
|
||||
|
||||
@ -954,7 +1068,7 @@ by ignoring PERMANENTFLAGS (Exchange tests)</li>
|
||||
<!--#config timefmt="%D" -->
|
||||
<!--#config timefmt="%A %B %d, %Y" -->
|
||||
<b>This document last modified on <!--#echo var="LAST_MODIFIED" --></b>
|
||||
($Id: news.shtml,v 1.78 2021/07/05 20:22:15 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>
|
||||
</p>
|
||||
</body></html>
|
||||
|
||||
@ -41,7 +41,7 @@ to pay for free speech software.
|
||||
not gratis from the homepage. It is the best decision I've done
|
||||
about imapsync to continue to maintain it.
|
||||
See detailed motivations in this
|
||||
<a href="http://www.linux-france.org/prj/imapsync_list/msg00459.html">call for business solution</a>.
|
||||
<a href="https://web.archive.org/web/20210309005209/http://www.linux-france.org/prj/imapsync_list/msg00459.html">call for business solution</a>.
|
||||
</p>
|
||||
|
||||
<p>"Download and donate if happy" doesn't work well.<br/>
|
||||
|
||||
@ -41,7 +41,7 @@ to view details of this transaction (if you have a Paypal account).
|
||||
</p>
|
||||
|
||||
<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>
|
||||
|
||||
<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="%A %B %d, %Y" -->
|
||||
<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>
|
||||
|
||||
<script type="text/javascript" src="S/conversion_data.js">
|
||||
|
||||
29
S/quiz/README.txt
Normal file
29
S/quiz/README.txt
Normal file
@ -0,0 +1,29 @@
|
||||
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
|
||||
LICENSE
|
||||
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
|
||||
|
||||
Copyright by Code Boxx
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
|
||||
|
||||
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
|
||||
MORE
|
||||
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
|
||||
Please visit https://code-boxx.com/ for more!
|
||||
45
S/quiz/comment_to_toh.txt
Executable file
45
S/quiz/comment_to_toh.txt
Executable file
@ -0,0 +1,45 @@
|
||||
Hi Toh!
|
||||
|
||||
First, I thank you very much for posting and sharing this good piece
|
||||
of code!
|
||||
|
||||
I like it because, it's simple, it's embedable, no dependency, pure
|
||||
javascript.
|
||||
|
||||
I found your code search for a simple quiz code. I consider quizzes as
|
||||
a fun learning learning experience on something.
|
||||
|
||||
Some things I'd like to improve on it:
|
||||
|
||||
ux/reload) The user has to reload the page to restart the quiz and
|
||||
it's not evident. How about making the last button a possibility
|
||||
to redo the quiz from start and make a better score?
|
||||
|
||||
ux/where I am) The user doesn't know how many questions there are in
|
||||
the quiz, where he is along the quiz, how good he is. Knowing where we
|
||||
are in a serie makes it easier to reach the end. This one is easy to
|
||||
add, as I could do it.
|
||||
|
||||
css functional) The quiz.css is not so cosmetic: if you comment it in the
|
||||
html, then the quiz functionally doesn't work the same; we have to
|
||||
click twice on a button to go to the next question, and the second
|
||||
click has to be outside the round of the radio button, on the label.
|
||||
I don't know how to fix that but it's not important anyway, the css is
|
||||
needed for cosmetics.
|
||||
|
||||
css cosmetic) this quiz code is to be embedded in a page then I suggest
|
||||
that the cosmetics are inheritated.
|
||||
I'm also adept of minimal css, the less to achieve a goal, the better.
|
||||
|
||||
dev testing) I don't know how do you test it while coding and
|
||||
modifying it. A manual loop browser_reload_run_editor?
|
||||
|
||||
dev jslint) I paste it to jslint (https://www.jslint.com/)
|
||||
and it didn't pass the lint test.
|
||||
|
||||
dev data load) How about putting all the Q/R in a dedicated text file
|
||||
to maintain a single quiz.js and quiz.css and have multiple quizzes
|
||||
using the same functional code?
|
||||
|
||||
|
||||
|
||||
46
S/quiz/quiz.css
Normal file
46
S/quiz/quiz.css
Normal file
@ -0,0 +1,46 @@
|
||||
/* (A) WRAPPER */
|
||||
#quizWrap {
|
||||
max-width: 600px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
/* (B) QUESTION */
|
||||
#quizQn {
|
||||
padding: 20px;
|
||||
background: #4c93ba;
|
||||
color: #fff;
|
||||
font-size: 24px;
|
||||
border-radius: 10px;
|
||||
}
|
||||
|
||||
/* (C) ANSWERS */
|
||||
#quizAns {
|
||||
margin: 10px 0;
|
||||
display: grid;
|
||||
grid-template-columns: auto auto;
|
||||
grid-gap: 10px;
|
||||
}
|
||||
#quizAns input[type=radio] { display: none; }
|
||||
#quizAns label {
|
||||
background: #fafafa;
|
||||
border: 1px solid #eee;
|
||||
border-radius: 10px;
|
||||
padding: 10px;
|
||||
font-size: 20px;
|
||||
cursor: pointer;
|
||||
text-align: center;
|
||||
}
|
||||
#quizAns label.correct {
|
||||
background: #d8ffc4;
|
||||
border: 1px solid #60a03f;
|
||||
}
|
||||
#quizAns label.wrong {
|
||||
background: #ffe8e8;
|
||||
border: 1px solid #c78181;
|
||||
}
|
||||
|
||||
/* (D) BODY... DOES NOT QUITE MATTER */
|
||||
html, body {
|
||||
background: #74b6db;
|
||||
font-family: arial, sans-serif;
|
||||
}
|
||||
16
S/quiz/quiz.html
Normal file
16
S/quiz/quiz.html
Normal file
@ -0,0 +1,16 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>
|
||||
Simple Javascript Quiz Demo
|
||||
</title>
|
||||
|
||||
<!-- (A) LOAD QUIZ CSS + JS -->
|
||||
<link href="quiz.css" rel="stylesheet">
|
||||
<script src="quiz.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<!-- (B) QUIZ CONTAINER -->
|
||||
<div id="quizWrap"></div>
|
||||
</body>
|
||||
</html>
|
||||
136
S/quiz/quiz.js
Normal file
136
S/quiz/quiz.js
Normal file
@ -0,0 +1,136 @@
|
||||
var quiz = {
|
||||
// (A) PROPERTIES
|
||||
// (A1) QUESTIONS & ANSWERS
|
||||
// Q = QUESTION, O = OPTIONS, A = CORRECT ANSWER
|
||||
data: [
|
||||
{
|
||||
q : "What is the standard distance between the target and archer in Olympics?",
|
||||
o : [
|
||||
"50 meters",
|
||||
"70 meters",
|
||||
"100 meters",
|
||||
"120 meters"
|
||||
],
|
||||
a : 1 // arrays start with 0, so answer is 70 meters
|
||||
},
|
||||
{
|
||||
q : "Which is the highest number on a standard roulette wheel?",
|
||||
o : [
|
||||
"22",
|
||||
"24",
|
||||
"32",
|
||||
"36"
|
||||
],
|
||||
a : 3
|
||||
},
|
||||
{
|
||||
q : "How much wood could a woodchuck chuck if a woodchuck would chuck wood?",
|
||||
o : [
|
||||
"400 pounds",
|
||||
"550 pounds",
|
||||
"700 pounds",
|
||||
"750 pounds"
|
||||
],
|
||||
a : 2
|
||||
},
|
||||
{
|
||||
q : "Which is the seventh planet from the sun?",
|
||||
o : [
|
||||
"Uranus",
|
||||
"Earth",
|
||||
"Pluto",
|
||||
"Mars"
|
||||
],
|
||||
a : 0
|
||||
},
|
||||
{
|
||||
q : "Which is the largest ocean on Earth?",
|
||||
o : [
|
||||
"Atlantic Ocean",
|
||||
"Indian Ocean",
|
||||
"Arctic Ocean",
|
||||
"Pacific Ocean"
|
||||
],
|
||||
a : 3
|
||||
}
|
||||
],
|
||||
|
||||
// (A2) HTML ELEMENTS
|
||||
hWrap: null, // HTML quiz container
|
||||
hQn: null, // HTML question wrapper
|
||||
hAns: null, // HTML answers wrapper
|
||||
|
||||
// (A3) GAME FLAGS
|
||||
now: 0, // current question
|
||||
score: 0, // current score
|
||||
|
||||
// (B) INIT QUIZ HTML
|
||||
init: function(){
|
||||
// (B1) WRAPPER
|
||||
quiz.hWrap = document.getElementById("quizWrap");
|
||||
|
||||
// (B2) QUESTIONS SECTION
|
||||
quiz.hQn = document.createElement("div");
|
||||
quiz.hQn.id = "quizQn";
|
||||
quiz.hWrap.appendChild(quiz.hQn);
|
||||
|
||||
// (B3) ANSWERS SECTION
|
||||
quiz.hAns = document.createElement("div");
|
||||
quiz.hAns.id = "quizAns";
|
||||
quiz.hWrap.appendChild(quiz.hAns);
|
||||
|
||||
// (B4) GO!
|
||||
quiz.draw();
|
||||
},
|
||||
|
||||
// (C) DRAW QUESTION
|
||||
draw: function(){
|
||||
// (C1) QUESTION
|
||||
quiz.hQn.innerHTML = quiz.data[quiz.now].q;
|
||||
|
||||
// (C2) OPTIONS
|
||||
quiz.hAns.innerHTML = "";
|
||||
for (let i in quiz.data[quiz.now].o) {
|
||||
let radio = document.createElement("input");
|
||||
radio.type = "radio";
|
||||
radio.name = "quiz";
|
||||
radio.id = "quizo" + i;
|
||||
quiz.hAns.appendChild(radio);
|
||||
let label = document.createElement("label");
|
||||
label.innerHTML = quiz.data[quiz.now].o[i];
|
||||
label.setAttribute("for", "quizo" + i);
|
||||
label.dataset.idx = i;
|
||||
label.addEventListener("click", quiz.select);
|
||||
quiz.hAns.appendChild(label);
|
||||
}
|
||||
},
|
||||
|
||||
// (D) OPTION SELECTED
|
||||
select: function(){
|
||||
// (D1) DETACH ALL ONCLICK
|
||||
let all = quiz.hAns.getElementsByTagName("label");
|
||||
for (let label of all) {
|
||||
label.removeEventListener("click", quiz.select);
|
||||
}
|
||||
|
||||
// (D2) CHECK IF CORRECT
|
||||
let correct = this.dataset.idx == quiz.data[quiz.now].a;
|
||||
if (correct) {
|
||||
quiz.score++;
|
||||
this.classList.add("correct");
|
||||
} else {
|
||||
this.classList.add("wrong");
|
||||
}
|
||||
|
||||
// (D3) NEXT QUESTION OR END GAME
|
||||
quiz.now++;
|
||||
setTimeout(function(){
|
||||
if (quiz.now < quiz.data.length) { quiz.draw(); }
|
||||
else {
|
||||
quiz.hQn.innerHTML = `You have answered ${quiz.score} of ${quiz.data.length} correctly.`;
|
||||
quiz.hAns.innerHTML = "";
|
||||
}
|
||||
}, 1000);
|
||||
}
|
||||
};
|
||||
window.addEventListener("load", quiz.init);
|
||||
83
S/quiz/quiz_imapsync.css
Executable file
83
S/quiz/quiz_imapsync.css
Executable file
@ -0,0 +1,83 @@
|
||||
|
||||
/* Taken from https://code-boxx.com/simple-javascript-quiz */
|
||||
|
||||
/* (A) WRAPPER */
|
||||
#quizWrap {
|
||||
border-style: solid;
|
||||
border-collapse: collapse;
|
||||
background: #e0e0e0;
|
||||
}
|
||||
|
||||
#quizNumber,#quizScore{
|
||||
text-align: center;
|
||||
padding: 10px;
|
||||
border-width: thin;
|
||||
border-style: solid;
|
||||
border-left-style: none;
|
||||
border-right-style: none;
|
||||
}
|
||||
|
||||
#quizScore{
|
||||
border-bottom-style: none;
|
||||
}
|
||||
|
||||
#quizRestart {
|
||||
margin: auto;
|
||||
margin-bottom: 10px;
|
||||
text-align: center;
|
||||
padding: 10px;
|
||||
border-radius: 10px;
|
||||
border-style: solid;
|
||||
border-width: thin;
|
||||
background: #d8ffc4;
|
||||
width: 100px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
#quizQn {
|
||||
padding: 20px;
|
||||
text-align: center;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/* (C) ANSWERS */
|
||||
#quizAns {
|
||||
margin: 10px;
|
||||
text-align: center;
|
||||
border-width: thin;
|
||||
display: grid;
|
||||
grid-template-columns: auto auto;
|
||||
grid-gap: 10px;
|
||||
justify-content: space-evenly;
|
||||
align-content: space-evenly;
|
||||
}
|
||||
|
||||
#quizAns input[type=radio] { display: none; }
|
||||
|
||||
#quizAns label {
|
||||
/* background: #cccccc;
|
||||
border: 1px solid #eee;
|
||||
font-size: 20px; */
|
||||
cursor: pointer;
|
||||
background: #ffffff;
|
||||
font-weight: bold;
|
||||
padding: 10px;
|
||||
border-radius: 10px;
|
||||
border-style: solid;
|
||||
border-width: thin;
|
||||
margin-top: 5px;
|
||||
margin-left: 25px;
|
||||
margin-right: 25px;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
#quizAns label.correct {
|
||||
background: #d8ffc4;
|
||||
border: 1px solid #60a03f;
|
||||
}
|
||||
|
||||
#quizAns label.wrong {
|
||||
background: #ffe8e8;
|
||||
border: 1px solid #c78181;
|
||||
}
|
||||
|
||||
20
S/quiz/quiz_imapsync.html
Executable file
20
S/quiz/quiz_imapsync.html
Executable file
@ -0,0 +1,20 @@
|
||||
<!DOCTYPE html>
|
||||
|
||||
<!-- Taken from https://code-boxx.com/simple-javascript-quiz -->
|
||||
|
||||
<html>
|
||||
<head>
|
||||
<title>
|
||||
Imapsync Quiz
|
||||
</title>
|
||||
|
||||
<!-- (A) LOAD QUIZ CSS + JS -->
|
||||
<link href="quiz_imapsync.css" rel="stylesheet">
|
||||
<script src="quiz_imapsync.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<!-- (B) QUIZ CONTAINER -->
|
||||
<div id="quizWrap"></div>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
245
S/quiz/quiz_imapsync.js
Executable file
245
S/quiz/quiz_imapsync.js
Executable file
@ -0,0 +1,245 @@
|
||||
|
||||
// Taken from https://code-boxx.com/simple-javascript-quiz
|
||||
|
||||
var quiz = {
|
||||
// (A) PROPERTIES
|
||||
// (A1) QUESTIONS & ANSWERS
|
||||
// Q = QUESTION, O = OPTIONS, A = CORRECT ANSWER
|
||||
|
||||
data: [
|
||||
{
|
||||
a : 1,
|
||||
o : [
|
||||
"Facebook",
|
||||
"POP, IMAP, HTTP",
|
||||
"SMTP, ICQ",
|
||||
"Twitter",
|
||||
"FTP, GOPHER",
|
||||
"Instagram"
|
||||
],
|
||||
q : "What are the main protocols usually used to access a mailbox?"
|
||||
},
|
||||
{
|
||||
a : 2,
|
||||
o : [
|
||||
"I'M A Passager",
|
||||
"Instant Mailbox Access Possibility",
|
||||
"Internet Message Access Protocol",
|
||||
"In My Ambiguous Posture",
|
||||
"In My Ambience Place",
|
||||
"Izorc Muggle Ark Prout"
|
||||
],
|
||||
q : "What means the acronym IMAP?"
|
||||
},
|
||||
{
|
||||
a : 2,
|
||||
o : [
|
||||
"No parameter is needed",
|
||||
"Harry Potter's magic wang",
|
||||
"1) The IMAP server name + 2) the user login + 3) the password",
|
||||
"1) the user login + 2) the password"
|
||||
],
|
||||
q : "What are the parameters needed to access an IMAP mailbox?"
|
||||
},
|
||||
{
|
||||
a : 4,
|
||||
o : [
|
||||
"0",
|
||||
"2",
|
||||
"3",
|
||||
"4",
|
||||
"6",
|
||||
"8"
|
||||
],
|
||||
q : "How many parameters are mandatory to synchronize two IMAP mailboxes with imapsync?"
|
||||
},
|
||||
{
|
||||
a : 0,
|
||||
o : [
|
||||
"No",
|
||||
"Yes"
|
||||
],
|
||||
q : "Can Imapsync synchronize POP accounts?"
|
||||
},
|
||||
{
|
||||
a : 1,
|
||||
o : [
|
||||
"No",
|
||||
"Yes"
|
||||
],
|
||||
q : "Can Imapsync synchronize Gmail accounts?"
|
||||
},
|
||||
{
|
||||
a : 1,
|
||||
o : [
|
||||
"No",
|
||||
"Yes"
|
||||
],
|
||||
q : "Can Imapsync synchronize Office365 accounts?"
|
||||
},
|
||||
{
|
||||
a : 0,
|
||||
o : [
|
||||
"No",
|
||||
"Yes"
|
||||
],
|
||||
q : "Can Imapsync synchronize Contacts, Calendars, Chats, or Notes?"
|
||||
},
|
||||
{
|
||||
a : 0,
|
||||
o : [
|
||||
"NO LIMIT",
|
||||
"GPL",
|
||||
"WTFPL",
|
||||
"MIT",
|
||||
"CC0",
|
||||
"Proprietary"
|
||||
],
|
||||
q : "What is the Imapsync License name?"
|
||||
},
|
||||
{
|
||||
a : 0,
|
||||
o : [
|
||||
"No limits to do anything with this work and this license.",
|
||||
"All permissions restricted.",
|
||||
"Use it for good or evil.",
|
||||
"Too long to fit here."
|
||||
],
|
||||
q : "What is the Imapsync License main text?"
|
||||
},
|
||||
{
|
||||
a : 0,
|
||||
o : [
|
||||
"Yes, sometimes with delay, he's a human",
|
||||
"No, never, email is dead",
|
||||
"Yes, immediately and 24h/24, he's a robot",
|
||||
"What is email?"
|
||||
],
|
||||
q : "Does the imapsync author Gilles LAMIRAL reply to every email?"
|
||||
}
|
||||
],
|
||||
dataDev: [
|
||||
{
|
||||
a : 1,
|
||||
o : [
|
||||
"Facebook",
|
||||
"POP, IMAP, HTTP",
|
||||
"SMTP, ICQ",
|
||||
"Twitter",
|
||||
"FTP, GOPHER",
|
||||
"Instagram"
|
||||
],
|
||||
q : "What are the main protocols usually used to access a mailbox?"
|
||||
}
|
||||
],
|
||||
|
||||
// (B) INIT QUIZ HTML
|
||||
init: function(){
|
||||
// (B1) WRAPPER
|
||||
quiz.hWrap = null;
|
||||
quiz.hScore = null;
|
||||
quiz.hRestart = null;
|
||||
quiz.hQn = null;
|
||||
quiz.hAns = null;
|
||||
quiz.now = 0;
|
||||
quiz.score = 0;
|
||||
|
||||
quiz.hWrap = document.getElementById("quizWrap");
|
||||
quiz.hWrap.innerHTML = "";
|
||||
|
||||
// NUMBER SECTION
|
||||
quiz.hNumber = document.createElement("div");
|
||||
quiz.hNumber.id = "quizNumber";
|
||||
quiz.hWrap.appendChild(quiz.hNumber);
|
||||
|
||||
// (B2) QUESTIONS SECTION
|
||||
quiz.hQn = document.createElement("div");
|
||||
quiz.hQn.id = "quizQn";
|
||||
quiz.hWrap.appendChild(quiz.hQn);
|
||||
|
||||
// (B3) ANSWERS SECTION
|
||||
quiz.hAns = document.createElement("div");
|
||||
quiz.hAns.id = "quizAns";
|
||||
quiz.hWrap.appendChild(quiz.hAns);
|
||||
|
||||
// SCORE SECTION
|
||||
quiz.hScore = document.createElement("div");
|
||||
quiz.hScore.id = "quizScore";
|
||||
quiz.hWrap.appendChild(quiz.hScore);
|
||||
|
||||
// RESTART SECTION
|
||||
quiz.hRestart = document.createElement("div");
|
||||
quiz.hRestart.id = "quizRestart";
|
||||
quiz.hWrap.appendChild(quiz.hRestart);
|
||||
quiz.hRestart.innerHTML = "Restart Quiz";
|
||||
document.getElementById("quizRestart").addEventListener("click", quiz.restart);
|
||||
// (B4) GO!
|
||||
quiz.draw();
|
||||
},
|
||||
|
||||
// (C) DRAW QUESTION
|
||||
draw: function(){
|
||||
// SCORE
|
||||
var QnNumber = `${quiz.now + 1}/${quiz.data.length}`;
|
||||
var ScoreNb = `${quiz.score}/${quiz.now}`;
|
||||
|
||||
quiz.hNumber.innerHTML = `Question ${QnNumber}`;
|
||||
quiz.hScore.innerHTML = `Score ${ScoreNb}`;
|
||||
|
||||
// (C1) QUESTION
|
||||
quiz.hQn.innerHTML = quiz.data[quiz.now].q;
|
||||
|
||||
// (C2) OPTIONS
|
||||
quiz.hAns.innerHTML = "";
|
||||
for (let i in quiz.data[quiz.now].o) {
|
||||
let radio = document.createElement("input");
|
||||
radio.type = "radio";
|
||||
radio.name = "quiz";
|
||||
radio.id = "quizo" + i;
|
||||
quiz.hAns.appendChild(radio);
|
||||
let label = document.createElement("label");
|
||||
label.innerHTML = quiz.data[quiz.now].o[i];
|
||||
label.setAttribute("for", "quizo" + i);
|
||||
label.dataset.idx = i;
|
||||
label.addEventListener("click", quiz.select);
|
||||
quiz.hAns.appendChild(label);
|
||||
}
|
||||
},
|
||||
|
||||
// (D) OPTION SELECTED
|
||||
select: function(){
|
||||
// (D1) DETACH ALL ONCLICK
|
||||
let all = quiz.hAns.getElementsByTagName("label");
|
||||
for (let label of all) {
|
||||
label.removeEventListener("click", quiz.select);
|
||||
}
|
||||
|
||||
// (D2) CHECK IF CORRECT
|
||||
let correct = this.dataset.idx == quiz.data[quiz.now].a;
|
||||
if (correct) {
|
||||
quiz.score++;
|
||||
this.classList.add("correct");
|
||||
} else {
|
||||
this.classList.add("wrong");
|
||||
}
|
||||
|
||||
// (D3) NEXT QUESTION OR END GAME
|
||||
quiz.now++;
|
||||
setTimeout(function(){
|
||||
if (quiz.now < quiz.data.length) { quiz.draw(); }
|
||||
else {
|
||||
// quiz.hNumber.innerHTML = "";
|
||||
ScoreNb = `${quiz.score}/${quiz.now}`;
|
||||
quiz.hScore.innerHTML = `Score ${ScoreNb}`;
|
||||
quiz.hQn.innerHTML = "Finished!";
|
||||
quiz.hAns.innerHTML = "";
|
||||
}
|
||||
}, 800);
|
||||
},
|
||||
|
||||
restart:function(){
|
||||
quiz.init() ;
|
||||
}
|
||||
};
|
||||
|
||||
window.addEventListener("load", quiz.init);
|
||||
@ -42,6 +42,15 @@ I'm not sure I deserve such great quotes for my work on Imapsync, anyway here th
|
||||
</p>
|
||||
<!--#include file="S/tw-mention.html" -->
|
||||
|
||||
<blockquote class="twitter-tweet">
|
||||
<p lang="en" dir="ltr">
|
||||
imapsync is simply the best and most usable tool ever developed. Works perfect!
|
||||
Thank you <a href="https://twitter.com/imapsync?ref_src=twsrc%5Etfw">@imapsync</a></p>— bkcrri (@bkcrri)
|
||||
<a href="https://twitter.com/bkcrri/status/1456392869808328706?ref_src=twsrc%5Etfw">November 4, 2021</a>
|
||||
</blockquote>
|
||||
<hr>
|
||||
|
||||
|
||||
<blockquote class="twitter-tweet">
|
||||
<p lang="en" dir="ltr">What’s your favorite IMAP migration/sync tool? I made the best experiences with
|
||||
<a href="https://twitter.com/imapsync?ref_src=twsrc%5Etfw">@imapsync</a>.
|
||||
@ -157,7 +166,7 @@ alt="Viewable With Any Browser" >
|
||||
<!--#config timefmt="%D" -->
|
||||
<!--#config timefmt="%A %B %d, %Y" -->
|
||||
<b>This document was last modified on <!--#echo var="LAST_MODIFIED" --></b>
|
||||
($Id: testimonial.shtml,v 1.8 2019/11/15 11:35:16 gilles Exp gilles $)<br>
|
||||
($Id: testimonial.shtml,v 1.9 2021/11/05 12:04:12 gilles Exp gilles $)<br>
|
||||
<a href="#TOP">Top of the page</a>
|
||||
</p>
|
||||
</footer>
|
||||
|
||||
62
TODO
62
TODO
@ -1,5 +1,5 @@
|
||||
#!/bin/cat
|
||||
# $Id: TODO,v 1.257 2021/07/05 20:19:31 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
|
||||
|
||||
@ -9,6 +9,49 @@ TODO file for imapsync
|
||||
|
||||
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
|
||||
Talk about size discrepencies.
|
||||
Gmail doesn't count duplicates sizes twice.
|
||||
Servers reported message sizes are always not the actual messages sizes.
|
||||
Where put that information?
|
||||
|
||||
SUGGESTED 2022_01_26 by Kuch/Mitchell/D.
|
||||
Make --delete1 be optionally "Move to Trash folder"
|
||||
Use MOVE if possible
|
||||
https://datatracker.ietf.org/doc/html/rfc6851
|
||||
|
||||
SUGGESTED 2022_01_09 by Neustradamus
|
||||
Add SCRAM-SHA* support
|
||||
https://github.com/imapsync/imapsync/issues/313
|
||||
https://perldoc.perl.org/Digest::SHA
|
||||
|
||||
|
||||
SUGGESTED 2021_06_13 by rotemes
|
||||
https://github.com/imapsync/imapsync/issues/288
|
||||
Add a counter for skipped because of already copied and
|
||||
because of other things.
|
||||
What ENVELOPE could bring?
|
||||
( 'FLAGS', 'INTERNALDATE', 'RFC822.SIZE' ) ;
|
||||
( 'FLAGS', 'INTERNALDATE', 'RFC822.SIZE' , 'ENVELOPE' )
|
||||
|
||||
SUGGESTED 2021_05_29 on github https://github.com/imapsync/imapsync/issues/78
|
||||
ripmime https://github.com/inflex/ripMIME
|
||||
@ -51,7 +94,7 @@ to sync only the Sent folder.
|
||||
|
||||
SUGGESTED 2020_11_30 by Gilles
|
||||
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.
|
||||
|
||||
|
||||
@ -519,7 +562,7 @@ Write a Windows tutorial, TUTORIAL_Windows.html.
|
||||
|
||||
Write a good practices migration tips document, GOOD_PRACTICES.html
|
||||
|
||||
Add uidexpunge with --delete if possible (like with --delete2).
|
||||
Add uidexpunge with --delete1 if possible (like with --delete2).
|
||||
|
||||
Add the possibility to specify a unity with --maxsize and --minsize
|
||||
Example --maxsize 10MB --minsize 10KB
|
||||
@ -696,6 +739,15 @@ http://asg.web.cmu.edu/cyrus/download/imapd/altnamespace.html
|
||||
Now the TODO done! (or not)
|
||||
===========================================================================
|
||||
|
||||
DONE revision 2.169 date: 2021/12/07 17:13:44;
|
||||
Added --keepalive1 and --keepalive2 options. On by default.
|
||||
See https://metacpan.org/pod/Mail::IMAPClient#Keepalive
|
||||
|
||||
DONE revision 2.159 date: 2021/11/19 14:29:31
|
||||
SUGGESTED 2021_11_18 by Justas Umbrasas
|
||||
Add COMPRESS to imap connections
|
||||
--compress1 --compress2
|
||||
|
||||
DONE 2021/04/30 revision 2.111 by Gilles
|
||||
SUGGESTED 2021_04_22 by popular request
|
||||
Add an option --syncduplicates that syncs duplicates.
|
||||
@ -862,7 +914,7 @@ Inline help when Ctrl-c is hit
|
||||
|
||||
SUGGESTED 2016_07_15 by Alan Williams
|
||||
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.
|
||||
|
||||
SUGGESTED 2016_06_24 by Jean-Dominique Delyon
|
||||
@ -947,7 +999,7 @@ Option name: --pipemess "command arg1 arg2 ..."
|
||||
|
||||
|
||||
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.
|
||||
Could be done with the previous --pipemess with reformime.
|
||||
Thanks to Larry Moore for suggesting reformime tool!
|
||||
|
||||
1238
X/cgi_memo
1238
X/cgi_memo
File diff suppressed because it is too large
Load Diff
@ -1,11 +1,14 @@
|
||||
#!/bin/sh
|
||||
|
||||
# $Id: imapsync_csv_wrapper,v 1.5 2020/05/01 21:26:30 gilles Exp gilles $
|
||||
# $Id: imapsync_csv_wrapper,v 1.13 2021/11/01 13:24:47 gilles Exp gilles $
|
||||
|
||||
exec 3>&1
|
||||
|
||||
debug=/bin/true
|
||||
debug=/bin/false
|
||||
debug=true
|
||||
# comment the following to have debug data
|
||||
debug=false
|
||||
|
||||
PATH=$PATH:/home/www/apache24/cgi-bin/
|
||||
|
||||
echo3() {
|
||||
echo "$@" >&3
|
||||
@ -83,8 +86,9 @@ tests_uri_unescape()
|
||||
run_test test '"_a\n\n\nz_" = "_`uri_unescape a%0A%0A%0Az`_"'
|
||||
run_test test '"_`uri_unescape a%0A%0A%0Az`_" = "_`uri_unescape a%0A%0A%0Az`_"'
|
||||
run_test test 'A B' = 'A B'
|
||||
uri_unescape 'a%0A%0A%0Az' > /tmp/$$_zzz1.txt
|
||||
/bin/echo -e "a\n\n\nz" > /tmp/$$_zzz2.txt
|
||||
uri_unescape 'a%0Az' > /tmp/$$_zzz1.txt
|
||||
/bin/echo "a
|
||||
z" > /tmp/$$_zzz2.txt
|
||||
run_test diff /tmp/$$_zzz1.txt /tmp/$$_zzz2.txt
|
||||
rm /tmp/$$_zzz1.txt /tmp/$$_zzz2.txt
|
||||
z3=`uri_unescape a%0A%0A%0Az`
|
||||
@ -208,17 +212,33 @@ tests_is_blank_or_comment()
|
||||
|
||||
logfailures()
|
||||
{
|
||||
:
|
||||
run_on_each_line_failures="$run_on_each_line_failures
|
||||
$@"
|
||||
}
|
||||
|
||||
tests_logfailures()
|
||||
{
|
||||
:
|
||||
#reset
|
||||
run_on_each_line_failures=
|
||||
|
||||
# add Blabla
|
||||
run_test logfailures Blabla
|
||||
run_test test "
|
||||
Blabla" = "$run_on_each_line_failures"
|
||||
|
||||
# add Kiki
|
||||
run_test logfailures Kiki
|
||||
run_test test "
|
||||
Blabla
|
||||
Kiki" = "$run_on_each_line_failures"
|
||||
|
||||
#reset again
|
||||
run_on_each_line_failures=
|
||||
}
|
||||
|
||||
|
||||
|
||||
run_on_each_line()
|
||||
run_on_each_line()
|
||||
{
|
||||
echodebug '### Entering run_on_each_line ###'
|
||||
test -f abort_$$.txt && { echo abort demanded so not doing normal stuff ; return ; }
|
||||
@ -228,12 +248,6 @@ run_on_each_line()
|
||||
csv_data_multilines="$1"
|
||||
echodebug "csv_data_multilines=[$csv_data_multilines]"
|
||||
|
||||
test 1 -le "$#" && shift
|
||||
failures_file=${1:-""}
|
||||
echodebug failures_file="$failures_file"
|
||||
|
||||
test -x "$failures_file" && { echo3 "failure file $failures_file is an executable. Leaving run_on_each_line()." ; return ; }
|
||||
|
||||
test 1 -le "$#" && shift
|
||||
command=${1:-echo}
|
||||
echodebug command="$command" "$@"
|
||||
@ -244,43 +258,49 @@ run_on_each_line()
|
||||
line_number=0
|
||||
csv_number=0
|
||||
failures_number=0
|
||||
echo "$csv_data_multilines" | while IFS=';' read h1 u1 p1 h2 u2 p2 fake; do
|
||||
while IFS=';' read h1 u1 p1 h2 u2 p2 extra fake; do
|
||||
test -f abort_$$.txt && { echo abort demanded so not doing normal stuff ; return ; }
|
||||
line_number=`expr 1 + $line_number`
|
||||
if is_blank_or_comment "$h1$u1$p1$h2$u2$p2$fake" ; then
|
||||
echo3 "Ignoring line " $line_number "$h1$u1$p1$h2$u2$p2$fake"
|
||||
if is_blank_or_comment "$h1$u1$p1$h2$u2$p2$extra" ; then
|
||||
echo3 "Ignoring line " $line_number "$h1$u1$p1$h2$u2$p2$extra"
|
||||
else
|
||||
csv_number=`expr 1 + $csv_number`
|
||||
echo3 "Processing line " $line_number run $csv_number "[$h1] [$u1] [xxx] [$h2] [$u2] [xxx] [$fake] $$"
|
||||
$command "$@" --host1 "$h1" --user1 "$u1" --password1 "$p1" --host2 "$h2" --user2 "$u2" --password2 "$p2"
|
||||
echo3 "Processing line " $line_number csv run $csv_number "[$h1] [$u1] [xxx] [$h2] [$u2] [xxx] [$extra] $$"
|
||||
$command "$@" --host1 "$h1" --user1 "$u1" --password1 "$p1" --host2 "$h2" --user2 "$u2" --password2 "$p2" $extra
|
||||
command_status=$?
|
||||
test "0" != "$command_status" && failures_number=`expr 1 + $failures_number`
|
||||
logfailures "$failures_file" "$command_status" "$line_number" "$csv_number"
|
||||
echodebug command_status=$command_status failures_number=$failures_number
|
||||
test "0" != "$command_status" && logfailures "line $line_number csv run $csv_number returned with status $command_status ($h1;$u1;$p1;$h2;$u2;$p2;$extra;)"
|
||||
fi
|
||||
done
|
||||
echodebug Leaving run_on_each_line
|
||||
done << EOF
|
||||
$csv_data_multilines
|
||||
EOF
|
||||
|
||||
echodebug Leaving run_on_each_line, failures_number=$failures_number
|
||||
|
||||
test "0" != "$failures_number" && echo "$run_on_each_line_failures"
|
||||
test "0" != "$failures_number" && return 1
|
||||
return 0
|
||||
}
|
||||
|
||||
tests_run_on_each_line()
|
||||
tests_run_on_each_line()
|
||||
{
|
||||
# 1-4
|
||||
run_test test '' = "`run_on_each_line`"
|
||||
run_test test '' = "`run_on_each_line ''`"
|
||||
run_test test '' = "`run_on_each_line '' 'log.txt'`"
|
||||
run_test test '' = "`run_on_each_line '' 'log.txt' echo imapsync`"
|
||||
run_test test '' = "`run_on_each_line '' echo imapsync`"
|
||||
run_test test '' = "`run_on_each_line '' echo imapsync blabla blibli`"
|
||||
|
||||
|
||||
# 5-7 blank data
|
||||
run_test test '' = "`run_on_each_line ' '`"
|
||||
run_test test '' = "`run_on_each_line ' ' 'log.txt'`"
|
||||
run_test test '' = "`run_on_each_line ' ' 'log.txt' echo imapsync`"
|
||||
run_test test '' = "`run_on_each_line ' ' `"
|
||||
run_test test '' = "`run_on_each_line ' ' echo imapsync blabla blibli`"
|
||||
|
||||
# 8-10 comment data
|
||||
run_test test '' = "`run_on_each_line '# '`"
|
||||
run_test test '' = "`run_on_each_line '# ' 'log.txt'`"
|
||||
run_test test '' = "`run_on_each_line '# ' 'log.txt' echo imapsync`"
|
||||
run_test test '' = "`run_on_each_line ' # '`"
|
||||
run_test test '' = "`run_on_each_line '# ' echo imapsync blabla blibli`"
|
||||
|
||||
# 11-13 empty line
|
||||
myval='
|
||||
@ -289,10 +309,10 @@ tests_run_on_each_line()
|
||||
myret=`run_on_each_line "$myval"`
|
||||
run_test test "" = "$myret"
|
||||
|
||||
myret=`run_on_each_line "$myval" 'log.txt'`
|
||||
myret=`run_on_each_line "$myval"`
|
||||
run_test test "" = "$myret"
|
||||
|
||||
myret=`run_on_each_line "$myval" 'log.txt' echo imapsync`
|
||||
myret=`run_on_each_line "$myval" echo imapsync blabla blibli`
|
||||
run_test test "" = "$myret"
|
||||
|
||||
|
||||
@ -308,39 +328,33 @@ tests_run_on_each_line()
|
||||
myret=`run_on_each_line "$myval"`
|
||||
run_test test "" = "$myret"
|
||||
|
||||
myret=`run_on_each_line "$myval" 'log.txt'`
|
||||
myret=`run_on_each_line "$myval" `
|
||||
run_test test "" = "$myret"
|
||||
|
||||
myret=`run_on_each_line "$myval" 'log.txt' echo imapsync`
|
||||
myret=`run_on_each_line "$myval" echo imapsync blabla blibli`
|
||||
run_test test "" = "$myret"
|
||||
|
||||
|
||||
# 17-21
|
||||
# 17-18
|
||||
# csv data no blank no comment
|
||||
lines='a1;b1;c1;d1;e1;f1
|
||||
a2;b2;c2;d2;e2;f2
|
||||
a3;b3;c3;d3;e3;f3'
|
||||
|
||||
# No failure file (so /dev/null), no command (so echo)
|
||||
# no command (so echo)
|
||||
lines_out='--host1 a1 --user1 b1 --password1 c1 --host2 d1 --user2 e1 --password2 f1
|
||||
--host1 a2 --user1 b2 --password1 c2 --host2 d2 --user2 e2 --password2 f2
|
||||
--host1 a3 --user1 b3 --password1 c3 --host2 d3 --user2 e3 --password2 f3'
|
||||
run_test test "$lines_out" = "`run_on_each_line "$lines"`"
|
||||
|
||||
# failure file is a command => BAD => do nothing
|
||||
cp /bin/echo "/tmp/myecho$$"
|
||||
run_test test "" = "`run_on_each_line "$lines" /tmp/myecho$$`"
|
||||
run_test test "" = "`run_on_each_line "$lines" /tmp/myecho$$ echo`"
|
||||
run_test test "" = "`run_on_each_line "$lines" /tmp/myecho$$ echo imapsync blabla bla`"
|
||||
rm "/tmp/myecho$$"
|
||||
|
||||
# No failure file (so /dev/null), command = echo imapsync
|
||||
# command = echo imapsync
|
||||
lines_out='imapsync --host1 a1 --user1 b1 --password1 c1 --host2 d1 --user2 e1 --password2 f1
|
||||
imapsync --host1 a2 --user1 b2 --password1 c2 --host2 d2 --user2 e2 --password2 f2
|
||||
imapsync --host1 a3 --user1 b3 --password1 c3 --host2 d3 --user2 e3 --password2 f3'
|
||||
run_test test "$lines_out" = "`run_on_each_line "$lines" '' echo imapsync`"
|
||||
run_test test "$lines_out" = "`run_on_each_line "$lines" echo imapsync`"
|
||||
|
||||
# 22-27
|
||||
# 19-20
|
||||
# csv data + blanks + comments
|
||||
lines='a1;b1;c1;d1;e1;f1
|
||||
# blabla 2
|
||||
@ -349,34 +363,97 @@ a2;b2;c2;d2;e2;f2
|
||||
a3;b3;c3;d3;e3;f3
|
||||
# end'
|
||||
|
||||
# No failure file (so /dev/null), no command (so echo)
|
||||
# no command (so echo)
|
||||
lines_out='--host1 a1 --user1 b1 --password1 c1 --host2 d1 --user2 e1 --password2 f1
|
||||
--host1 a2 --user1 b2 --password1 c2 --host2 d2 --user2 e2 --password2 f2
|
||||
--host1 a3 --user1 b3 --password1 c3 --host2 d3 --user2 e3 --password2 f3'
|
||||
run_test test "$lines_out" = "`run_on_each_line "$lines"`"
|
||||
|
||||
# failure file is a command => BAD => do nothing
|
||||
cp /bin/echo "/tmp/myecho$$"
|
||||
run_test test "" = "`run_on_each_line "$lines" /tmp/myecho$$`"
|
||||
run_test test "" = "`run_on_each_line "$lines" /tmp/myecho$$ echo`"
|
||||
run_test test "" = "`run_on_each_line "$lines" /tmp/myecho$$ echo imapsync blabla bla`"
|
||||
rm "/tmp/myecho$$"
|
||||
|
||||
# No failure file (so /dev/null), command = echo imapsync
|
||||
# command = echo imapsync
|
||||
lines_out='imapsync --host1 a1 --user1 b1 --password1 c1 --host2 d1 --user2 e1 --password2 f1
|
||||
imapsync --host1 a2 --user1 b2 --password1 c2 --host2 d2 --user2 e2 --password2 f2
|
||||
imapsync --host1 a3 --user1 b3 --password1 c3 --host2 d3 --user2 e3 --password2 f3'
|
||||
run_test test "$lines_out" = "`run_on_each_line "$lines" '' echo imapsync`"
|
||||
run_test test "$lines_out" = "`run_on_each_line "$lines" echo imapsync`"
|
||||
|
||||
|
||||
|
||||
# 21-22
|
||||
# csv data 3/3;/6/6;/7/7;/8/8; parameters + blanks + comments
|
||||
# runs 1 2 3 4 5 6 7 8
|
||||
lines='a1;b1;c1
|
||||
# blabla 2
|
||||
a2;b2;c2;
|
||||
# bloblo 3
|
||||
a3;b3;c3;d3;e3;f3
|
||||
a4;b4;c4;d4;e4;f4;
|
||||
a5;b5;c5;d5;e5;f5;--extra blurp
|
||||
a6;b6;c6;d6;e6;f6;--extra blurp;
|
||||
a7;b7;c7;d7;e7;f7;--extra blurp; ignored
|
||||
a8;b8;c8;d8;e8;f8;--extra blurp; ignored;
|
||||
# end'
|
||||
|
||||
# no command (so echo)
|
||||
lines_out='--host1 a1 --user1 b1 --password1 c1 --host2 --user2 --password2
|
||||
--host1 a2 --user1 b2 --password1 c2 --host2 --user2 --password2
|
||||
--host1 a3 --user1 b3 --password1 c3 --host2 d3 --user2 e3 --password2 f3
|
||||
--host1 a4 --user1 b4 --password1 c4 --host2 d4 --user2 e4 --password2 f4
|
||||
--host1 a5 --user1 b5 --password1 c5 --host2 d5 --user2 e5 --password2 f5 --extra blurp
|
||||
--host1 a6 --user1 b6 --password1 c6 --host2 d6 --user2 e6 --password2 f6 --extra blurp
|
||||
--host1 a7 --user1 b7 --password1 c7 --host2 d7 --user2 e7 --password2 f7 --extra blurp
|
||||
--host1 a8 --user1 b8 --password1 c8 --host2 d8 --user2 e8 --password2 f8 --extra blurp'
|
||||
run_test test "$lines_out" = "`run_on_each_line "$lines"`"
|
||||
|
||||
# command = echo imapsync
|
||||
lines_out='imapsync --host1 a1 --user1 b1 --password1 c1 --host2 --user2 --password2
|
||||
imapsync --host1 a2 --user1 b2 --password1 c2 --host2 --user2 --password2
|
||||
imapsync --host1 a3 --user1 b3 --password1 c3 --host2 d3 --user2 e3 --password2 f3
|
||||
imapsync --host1 a4 --user1 b4 --password1 c4 --host2 d4 --user2 e4 --password2 f4
|
||||
imapsync --host1 a5 --user1 b5 --password1 c5 --host2 d5 --user2 e5 --password2 f5 --extra blurp
|
||||
imapsync --host1 a6 --user1 b6 --password1 c6 --host2 d6 --user2 e6 --password2 f6 --extra blurp
|
||||
imapsync --host1 a7 --user1 b7 --password1 c7 --host2 d7 --user2 e7 --password2 f7 --extra blurp
|
||||
imapsync --host1 a8 --user1 b8 --password1 c8 --host2 d8 --user2 e8 --password2 f8 --extra blurp'
|
||||
run_test test "$lines_out" = "`run_on_each_line "$lines" echo imapsync`"
|
||||
|
||||
|
||||
# 23-2x
|
||||
# "" input
|
||||
lines='a1;b1;c1;d1;e1;f1;--caca "KK"'
|
||||
|
||||
# no command (so echo)
|
||||
lines_out='--host1 a1 --user1 b1 --password1 c1 --host2 d1 --user2 e1 --password2 f1 --caca "KK"'
|
||||
run_test test "$lines_out" = "`run_on_each_line "$lines"`"
|
||||
|
||||
|
||||
# command = echo imapsync
|
||||
lines_out='imapsync --host1 a1 --user1 b1 --password1 c1 --host2 d1 --user2 e1 --password2 f1 --caca "KK"'
|
||||
run_test test "$lines_out" = "`run_on_each_line "$lines" echo imapsync`"
|
||||
|
||||
}
|
||||
|
||||
|
||||
remove_double_quotes()
|
||||
{
|
||||
echo "$1" | tr -d '"'
|
||||
}
|
||||
|
||||
tests_remove_double_quotes()
|
||||
{
|
||||
echo 'Entering tests_remove_double_quotes()'
|
||||
run_test test -z `remove_double_quotes`
|
||||
run_test test 'abc' = `remove_double_quotes 'abc'`
|
||||
run_test test -z `remove_double_quotes '"'`
|
||||
run_test test -z `remove_double_quotes '""'`
|
||||
run_test test 'abc' = `remove_double_quotes '"ab"c'`
|
||||
echo 'Leaving tests_remove_double_quotes()'
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
hashsync()
|
||||
{
|
||||
#set -x
|
||||
mystring=${1:-''}
|
||||
mykey=${2:-''}
|
||||
mystring=`remove_double_quotes ${1:-''}`
|
||||
mykey=${2:-''}
|
||||
# impressive! is not it? quoting shit!
|
||||
perl -MDigest::HMAC_SHA1 -e 'print Digest::HMAC_SHA1::hmac_sha1_hex( "'"$mystring"'", "'"$mykey"'" )'
|
||||
#set +x
|
||||
@ -385,11 +462,16 @@ hashsync()
|
||||
|
||||
tests_hashsync()
|
||||
{
|
||||
echo 'Entering tests_hashsync()'
|
||||
run_test test 'fbdb1d1b18aa6c08324b7d64b71fb76370690e1d' = `hashsync`
|
||||
run_test test 'fbdb1d1b18aa6c08324b7d64b71fb76370690e1d' = `hashsync ''`
|
||||
run_test test 'fbdb1d1b18aa6c08324b7d64b71fb76370690e1d' = `hashsync '' ''`
|
||||
run_test test 'e86a28a3611c1e7bbaf8057cd00ae122781a11fe' = `hashsync 'zzz' ''`
|
||||
run_test test '6a7b451ac99eab1531ad8e6cd544b32420c552ac' = `hashsync 'zzz' 'A'`
|
||||
|
||||
run_test test 'fbdb1d1b18aa6c08324b7d64b71fb76370690e1d' = `hashsync '""'`
|
||||
run_test test 'e86a28a3611c1e7bbaf8057cd00ae122781a11fe' = `hashsync '"zzz"'`
|
||||
echo 'Leaving tests_hashsync()'
|
||||
}
|
||||
|
||||
tests_caca()
|
||||
@ -480,7 +562,9 @@ tests()
|
||||
tests_run_on_each_line \
|
||||
tests_hashsync \
|
||||
tests_is_blank_or_comment \
|
||||
tests_logfailures
|
||||
tests_logfailures \
|
||||
tests_remove_double_quotes \
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -595,7 +679,7 @@ justlogin()
|
||||
date
|
||||
test -f abort_$$.txt && { echo Abort demanded so not doing normal stuff ; return ; }
|
||||
echo Now run imapsync --justlogin to check all credentials are ok
|
||||
if run_on_each_line "$csv_data_unescaped" "" \
|
||||
if run_on_each_line "$csv_data_unescaped" \
|
||||
imapsync --no-modulesversion --justlogin --tmpdir .
|
||||
then
|
||||
echo success of the just login check round
|
||||
@ -612,8 +696,8 @@ justfoldersizes()
|
||||
######################## just folders sizes counting round #####################'
|
||||
date
|
||||
test -f abort_$$.txt && { echo Abort demanded so not doing normal stuff ; return ; }
|
||||
echo Now run imapsync --justlogin to check all credentials are ok
|
||||
run_on_each_line "$csv_data_unescaped" "" \
|
||||
echo Now run imapsync --justfoldersizes to show the volume to be synced
|
||||
run_on_each_line "$csv_data_unescaped" \
|
||||
imapsync --no-modulesversion --justfoldersizes --tmpdir . \
|
||||
|| return 1
|
||||
}
|
||||
@ -625,8 +709,8 @@ sync_all()
|
||||
######################## now sync them all round ###############################'
|
||||
date
|
||||
test -f abort_$$.txt && { echo Abort demanded so not doing normal stuff ; return ; }
|
||||
echo Now run imapsync --justlogin to check all credentials are ok
|
||||
run_on_each_line "$csv_data_unescaped" "" \
|
||||
echo Now run imapsync on the data given
|
||||
run_on_each_line "$csv_data_unescaped" \
|
||||
imapsync --no-modulesversion --tmpdir . \
|
||||
|| return 1
|
||||
}
|
||||
@ -647,11 +731,13 @@ main()
|
||||
# All stderr to stdin, yeah I am like that
|
||||
exec 2>&1
|
||||
|
||||
# Some tests
|
||||
# Some tests, uncomment which one you work with and also the return one
|
||||
#run_tests tests_is_blank_or_comment
|
||||
#run_tests tests_run_on_each_line
|
||||
#run_tests tests_remove_blanks_and_comments
|
||||
#tests_hashsync
|
||||
#run_tests tests_logfailures
|
||||
#tests_remove_double_quotes
|
||||
#return
|
||||
|
||||
tests_all_verbose_if_failure || return 1
|
||||
@ -662,7 +748,9 @@ main()
|
||||
|
||||
getcsvdata
|
||||
|
||||
hashsync=`hashsync $csv_data_pure`
|
||||
hashsync=`hashsync "$csv_data_pure"`
|
||||
|
||||
test -z $hashsync && return 1
|
||||
|
||||
change_working_directory_if_under_cgi /var/tmp/imapsync_cgi/$hashsync/
|
||||
|
||||
@ -678,9 +766,8 @@ main()
|
||||
unset SERVER_SOFTWARE
|
||||
|
||||
# Now the real stuff
|
||||
justlogin || return 1
|
||||
|
||||
justfoldersizes
|
||||
#justlogin || return 1
|
||||
#justfoldersizes
|
||||
|
||||
sync_all || return 1
|
||||
|
||||
@ -694,6 +781,3 @@ main()
|
||||
tests_initialisation
|
||||
main
|
||||
return 0
|
||||
|
||||
|
||||
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
|
||||
|
||||
/* $Id: imapsync_form.css,v 1.9 2020/06/15 11:55:50 gilles Exp gilles $ */
|
||||
/* $Id: imapsync_form.css,v 1.10 2021/09/21 09:25:53 gilles Exp gilles $ */
|
||||
|
||||
body {
|
||||
color: black;
|
||||
@ -29,6 +29,10 @@ body {
|
||||
height: 50px ;
|
||||
}
|
||||
|
||||
#imapsync_log_bottom {
|
||||
scroll-margin-top: 300px ;
|
||||
}
|
||||
|
||||
.progress {
|
||||
/* text-align: center ; */
|
||||
/* font-size: 1.4em ; */
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
|
||||
// $Id: imapsync_form.js,v 1.20 2021/05/29 10:25:53 gilles Exp gilles $
|
||||
// $Id: imapsync_form.js,v 1.28 2022/04/16 16:51:07 gilles Exp gilles $
|
||||
|
||||
/*jslint browser: true*/ /*global $*/
|
||||
|
||||
@ -55,7 +55,30 @@ $(document).ready(
|
||||
var note = function note( message )
|
||||
{
|
||||
$("#tests").append( message ) ;
|
||||
}
|
||||
} ;
|
||||
|
||||
|
||||
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 )
|
||||
{
|
||||
@ -82,6 +105,8 @@ $(document).ready(
|
||||
return "ETA: unknown" ;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
var tests_last_eta = function tests_last_eta()
|
||||
{
|
||||
@ -257,7 +282,7 @@ $(document).ready(
|
||||
}
|
||||
else
|
||||
{
|
||||
slice_length = -240 ;
|
||||
slice_length = -2400 ;
|
||||
}
|
||||
slice_log = xhr.responseText.slice( slice_length ) ;
|
||||
eta_str = last_eta( slice_log ) ;
|
||||
@ -297,24 +322,24 @@ $(document).ready(
|
||||
if ( xhr.readyState === 4 )
|
||||
{
|
||||
// end of sync
|
||||
$("#progress-txt").text(
|
||||
$("#progress-txt").text(
|
||||
"Ended. It remains "
|
||||
+ eta_obj.msgs_left + " messages to be synced" ) ;
|
||||
|
||||
$( "#output" ).text( xhr.responseText ) ;
|
||||
}
|
||||
else
|
||||
{
|
||||
eta_str = eta_obj.str + " (refresh every " + refresh_interval_s + " s)" ;
|
||||
eta_str = eta_str.replace(/(\r\n|\n|\r)/gm, "") ; // trim newline
|
||||
//$("#tests").append( "refreshLog eta_str: " + eta_str + "\n" ) ;
|
||||
$("#progress-txt").text( eta_str ) ;
|
||||
|
||||
eta_str = eta_obj.str + " (refresh every " + refresh_interval_s + " s)" ;
|
||||
eta_str = eta_str.replace(/(\r\n|\n|\r)/gm, "") ; // trim newlines
|
||||
//$("#tests").append( "refreshLog eta_str: " + eta_str + "\n" ) ;
|
||||
$( "#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)
|
||||
{
|
||||
|
||||
@ -326,7 +351,6 @@ $(document).ready(
|
||||
// var headers = xhr.getAllResponseHeaders();
|
||||
// $("#console").append(headers);
|
||||
// $("#console").append("See the completed log\n");
|
||||
$("#link_to_bottom").show() ;
|
||||
clearInterval( timerRefreshLog ) ;
|
||||
refreshLog( xhr ) ; // a last time
|
||||
// back to enable state for next run
|
||||
@ -650,7 +674,6 @@ $(document).ready(
|
||||
// in case of a manual refresh, start with
|
||||
$("#bt-sync").prop("disabled", false);
|
||||
$("#bt-abort").prop("disabled", false);
|
||||
$("#link_to_bottom").hide();
|
||||
$("#progress-bar-left").css( "width", 100 + "%" ).attr( "aria-valuenow", 100 ) ;
|
||||
|
||||
$("#showpassword1").click(
|
||||
@ -678,7 +701,6 @@ $(document).ready(
|
||||
$( "#imapsync_current" ).load( "imapsync_current.txt" ) ;
|
||||
$("#bt-sync").prop("disabled", true) ;
|
||||
$("#bt-abort").prop("disabled", false) ;
|
||||
$("#link_to_bottom").hide() ;
|
||||
$("#progress-txt").text( "ETA: coming soon" ) ;
|
||||
store_form() ;
|
||||
imapsync() ;
|
||||
@ -778,6 +800,7 @@ $(document).ready(
|
||||
tests_store_retrieve( ) ;
|
||||
tests_last_eta( ) ;
|
||||
tests_decompose_eta_line( ) ;
|
||||
tests_last_x_lines( ) ;
|
||||
// tests_cryptojs( ) ;
|
||||
|
||||
// The following test can be used to check that if a test fails
|
||||
@ -785,15 +808,16 @@ $(document).ready(
|
||||
//is( 0, 1, "this test always fails" ) ;
|
||||
|
||||
tests_bilan( nb_attended_test ) ;
|
||||
|
||||
// If you want to always see the tests, uncomment the following
|
||||
// line
|
||||
// $("#tests").collapse("show") ;
|
||||
//$("#tests").collapse("show") ;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
init( ) ;
|
||||
tests( 29 ) ;
|
||||
tests( 38 ) ;
|
||||
retrieve_form( ) ;
|
||||
|
||||
}
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
<!DOCTYPE html>
|
||||
|
||||
<!-- $Id: imapsync_form_extra.html,v 1.18 2021/05/30 05:45:15 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">
|
||||
|
||||
@ -103,6 +103,9 @@
|
||||
<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>
|
||||
@ -231,6 +234,9 @@
|
||||
<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>
|
||||
@ -273,7 +279,12 @@
|
||||
<a id="buttons"></a>
|
||||
<hr>
|
||||
|
||||
<!-- Classical button to go to the log only -->
|
||||
<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" >
|
||||
@ -312,8 +323,8 @@
|
||||
|
||||
<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">
|
||||
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>
|
||||
@ -336,7 +347,6 @@
|
||||
|
||||
|
||||
</pre>
|
||||
<a id="link_to_bottom" href="#bottom">Bottom of imapsync log</a>
|
||||
</div>
|
||||
|
||||
<div class="col-sm-6 well">
|
||||
@ -351,7 +361,10 @@
|
||||
|
||||
</div>
|
||||
|
||||
<h2 class="text-center scripton">Log of imapsync run</h2>
|
||||
<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">
|
||||
|
||||
@ -374,6 +387,10 @@
|
||||
|
||||
</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">
|
||||
@ -390,46 +407,19 @@
|
||||
<hr>
|
||||
<p class="text-center">
|
||||
Imapsync <b>Online Status</b> over the <b>last 24h</b><br>
|
||||
<img class="img-responsive center-block" alt="Imapsync Online Status" src="https://lstu.fr/imapsync_online_status_24h_1200x70">
|
||||
<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>
|
||||
|
||||
<p class="text-center">
|
||||
Imapsync <b>Online Status</b> over the <b>last week</b><br>
|
||||
<img class="img-responsive center-block" alt="Imapsync Online Status" src="https://lstu.fr/imapsync_online_status_7d">
|
||||
</p>
|
||||
|
||||
<p class="text-center">
|
||||
Imapsync <b>Online Status</b> over the <b>last two months</b><br>
|
||||
<img class="img-responsive center-block" alt="Imapsync Online Status" src="https://lstu.fr/imapsync_online_status_2months_1200x70"><br>
|
||||
</p>
|
||||
|
||||
|
||||
<!--
|
||||
Uncomment the following when the data are available
|
||||
-->
|
||||
<!--
|
||||
|
||||
<p class="text-center">
|
||||
Imapsync <b>Online Status</b> over the <b>last year</b><br>
|
||||
<img class="img-responsive center-block" alt="Imapsync Online Status" src="https://lstu.fr/imapsync_online_status_1year_1200x70"><br>
|
||||
</p>
|
||||
|
||||
<p class="text-center">
|
||||
Imapsync <b>Online Status</b> over the <b>last 10 years</b><br>
|
||||
<img class="img-responsive center-block" alt="Imapsync Online Status" src="https://lstu.fr/imapsync_online_status_10years_1200x70-2"><br>
|
||||
</p>
|
||||
-->
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<div id="local_status_hetrix" class="collapse in">
|
||||
<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/7908dea8f3ff86eabdef6146307afd5f/414322.html">Imapsync Online Status</a>
|
||||
monitor page powered by the <a href="https://hetrixtools.com/uptime-monitor/414322.html">HetrixTools</a> company.
|
||||
<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>
|
||||
@ -452,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="#bottom" title="Bottom of the page" class="btn btn-info active" role="button">Bottom</a>
|
||||
<br>
|
||||
<small> ($Id: imapsync_form_extra.html,v 1.18 2021/05/30 05:45:15 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>
|
||||
</div>
|
||||
</div>
|
||||
@ -482,7 +472,5 @@ src="imapsync_form.js"
|
||||
>
|
||||
</script>
|
||||
|
||||
<img src="https://static.scarf.sh/a.png?x-pxid=28b508c3-c51f-4109-9b88-29f3f6e4cf2f" alt="Scarf Tracker"/>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
<!DOCTYPE html>
|
||||
|
||||
<!-- $Id: imapsync_form_extra_free.html,v 1.18 2021/05/30 05:45:00 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">
|
||||
|
||||
@ -161,6 +161,9 @@ It's <b>ok</b> if you <b>don't</b> have a VAT number.<br />
|
||||
<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>
|
||||
@ -289,6 +292,9 @@ It's <b>ok</b> if you <b>don't</b> have a VAT number.<br />
|
||||
<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>
|
||||
@ -332,7 +338,12 @@ It's <b>ok</b> if you <b>don't</b> have a VAT number.<br />
|
||||
<a id="buttons"></a>
|
||||
<hr>
|
||||
|
||||
<!-- Classical button to go to the log only -->
|
||||
<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" >
|
||||
@ -371,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" >
|
||||
|
||||
<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">
|
||||
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>.
|
||||
@ -395,7 +406,7 @@ It's <b>ok</b> if you <b>don't</b> have a VAT number.<br />
|
||||
|
||||
|
||||
</pre>
|
||||
<a id="link_to_bottom" href="#bottom">Bottom of imapsync log</a>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="col-sm-6 well">
|
||||
@ -410,8 +421,10 @@ It's <b>ok</b> if you <b>don't</b> have a VAT number.<br />
|
||||
|
||||
</div>
|
||||
|
||||
<h2 class="text-center scripton">Log of imapsync run</h2>
|
||||
|
||||
<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">
|
||||
|
||||
|
||||
@ -433,6 +446,10 @@ It's <b>ok</b> if you <b>don't</b> have a VAT number.<br />
|
||||
|
||||
</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">
|
||||
@ -449,46 +466,19 @@ It's <b>ok</b> if you <b>don't</b> have a VAT number.<br />
|
||||
<hr>
|
||||
<p class="text-center">
|
||||
Imapsync <b>Online Status</b> over the <b>last 24h</b><br>
|
||||
<img class="img-responsive center-block" alt="Imapsync Online Status" src="https://lstu.fr/imapsync_online_status_24h_1200x70">
|
||||
<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>
|
||||
|
||||
<p class="text-center">
|
||||
Imapsync <b>Online Status</b> over the <b>last week</b><br>
|
||||
<img class="img-responsive center-block" alt="Imapsync Online Status" src="https://lstu.fr/imapsync_online_status_7d">
|
||||
</p>
|
||||
|
||||
<p class="text-center">
|
||||
Imapsync <b>Online Status</b> over the <b>last two months</b><br>
|
||||
<img class="img-responsive center-block" alt="Imapsync Online Status" src="https://lstu.fr/imapsync_online_status_2months_1200x70"><br>
|
||||
</p>
|
||||
|
||||
|
||||
<!--
|
||||
Uncomment the following when the data are available
|
||||
-->
|
||||
<!--
|
||||
|
||||
<p class="text-center">
|
||||
Imapsync <b>Online Status</b> over the <b>last year</b><br>
|
||||
<img class="img-responsive center-block" alt="Imapsync Online Status" src="https://lstu.fr/imapsync_online_status_1year_1200x70"><br>
|
||||
</p>
|
||||
|
||||
<p class="text-center">
|
||||
Imapsync <b>Online Status</b> over the <b>last 10 years</b><br>
|
||||
<img class="img-responsive center-block" alt="Imapsync Online Status" src="https://lstu.fr/imapsync_online_status_10years_1200x70-2"><br>
|
||||
</p>
|
||||
-->
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<div id="local_status_hetrix" class="collapse in">
|
||||
<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/7908dea8f3ff86eabdef6146307afd5f/414322.html">Imapsync Online Status</a>
|
||||
monitor page powered by the <a href="https://hetrixtools.com/uptime-monitor/414322.html">HetrixTools</a> company.
|
||||
<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>
|
||||
@ -511,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="#bottom" title="Bottom of the page" class="btn btn-info active" role="button">Bottom</a>
|
||||
<br>
|
||||
<small> ($Id: imapsync_form_extra_free.html,v 1.18 2021/05/30 05:45:00 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>
|
||||
</div>
|
||||
</div>
|
||||
@ -541,7 +531,6 @@ src="imapsync_form.js"
|
||||
>
|
||||
</script>
|
||||
|
||||
<img src="https://static.scarf.sh/a.png?x-pxid=28b508c3-c51f-4109-9b88-29f3f6e4cf2f" alt="Scarf Tracker"/>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
50
X/imapsync_online_status.html
Normal file
50
X/imapsync_online_status.html
Normal file
@ -0,0 +1,50 @@
|
||||
<!DOCTYPE html>
|
||||
|
||||
<!-- $Id: imapsync_online_status.html,v 1.1 2022/02/18 17:07:03 gilles Exp gilles $ -->
|
||||
|
||||
<html lang="en" id="top">
|
||||
|
||||
<head>
|
||||
<title>Imapsync Online Status</title>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<h2>Imapsync Online Status over the last 24h</h2>
|
||||
<p>
|
||||
<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%20Online;caption=Status%20in%20%25;monitor=https.rrdrt.monitor%20--rrdrt%20imapsync.lamiral.info%2Fcgi-bin%2Fimapsync%20%3B%3B">
|
||||
</p>
|
||||
|
||||
<h2>Imapsync Online Status over the last week</h2>
|
||||
<p>
|
||||
<img id="status_7d" class="img-responsive center-block" alt="Imapsync Online Status over the last week" 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=p604800;year=2021;mon=%205;mday=%209;hour=13;min=15;date_given_by=now;date_means=end;dsname=opstatus;width=1200;hight=70;lower=0;upper=100;rigid=on;Beautiful%20Image%21.x=571;Beautiful%20Image%21.y=67;title=Service%20Status;owner=Imapsync%20Online;caption=Status%20in%20%25;start=1619954142;end=1620558942;width_old=1200;hight_old=70;monitor=https.rrdrt.monitor%20--rrdrt%20imapsync.lamiral.info%2Fcgi-bin%2Fimapsync%20%3B%3B">
|
||||
</p>
|
||||
|
||||
<h2>Imapsync Online Status over the last two months</h2>
|
||||
<p>
|
||||
<img id="status_2m" class="img-responsive center-block" alt="Imapsync Online Status over the last two months" 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=p5270400;year=2021;mon=%205;mday=%209;hour=15;min=47;date_given_by=now;date_means=end;dsname=opstatus;width=1200;hight=70;lower=0;upper=100;rigid=on;Beautiful%20Image%21.x=156;Beautiful%20Image%21.y=83;title=Service%20Status;owner=Imapsync%20Online;caption=Status%20in%20%25;start=1615297666;end=1620568066;width_old=1200;hight_old=70;monitor=https.rrdrt.monitor%20--rrdrt%20imapsync.lamiral.info%2Fcgi-bin%2Fimapsync%20%3B%3B"><br>
|
||||
</p>
|
||||
|
||||
<h2>Imapsync Online Status over the last year</h2>
|
||||
<p>
|
||||
<img id="status_1y" class="img-responsive center-block" alt="Imapsync Online Status" 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=p31622400;year=2021;mon=%205;mday=%209;hour=15;min=50;date_given_by=now;date_means=end;dsname=opstatus;width=1200;hight=70;lower=0;upper=100;rigid=on;Beautiful%20Image%21.x=212;Beautiful%20Image%21.y=59;title=Service%20Status;owner=Imapsync%20Online;caption=Status%20in%20%25;start=1588945852;end=1620568252;width_old=1200;hight_old=70;monitor=https.rrdrt.monitor%20--rrdrt%20imapsync.lamiral.info%2Fcgi-bin%2Fimapsync%20%3B%3B"><br>
|
||||
</p>
|
||||
|
||||
<!--
|
||||
Uncomment the following when the data are available
|
||||
-->
|
||||
|
||||
<!--
|
||||
|
||||
<p class="text-center">
|
||||
Imapsync <b>Online Status</b> over the <b>last 10 years</b><br>
|
||||
<img id="status_10y" class="img-responsive center-block" alt="Imapsync Online Status" src="https://lstu.fr/imapsync_online_status_10years_1200x70-2"><br>
|
||||
</p>
|
||||
-->
|
||||
|
||||
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
||||
@ -1 +1 @@
|
||||
imapsync_form_extra_free.html
|
||||
proximapsync_form_extra_free.html
|
||||
@ -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 $*/
|
||||
|
||||
@ -19,7 +19,7 @@ $(document).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 test = {
|
||||
counter_all : 0 ,
|
||||
@ -51,8 +51,36 @@ $(document).ready(
|
||||
}
|
||||
$("#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"
|
||||
// or "ETA: unknown" or ""
|
||||
@ -77,8 +105,10 @@ $(document).ready(
|
||||
return "ETA: unknown" ;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
function tests_last_eta()
|
||||
var tests_last_eta = function tests_last_eta()
|
||||
{
|
||||
is( "", last_eta( ), "last_eta: no args => empty string" ) ;
|
||||
|
||||
@ -252,7 +282,7 @@ $(document).ready(
|
||||
}
|
||||
else
|
||||
{
|
||||
slice_length = -240 ;
|
||||
slice_length = -2400 ;
|
||||
}
|
||||
slice_log = xhr.responseText.slice( slice_length ) ;
|
||||
eta_str = last_eta( slice_log ) ;
|
||||
@ -278,11 +308,13 @@ $(document).ready(
|
||||
return ;
|
||||
} ;
|
||||
|
||||
function refreshLog( xhr )
|
||||
var refreshLog = function refreshLog( xhr )
|
||||
{
|
||||
var eta_obj ;
|
||||
var eta_str ;
|
||||
|
||||
$( "#imapsync_current" ).load( "imapsync_current.txt" ) ;
|
||||
|
||||
eta_obj = extract_eta( xhr ) ;
|
||||
|
||||
progress_bar_update( eta_obj ) ;
|
||||
@ -290,25 +322,25 @@ $(document).ready(
|
||||
if ( xhr.readyState === 4 )
|
||||
{
|
||||
// end of sync
|
||||
$("#progress-txt").text(
|
||||
$("#progress-txt").text(
|
||||
"Ended. It remains "
|
||||
+ eta_obj.msgs_left + " messages to be synced" ) ;
|
||||
|
||||
$( "#output" ).text( xhr.responseText ) ;
|
||||
}
|
||||
else
|
||||
{
|
||||
eta_str = eta_obj.str + " (refresh every " + refresh_interval_s + " s)" ;
|
||||
eta_str = eta_str.replace(/(\r\n|\n|\r)/gm, "") ; // trim newline
|
||||
//$("#tests").append( "refreshLog eta_str: " + eta_str + "\n" ) ;
|
||||
$("#progress-txt").text( eta_str ) ;
|
||||
|
||||
eta_str = eta_obj.str + " (refresh every " + refresh_interval_s + " s)" ;
|
||||
eta_str = eta_str.replace(/(\r\n|\n|\r)/gm, "") ; // trim newlines
|
||||
//$("#tests").append( "refreshLog eta_str: " + eta_str + "\n" ) ;
|
||||
$( "#progress-txt" ).text( eta_str ) ;
|
||||
var last_lines = last_x_lines( xhr.responseText.slice(-2000), -10)
|
||||
$( "#output" ).text( last_lines ) ;
|
||||
}
|
||||
|
||||
$( "#output" ).text( xhr.responseText ) ;
|
||||
}
|
||||
|
||||
|
||||
|
||||
function handleRun(xhr, timerRefreshLog)
|
||||
var handleRun = function handleRun(xhr, timerRefreshLog)
|
||||
{
|
||||
|
||||
$("#console").text(
|
||||
@ -319,15 +351,17 @@ $(document).ready(
|
||||
// var headers = xhr.getAllResponseHeaders();
|
||||
// $("#console").append(headers);
|
||||
// $("#console").append("See the completed log\n");
|
||||
$("#link_to_bottom").show() ;
|
||||
clearInterval( timerRefreshLog ) ;
|
||||
refreshLog( xhr ) ; // a last time
|
||||
// back to enable state for next run
|
||||
$("#bt-sync").prop("disabled", false) ;
|
||||
|
||||
$( "#imapsync_current" ).load( "imapsync_current.txt" ) ;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
function imapsync()
|
||||
var imapsync = function imapsync()
|
||||
{
|
||||
var querystring = $("#form").serialize() ;
|
||||
$("#abort").text("\n\n") ; // clean abort console
|
||||
@ -351,6 +385,8 @@ $(document).ready(
|
||||
{
|
||||
querystring = querystring + "&office2=on" ;
|
||||
}
|
||||
|
||||
// querystring = querystring + "&tmphash=" + tmphash( ) ;
|
||||
|
||||
|
||||
var xhr ;
|
||||
@ -366,14 +402,14 @@ $(document).ready(
|
||||
handleRun( xhr, timerRefreshLog ) ;
|
||||
} ;
|
||||
|
||||
xhr.open( "POST", "/cgi-bin/imapsync", true ) ;
|
||||
xhr.open( "POST", "/cgi-bin/proximapsync", true ) ;
|
||||
xhr.setRequestHeader( "Content-type",
|
||||
"application/x-www-form-urlencoded" ) ;
|
||||
xhr.send( querystring ) ;
|
||||
}
|
||||
|
||||
|
||||
function handleAbort( xhr )
|
||||
var handleAbort = function handleAbort( xhr )
|
||||
{
|
||||
|
||||
$( "#abort" ).text(
|
||||
@ -388,7 +424,7 @@ $(document).ready(
|
||||
}
|
||||
}
|
||||
|
||||
function abort()
|
||||
var abort = function abort()
|
||||
{
|
||||
var querystring = $("#form").serialize() + "&abort=on";
|
||||
var xhr;
|
||||
@ -397,12 +433,12 @@ $(document).ready(
|
||||
{
|
||||
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.send(querystring);
|
||||
}
|
||||
|
||||
function store( id )
|
||||
var store = function store( id )
|
||||
{
|
||||
var stored ;
|
||||
//$( "#tests" ).append( "Eco: " + id + " type is " + $( id ).attr( "type" ) + "\n" ) ;
|
||||
@ -420,7 +456,7 @@ $(document).ready(
|
||||
return stored ;
|
||||
}
|
||||
|
||||
function retrieve( id )
|
||||
var retrieve = function retrieve( id )
|
||||
{
|
||||
var retrieved ;
|
||||
//$( "#tests" ).append( "Eco: " + id + " type is " + $( id ).attr( "type" ) + " length is " + $( id ).length + "\n" ) ;
|
||||
@ -438,7 +474,7 @@ $(document).ready(
|
||||
return retrieved ;
|
||||
}
|
||||
|
||||
function tests_store_retrieve()
|
||||
var tests_store_retrieve = function tests_store_retrieve()
|
||||
{
|
||||
if ( $("#tests").length !== 0 )
|
||||
{
|
||||
@ -479,7 +515,7 @@ $(document).ready(
|
||||
}
|
||||
|
||||
|
||||
function store_form()
|
||||
var store_form = function store_form()
|
||||
{
|
||||
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 )
|
||||
{
|
||||
@ -518,7 +554,7 @@ $(document).ready(
|
||||
}
|
||||
}
|
||||
|
||||
function retrieve_form()
|
||||
var retrieve_form = function retrieve_form()
|
||||
{
|
||||
if ( Storage !== "undefined" )
|
||||
{
|
||||
@ -555,14 +591,14 @@ $(document).ready(
|
||||
localStorage.account2_background_color ) ;
|
||||
}
|
||||
|
||||
// Show the extra parameters if they are not empty because it would be dangerous
|
||||
// to retrieve them without knowing
|
||||
// Show the extra parameters if they are not empty because it would
|
||||
// be dangerous to retrieve them without showing them
|
||||
show_extra_if_needed() ;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function showpassword( id, button )
|
||||
var showpassword = function showpassword( id, button )
|
||||
{
|
||||
var x = document.getElementById( id );
|
||||
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
|
||||
$("#bt-sync").prop("disabled", false);
|
||||
$("#bt-abort").prop("disabled", false);
|
||||
$("#link_to_bottom").hide();
|
||||
$("#progress-bar-left").css( "width", 100 + "%" ).attr( "aria-valuenow", 100 ) ;
|
||||
|
||||
retrieve_form();
|
||||
|
||||
$("#showpassword1").click(
|
||||
function ( event )
|
||||
{
|
||||
@ -605,9 +698,9 @@ $(document).ready(
|
||||
$("#bt-sync").click(
|
||||
function ()
|
||||
{
|
||||
$( "#imapsync_current" ).load( "imapsync_current.txt" ) ;
|
||||
$("#bt-sync").prop("disabled", true) ;
|
||||
$("#bt-abort").prop("disabled", false) ;
|
||||
$("#link_to_bottom").hide() ;
|
||||
$("#progress-txt").text( "ETA: coming soon" ) ;
|
||||
store_form() ;
|
||||
imapsync() ;
|
||||
@ -617,9 +710,11 @@ $(document).ready(
|
||||
$("#bt-abort").click(
|
||||
function ()
|
||||
{
|
||||
$( "#imapsync_current" ).load( "imapsync_current.txt" ) ;
|
||||
$("#bt-sync").prop("disabled", true);
|
||||
$("#bt-abort").prop("disabled", true);
|
||||
abort();
|
||||
$( "#imapsync_current" ).load( "imapsync_current.txt" ) ;
|
||||
}
|
||||
);
|
||||
|
||||
@ -653,12 +748,29 @@ $(document).ready(
|
||||
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
|
||||
var nb_attended_test = 29 ;
|
||||
// attended number of tests: nb_attended_test
|
||||
|
||||
$("#tests").append( "1.." + test.counter_all + "\n" ) ;
|
||||
if ( test.counter_nok > 0 )
|
||||
{
|
||||
@ -681,22 +793,32 @@ $(document).ready(
|
||||
}
|
||||
} ;
|
||||
|
||||
function tests()
|
||||
var tests = function tests( nb_attended_test )
|
||||
{
|
||||
if ( $("#tests").length !== 0 )
|
||||
{
|
||||
tests_store_retrieve( ) ;
|
||||
tests_last_eta( ) ;
|
||||
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" ) ;
|
||||
tests_bilan( ) ;
|
||||
|
||||
tests_bilan( nb_attended_test ) ;
|
||||
|
||||
// If you want to always see the tests, uncomment the following
|
||||
// line
|
||||
//$("#tests").collapse("show") ;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
init( ) ;
|
||||
tests( ) ;
|
||||
tests( 38 ) ;
|
||||
retrieve_form( ) ;
|
||||
|
||||
}
|
||||
|
||||
476
X/proximapsync_form_extra.html
Normal file
476
X/proximapsync_form_extra.html
Normal 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>
|
||||
536
X/proximapsync_form_extra_free.html
Normal file
536
X/proximapsync_form_extra_free.html
Normal 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>
|
||||
@ -1,57 +1,77 @@
|
||||
<!DOCTYPE html>
|
||||
|
||||
|
||||
<html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<title>Imapsync CSV 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">
|
||||
<link rel="stylesheet" href="../S/style.css" type="text/css" />
|
||||
|
||||
<link rel="license" href="https://imapsync.lamiral.info/NOLIMIT">
|
||||
<!-- -->
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<h1>Imapsync online</h1>
|
||||
<h1>Imapsync CSV online</h1>
|
||||
|
||||
<p>
|
||||
This file is a sandbox to play with, to learn, understand what happens, what can be done etc.<br/>
|
||||
|
||||
<a href="#BOTTOM">Bottom of this page</a>
|
||||
|
||||
This Imapsync CSV online service is a prototype, a working prototype.<br/>
|
||||
</p>
|
||||
|
||||
Some explanations about this service:
|
||||
<ul>
|
||||
<li>The input textarea is multi-lines, each line describe a synchronization from the source account to the destination account.</li>
|
||||
<li>Blank lines are ignored. Blanks lines have only spaces or tabs or nothing but a CR</li>
|
||||
<li>Lines beginning with # are also ignored, use that for commenting.</li>
|
||||
<li>A basic line will sync all messages in all folders from the source account to the destination account.</li>
|
||||
<li>Each line has seven columns, six for the credentials, and one extra to add one or several parameters to the imapsync command.</li>
|
||||
<li>Each line has seven semi-colons characters ";", each one delimiting a column. The last column can be empty.</li>
|
||||
<li>Each line is processed serially, one synchronization at a time.</li>
|
||||
<li>At the end of the log, the lines that failed are listed.</li>
|
||||
<li>The input textarea is prefilled with values, as an example, replace them with yours or remove them.</li>
|
||||
<li></li>
|
||||
<li></li>
|
||||
<li></li>
|
||||
|
||||
</ul>
|
||||
|
||||
|
||||
|
||||
<form id="form" action="/cgi-bin/imapsync_csv_wrapper" method="post" autocomplete="on">
|
||||
|
||||
<textarea name="csv_data" rows="10" cols="120">
|
||||
# This example is a real one, ie, truly working in the real world.
|
||||
test1.lamiral.info;test1;secret1;test2.lamiral.info;test2;secret2;
|
||||
<textarea id="csv_data" name="csv_data" rows="10" cols="120">
|
||||
# This example is a real one, ie, a truly working in the real world.
|
||||
test1.lamiral.info;test1;secret1;test2.lamiral.info;test2;secret2;;
|
||||
|
||||
# The reverse
|
||||
test2.lamiral.info;test2;secret2;test1.lamiral.info;test1;secret1;
|
||||
# The first again but this time with an authentication failure
|
||||
test1.lamiral.info;test1;secret1;test2.lamiral.info;test2;wrong_secret;;
|
||||
|
||||
# The first again but with authentication failure
|
||||
test1.lamiral.info;test1;secret1;test2.lamiral.info;test2;wrong;
|
||||
# The first again but this time with extra parameters
|
||||
test1.lamiral.info;test1;secret1;test2.lamiral.info;test2;secret2;--justfoldersizes --dry --minage 55 ;
|
||||
|
||||
</textarea>
|
||||
<br/>
|
||||
|
||||
|
||||
</form>
|
||||
|
||||
<button type="button"
|
||||
onclick="imapsync( handleRun )"
|
||||
>Run imapsync on all csv data
|
||||
<p>
|
||||
<button id="bt-sync" type="button">
|
||||
Run imapsync on all csv data!
|
||||
</button>
|
||||
|
||||
|
||||
|
||||
<button type="button"
|
||||
onclick="abort( )"
|
||||
>Abort imapsync
|
||||
<button id="bt-abort" type="button">
|
||||
Abort the run!
|
||||
</button>
|
||||
</p>
|
||||
|
||||
|
||||
<p>
|
||||
<a href="#BOTTOM">Link to the bottom of this page (end of the log)</a>
|
||||
</p>
|
||||
|
||||
|
||||
<h2>Console of imapsync runs</h2>
|
||||
|
||||
@ -63,13 +83,11 @@ test1.lamiral.info;test1;secret1;test2.lamiral.info;test2;wrong;
|
||||
<pre id="abort">
|
||||
</pre>
|
||||
|
||||
<h2>Log of imapsync runs</h2>
|
||||
<h2>Log of all imapsync runs</h2>
|
||||
|
||||
<pre id="output" >
|
||||
</pre>
|
||||
|
||||
|
||||
|
||||
<h2>Links</h2>
|
||||
|
||||
<div id="BOTTOM">
|
||||
@ -78,89 +96,11 @@ test1.lamiral.info;test1;secret1;test2.lamiral.info;test2;wrong;
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
|
||||
|
||||
<script>
|
||||
|
||||
|
||||
|
||||
var readyStateStr = {
|
||||
0: "Request not initialized",
|
||||
1: "Server connection established",
|
||||
2: "Response headers received",
|
||||
3: "Processing request",
|
||||
4: "Finished and response is ready"
|
||||
} ;
|
||||
|
||||
function imapsync( cFunction ) {
|
||||
var xhr ;
|
||||
xhr = new XMLHttpRequest( ) ;
|
||||
var timerRefreshLog = setInterval( function() { refreshLog( xhr ) }, 3000 ) ;
|
||||
xhr.onreadystatechange = function( ) {
|
||||
cFunction( this, timerRefreshLog ) ;
|
||||
} ;
|
||||
|
||||
var form_querystring = $("#form").serialize() ;
|
||||
|
||||
$("#form_querystring").text( form_querystring ) ;
|
||||
|
||||
|
||||
xhr.open( "POST", "/cgi-bin/imapsync_csv_wrapper", true ) ;
|
||||
xhr.setRequestHeader( "Content-type",
|
||||
"application/x-www-form-urlencoded" ) ;
|
||||
xhr.send( form_querystring ) ;
|
||||
|
||||
$("#output").text("Here comes the log!\n\n") ;
|
||||
xhr.send( ) ;
|
||||
}
|
||||
|
||||
function handleRun( xhr, timerRefreshLog ) {
|
||||
|
||||
$( "#console" ).text( "Status: " + xhr.status + " " + xhr.statusText + ".\n"
|
||||
+ "State: " + readyStateStr[ xhr.readyState ] + "\n" ) ;
|
||||
|
||||
if ( xhr.status == 200 && xhr.readyState == 4 ) {
|
||||
var headers = xhr.getAllResponseHeaders( ) ;
|
||||
|
||||
clearInterval( timerRefreshLog ) ;
|
||||
refreshLog( xhr ) ; // a last time
|
||||
}
|
||||
}
|
||||
|
||||
function refreshLog( xhr ) {
|
||||
$( "#output" ).text( xhr.responseText ) ;
|
||||
}
|
||||
|
||||
|
||||
function abort()
|
||||
{
|
||||
var querystring = $("#form").serialize() + "&abort=on";
|
||||
var xhr;
|
||||
xhr = new XMLHttpRequest();
|
||||
xhr.onreadystatechange = function ()
|
||||
{
|
||||
handleAbort(xhr);
|
||||
};
|
||||
xhr.open("POST", "/cgi-bin/imapsync_csv_wrapper", true);
|
||||
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
|
||||
xhr.send(querystring);
|
||||
}
|
||||
|
||||
|
||||
function handleAbort( xhr ) {
|
||||
|
||||
$( "#abort" ).text( "Status: " + xhr.status + " " + xhr.statusText + ".\n"
|
||||
+ "State: " + readyStateStr[ xhr.readyState ] + "\n" ) ;
|
||||
|
||||
if ( xhr.status == 200 && xhr.readyState == 4 ) {
|
||||
var headers = xhr.getAllResponseHeaders( ) ;
|
||||
// $( "#abort" ).append( "\n" + headers + "\n" ) ;
|
||||
$( "#abort" ).append( xhr.responseText ) ;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js">
|
||||
</script>
|
||||
|
||||
<script src="sandbox_csv.js">
|
||||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
112
X/sandbox_csv.js
Executable file
112
X/sandbox_csv.js
Executable file
@ -0,0 +1,112 @@
|
||||
|
||||
$(document).ready(
|
||||
function ()
|
||||
{
|
||||
|
||||
var readyStateStr = {
|
||||
0: "Request not initialized",
|
||||
1: "Server connection established",
|
||||
2: "Response headers received",
|
||||
3: "Processing request",
|
||||
4: "Finished and response is ready"
|
||||
} ;
|
||||
|
||||
function imapsync( cFunction ) {
|
||||
var xhr ;
|
||||
xhr = new XMLHttpRequest( ) ;
|
||||
var timerRefreshLog = setInterval( function() { refreshLog( xhr ) }, 6000 ) ;
|
||||
xhr.onreadystatechange = function( ) {
|
||||
cFunction( this, timerRefreshLog ) ;
|
||||
} ;
|
||||
|
||||
var form_querystring = $("#form").serialize() ;
|
||||
|
||||
$("#form_querystring").text( form_querystring ) ;
|
||||
|
||||
|
||||
xhr.open( "POST", "/cgi-bin/imapsync_csv_wrapper", true ) ;
|
||||
xhr.setRequestHeader( "Content-type",
|
||||
"application/x-www-form-urlencoded" ) ;
|
||||
xhr.send( form_querystring ) ;
|
||||
|
||||
$("#output").text("Here comes the log!\n\n") ;
|
||||
}
|
||||
|
||||
function handleRun( xhr, timerRefreshLog ) {
|
||||
|
||||
$( "#console" ).text( "Status: " + xhr.status + " " + xhr.statusText + ".\n"
|
||||
+ "State: " + readyStateStr[ xhr.readyState ] + "\n" ) ;
|
||||
|
||||
if ( xhr.status == 200 && xhr.readyState == 4 ) {
|
||||
var headers = xhr.getAllResponseHeaders( ) ;
|
||||
|
||||
clearInterval( timerRefreshLog ) ;
|
||||
refreshLog( xhr ) ; // a last time
|
||||
$("#bt-sync").prop("disabled", false) ;
|
||||
$("#csv_data").prop('readonly', false);
|
||||
}
|
||||
}
|
||||
|
||||
function refreshLog( xhr ) {
|
||||
$( "#output" ).text( xhr.responseText ) ;
|
||||
}
|
||||
|
||||
|
||||
function abort()
|
||||
{
|
||||
var querystring = $("#form").serialize() + "&abort=on";
|
||||
var xhr;
|
||||
xhr = new XMLHttpRequest();
|
||||
xhr.onreadystatechange = function ()
|
||||
{
|
||||
handleAbort(xhr);
|
||||
};
|
||||
xhr.open("POST", "/cgi-bin/imapsync_csv_wrapper", true);
|
||||
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
|
||||
xhr.send(querystring);
|
||||
}
|
||||
|
||||
|
||||
function handleAbort( xhr ) {
|
||||
|
||||
$( "#abort" ).text( "Status: " + xhr.status + " " + xhr.statusText + ".\n"
|
||||
+ "State: " + readyStateStr[ xhr.readyState ] + "\n" ) ;
|
||||
|
||||
if ( xhr.status == 200 && xhr.readyState == 4 ) {
|
||||
var headers = xhr.getAllResponseHeaders( ) ;
|
||||
// $( "#abort" ).append( "\n" + headers + "\n" ) ;
|
||||
$( "#abort" ).append( xhr.responseText ) ;
|
||||
$("#csv_data").prop('readonly', false);
|
||||
$( "#bt-sync" ).prop("disabled", false);
|
||||
$( "#bt-abort" ).prop("disabled", false);
|
||||
}
|
||||
}
|
||||
|
||||
$("#bt-sync").click(
|
||||
function ()
|
||||
{
|
||||
$("#bt-sync").prop("disabled", true) ;
|
||||
$("#csv_data").prop('readonly', true);
|
||||
$("#bt-abort").prop("disabled", false) ;
|
||||
$("#abort").text("") ;
|
||||
imapsync( handleRun ) ;
|
||||
}
|
||||
);
|
||||
|
||||
$("#bt-abort").click(
|
||||
function ()
|
||||
{
|
||||
$("#bt-sync").prop("disabled", true);
|
||||
$("#csv_data").prop('readonly', true);
|
||||
$("#bt-abort").prop("disabled", true);
|
||||
abort();
|
||||
}
|
||||
);
|
||||
|
||||
// in case of a manual refresh, start with
|
||||
$("#csv_data").prop('readonly', false);
|
||||
$("#bt-sync").prop("disabled", false);
|
||||
$("#bt-abort").prop("disabled", false);
|
||||
|
||||
}
|
||||
) ;
|
||||
@ -1,6 +1,5 @@
|
||||
^Here is imapsync
|
||||
^Load end is
|
||||
^Load is
|
||||
^Load .*is
|
||||
^Server is on heavy load
|
||||
^Temp directory is
|
||||
^Current directory is
|
||||
@ -36,6 +35,7 @@
|
||||
^Message rate
|
||||
^Average bandwidth rate
|
||||
^Biggest message transferred
|
||||
^Biggest message:
|
||||
^Detected.*errors
|
||||
^Ended by a signal
|
||||
^Exiting with return value
|
||||
|
||||
@ -17,6 +17,7 @@ small { font-size: 8px; color: #cbcbcb; }
|
||||
<body bgcolor="#ffffff">
|
||||
|
||||
<img src="vnstat_s.png" border="0" alt="summary"><br>
|
||||
<img src="vnstat_5g.png" border="0" alt="5 minutes graphic"><br>
|
||||
<img src="vnstat_5.png" border="0" alt="5 minutes"><br>
|
||||
<img src="vnstat_h.png" border="0" alt="hourly"><br>
|
||||
<img src="vnstat_d.png" border="0" alt="daily"><br>
|
||||
|
||||
@ -7,7 +7,7 @@
|
||||
<CENTER>
|
||||
<H1>Imapsync tutorial</H1>
|
||||
<FONT SIZE="4"><I>Gilles LAMIRAL gilles@lamiral.info</I></FONT><BR>
|
||||
<FONT SIZE="4">$Id: TUTORIAL_Unix.t2t,v 1.26 2019/02/10 12:33:17 gilles Exp gilles $ </FONT>
|
||||
<FONT SIZE="4">$Id: TUTORIAL_Unix.t2t,v 1.27 2022/01/14 12:42:51 gilles Exp gilles $ </FONT>
|
||||
</CENTER>
|
||||
|
||||
<P></P>
|
||||
@ -18,14 +18,14 @@
|
||||
<LI><A HREF="#toc1">1. Good practices overview</A>
|
||||
<LI><A HREF="#toc2">2. Basic steps</A>
|
||||
<UL>
|
||||
<LI><A HREF="#toc3">2.1. Verifying imapsync works well on its own</A>
|
||||
<LI><A HREF="#toc3">2.1. Verifying imapsync works well</A>
|
||||
<LI><A HREF="#toc4">2.2. Working with your data</A>
|
||||
<LI><A HREF="#toc5">2.3. Prepare your credentials</A>
|
||||
<LI><A HREF="#toc6">2.4. Take a real user account as source</A>
|
||||
<LI><A HREF="#toc7">2.5. Take a test user account as destination</A>
|
||||
<LI><A HREF="#toc6">2.4. Take a real user account as a source</A>
|
||||
<LI><A HREF="#toc7">2.5. Take a test user account as a destination</A>
|
||||
<LI><A HREF="#toc8">2.6. Edit your own script mysync</A>
|
||||
</UL>
|
||||
<LI><A HREF="#toc9">3. Background knowledge about emailboxes</A>
|
||||
<LI><A HREF="#toc9">3. Background knowledge about mailboxes</A>
|
||||
<LI><A HREF="#toc10">4. Imapsync presentation</A>
|
||||
<LI><A HREF="#toc11">5. Conventions</A>
|
||||
<LI><A HREF="#toc12">6. Why start with a test account on destination host2?</A>
|
||||
@ -53,24 +53,24 @@ without much pain. So try imapsync with a real account at the source, aka host1,
|
||||
and a test account at the destination, aka host2.
|
||||
<P></P>
|
||||
<LI>Next, once familiar and satisfied by the result on the host2 test account,
|
||||
change to a real user account on host2 or just stop consider it a test one.
|
||||
change to a real user account on host2 or just stop considering it a test one.
|
||||
</UL>
|
||||
|
||||
<A NAME="toc2"></A>
|
||||
<H1>2. Basic steps</H1>
|
||||
|
||||
<A NAME="toc3"></A>
|
||||
<H2>2.1. Verifying imapsync works well on its own</H2>
|
||||
<H2>2.1. Verifying imapsync works well</H2>
|
||||
|
||||
<P>
|
||||
Open a terminal and go to the imapsync directory.
|
||||
The imapsync directory is the directory created by extraction
|
||||
of the tarball (.tgz), its name is <CODE>imapsync-1.xxx</CODE> where <CODE>1.xxx</CODE>
|
||||
is imapsync release number (1.882 at the time of this writing).
|
||||
The imapsync directory is the directory created by the extraction
|
||||
of the tarball (.tgz), its name is <CODE>imapsync-2.xxx</CODE> where <CODE>2.xxx</CODE>
|
||||
is imapsync release number (2.178 at the time of this proofread).
|
||||
</P>
|
||||
|
||||
<PRE>
|
||||
cd imapsync-1.xxx/
|
||||
cd imapsync-2.xxx/
|
||||
</PRE>
|
||||
|
||||
<P>
|
||||
@ -86,14 +86,14 @@ It should output the help message.
|
||||
</P>
|
||||
<P>
|
||||
If the previous command fails then there is an installation issue.
|
||||
Go back to <A HREF="https://imapsync.lamiral.info/#install">https://imapsync.lamiral.info/#install</A> then
|
||||
and read and apply the installation file corresponding to your
|
||||
Go back to the <A HREF="https://imapsync.lamiral.info/#install">https://imapsync.lamiral.info/#install</A> section, then
|
||||
read and apply the installation file corresponding to your
|
||||
system and drop me an email about your issue.
|
||||
</P>
|
||||
<P>
|
||||
Next, verify imapsync runs live tests. This check needs an Internet
|
||||
Next, verify imapsync runs well with live tests. This check needs Internet
|
||||
access. It does a simple sync between two real dedicated
|
||||
imap maiboxes located at the host test.lamiral.info
|
||||
imap mailboxes located at the host test.lamiral.info
|
||||
</P>
|
||||
|
||||
<PRE>
|
||||
@ -109,7 +109,7 @@ Now verify that the script examples/imapsync_example.sh runs fine:
|
||||
</PRE>
|
||||
|
||||
<P>
|
||||
This script does the same thing than "<CODE>imapsync --testslive</CODE>" but it
|
||||
This script does the same thing as "<CODE>imapsync --testslive</CODE>" but it
|
||||
uses explicitly the 6 parameters so it will be a good start
|
||||
for your future own script.
|
||||
</P>
|
||||
@ -148,28 +148,28 @@ An IMAP account is accessed with 3 parameters,
|
||||
</P>
|
||||
|
||||
<UL>
|
||||
<LI>the imap server <B>host</B>. It's a server name or an ip address
|
||||
<LI>the imap server <B>host</B>. It's a server name or an IP address
|
||||
<LI>the <B>user</B> name
|
||||
<LI>the <B>password</B>
|
||||
</UL>
|
||||
|
||||
<P>
|
||||
Since imapsync job is to sync two imap accounts we need 3 + 3 = 6 parameters:
|
||||
Since imapsync job is to sync two imap accounts, we need 3 + 3 = 6 parameters:
|
||||
</P>
|
||||
|
||||
<UL>
|
||||
<LI>Three parameters in order to read data from the source account: <B>host1</B>, <B>user1</B> and <B>password1</B>
|
||||
<LI>Three parameters in order to copy this data to the destination account: <B>host2</B>, <B>user2</B> and <B>password2</B>
|
||||
<LI>Three parameters to read data from the source account: <B>host1</B>, <B>user1</B> and <B>password1</B>
|
||||
<LI>Three parameters to copy this data to the destination account: <B>host2</B>, <B>user2</B> and <B>password2</B>
|
||||
</UL>
|
||||
|
||||
<A NAME="toc6"></A>
|
||||
<H2>2.4. Take a real user account as source</H2>
|
||||
<H2>2.4. Take a real user account as a source</H2>
|
||||
|
||||
<P>
|
||||
Even during the learning time with imapsync, you can take a
|
||||
real user account as a source. There is also no problem if this account is
|
||||
currently used by a user. By default, this account will only be read, no change will
|
||||
be made by imapsync on it.
|
||||
be made by imapsync on it. It's safe to use a normal and live account as a source, even to learn imapsync.
|
||||
</P>
|
||||
<P>
|
||||
Assuming that the imap source server name host1 is <B>origin.example.com</B>,
|
||||
@ -184,13 +184,13 @@ we now have the first three parameters.
|
||||
</UL>
|
||||
|
||||
<A NAME="toc7"></A>
|
||||
<H2>2.5. Take a test user account as destination</H2>
|
||||
<H2>2.5. Take a test user account as a destination</H2>
|
||||
|
||||
<P>
|
||||
Unlike the source side, the destination side will be modified by
|
||||
imapsync. Therefore, for learning, checking and adjusting,
|
||||
it is not a very good idea to use a real user imap account
|
||||
the first times you play with imapsync.
|
||||
imapsync. Therefore, for learning, checking, and adjusting,
|
||||
it is not a good idea to use a real user imap account
|
||||
the first time you play with imapsync.
|
||||
</P>
|
||||
<P>
|
||||
If you really can't afford a test account on host2, it's ok,
|
||||
@ -213,7 +213,7 @@ we now have the next three parameters.
|
||||
<H2>2.6. Edit your own script mysync</H2>
|
||||
|
||||
<P>
|
||||
Now edit the script <CODE>mysync</CODE> and replace the test values by yours.
|
||||
Now edit the script <CODE>mysync</CODE> and replace the test values with yours.
|
||||
</P>
|
||||
<P>
|
||||
You're ready for a dry test on your accounts.
|
||||
@ -227,22 +227,21 @@ You're ready for a dry test on your accounts.
|
||||
Since the <CODE>mysync</CODE> script is a copy of <CODE>examples/imapsync_example.sh</CODE>,
|
||||
your first run with your data should include three other options
|
||||
<CODE>--automap</CODE> <CODE>--justfolders</CODE> <CODE>--dry</CODE>.
|
||||
With <CODE>--dry</CODE> option, nothing will really be done on host2
|
||||
With <CODE>--dry</CODE> option, nothing will be done for real on host2
|
||||
but yet it will test whether the credentials are ok on both sides.
|
||||
You'll encounter two successful logins, or one failure on host1,
|
||||
or a successful login on host1 but a failure on host2.
|
||||
If the login are ok, you will also observe if the folders mapping is ok.
|
||||
You'll encounter two successful logins, or one login failure on host1 or host2, or two failures on host1 and host2.
|
||||
If the logins are ok, you will be able to observe that the folders mapping is ok.
|
||||
</P>
|
||||
<P>
|
||||
If a login fails then double-check all three values that identify
|
||||
If login fails then double-check all three values that identify
|
||||
the account, which are the host, the login name, and the password.
|
||||
</P>
|
||||
<P>
|
||||
If the folders mapping proposed is not ok then you can fix it with
|
||||
option <CODE>--f1f2</CODE>. The following example maps the source folder
|
||||
the option <CODE>--f1f2</CODE>. The following example maps the source folder
|
||||
"Sent Messages" to the destination folder "Sent". The double-quotes
|
||||
are not part of the folders names but they should be used when special
|
||||
characters like blanks are in the folders names:
|
||||
are not part of the names of the folders but they should be used when special
|
||||
characters like blanks are in the names of the folders:
|
||||
</P>
|
||||
|
||||
<PRE>
|
||||
@ -250,7 +249,7 @@ characters like blanks are in the folders names:
|
||||
</PRE>
|
||||
|
||||
<P>
|
||||
As explained in the inline help or in the README:
|
||||
As explained in the inline help or the README:
|
||||
</P>
|
||||
|
||||
<PRE>
|
||||
@ -267,7 +266,7 @@ folders. Remove <CODE>--dry</CODE> from the <CODE>mysync</CODE> script and rerun
|
||||
</PRE>
|
||||
|
||||
<A NAME="toc9"></A>
|
||||
<H1>3. Background knowledge about emailboxes</H1>
|
||||
<H1>3. Background knowledge about mailboxes</H1>
|
||||
|
||||
<P>
|
||||
Three Internet protocols are used to access almost all email accounts:
|
||||
@ -289,7 +288,7 @@ they are unavailable from any other system located elsewhere.
|
||||
<P>
|
||||
The second protocol to deal with email messages is IMAP, Internet Message Access Protocol.
|
||||
IMAP gives access to a hierarchy of mailboxes also called folders. Other IMAP features are
|
||||
concurrent accesses, tagging with flags, search by many criterium like date, subject, size etc.
|
||||
concurrent accesses, tagging with flags, search by many criteriums like date, subject, size, etc.
|
||||
</P>
|
||||
<P>
|
||||
The IMAP protocol presents most of the features POP lacks.
|
||||
@ -304,11 +303,11 @@ HTTP is the protocol to browse the web.
|
||||
Web browsers like Google Chrome, Mozilla Firefox, Internet Explorer and Safari
|
||||
are HTTP client software tools. You already know that so what's the point with HTTP mailboxes?
|
||||
HTTP mailboxes are called webmails.
|
||||
Webmails often offer the same features than imap servers
|
||||
Webmails often offer the same features as imap servers
|
||||
because webmails underlying storage systems are often imap servers.
|
||||
</P>
|
||||
<P>
|
||||
Webmails systems like Gmail, Yahoo, Exchange, Zimbra or Office365 are also accessible via imap.
|
||||
Webmails systems like Gmail, Yahoo, Exchange, Zimbra, or Office365 are also accessible via imap.
|
||||
</P>
|
||||
<P>
|
||||
The conclusion of this protocol review is that mailboxes can be
|
||||
@ -318,19 +317,19 @@ Here comes imapsync.
|
||||
<P>
|
||||
In case the source mailbox is only accessible by the POP protocol,
|
||||
you can use the tool <CODE>pop2imap</CODE> to sync them.
|
||||
<CODE>pop2imap</CODE> is located at <A HREF="http://www.linux-france.org/prj/pop2imap/">http://www.linux-france.org/prj/pop2imap/</A>
|
||||
<CODE>pop2imap</CODE> is located at <A HREF="https://pop2imap.lamiral.info/">https://pop2imap.lamiral.info/</A>
|
||||
</P>
|
||||
|
||||
<A NAME="toc10"></A>
|
||||
<H1>4. Imapsync presentation</H1>
|
||||
|
||||
<P>
|
||||
Software imapsync is a command line tool to
|
||||
copy, migrate, backup or synchronize IMAP mailboxes.
|
||||
Software imapsync is a command-line tool to
|
||||
copy, migrate, backup, or synchronize IMAP mailboxes.
|
||||
</P>
|
||||
<P>
|
||||
Command line means imapsync is not graphical, it is textual.
|
||||
Usually with command line tools you have to type characters
|
||||
Usually, with command-line tools, you have to type characters
|
||||
on your keyboard. But your fingers won't suffer much pain
|
||||
typing on the keyboard because script examples are given,
|
||||
nearly ready to run. Most of the time you only have to change
|
||||
@ -343,25 +342,25 @@ select/copy/paste complete examples,
|
||||
and run the little script with a double-click.
|
||||
</P>
|
||||
<P>
|
||||
Imapsync runs on Linux, Windows and OS X (Macintosh world).
|
||||
Imapsync runs on Linux, Windows, and OS X (Macintosh/Darwin world).
|
||||
Imapsync is written in the Perl language and, thanks to the
|
||||
Perl developers, Perl runs mostly everywhere. So does imapsync.
|
||||
</P>
|
||||
<P>
|
||||
While operating systems have a lot in common, they sometimes differ,
|
||||
especially within their syntax. I won't blame anyone, historically Windows
|
||||
came after Unix. The marvelous designers in this old times
|
||||
decided it would be very cool to not share exactly the same syntax
|
||||
came after Unix. The marvelous designers in these old times
|
||||
decided it would be very cool to not share the same syntax
|
||||
for doing the same things.
|
||||
</P>
|
||||
<P>
|
||||
To designate an end of line, Unix uses the character \n
|
||||
To designate an end of the line, Unix uses the character \n
|
||||
Windows uses two characters \r\n and Mac use \r.
|
||||
Thanks guys, great great thinking!
|
||||
Thanks to you guys, great thinking!
|
||||
Fifty years later, we still suffer from this...daily.
|
||||
</P>
|
||||
<P>
|
||||
To avoid you some headaches with systems no one masters
|
||||
To avoid some headaches with systems that no one masters
|
||||
I will give examples in both worlds, Unix and Windows.
|
||||
OS X users are in the Unix world nowadays so they must follow
|
||||
the Unix examples.
|
||||
@ -371,7 +370,7 @@ the Unix examples.
|
||||
<H1>5. Conventions</H1>
|
||||
|
||||
<P>
|
||||
In order to simplify display or print,
|
||||
To simplify display or print,
|
||||
each imapsync command line is usually written in several lines
|
||||
but it could be written in one single line.
|
||||
</P>
|
||||
@ -379,11 +378,11 @@ but it could be written in one single line.
|
||||
If you prefer to use the whole command written in one single line then
|
||||
just remove the last visible character of each line ( \ or ^ ) and
|
||||
also the carriage return character.
|
||||
The last visible character means "command continues on next line";
|
||||
it is the backslash \ character on Unix and the caret ^ character on Windows.
|
||||
The last visible character \ or ^ means "command continues on next line";
|
||||
it's the backslash \ character on Unix and the caret ^ character on Windows.
|
||||
</P>
|
||||
<P>
|
||||
For example, on Unix, a command like the following
|
||||
For example, on Unix, a command like the following:
|
||||
</P>
|
||||
|
||||
<PRE>
|
||||
@ -395,7 +394,7 @@ For example, on Unix, a command like the following
|
||||
</PRE>
|
||||
|
||||
<P>
|
||||
is equivalent to
|
||||
is equivalent to:
|
||||
</P>
|
||||
|
||||
<PRE>
|
||||
@ -403,7 +402,7 @@ is equivalent to
|
||||
</PRE>
|
||||
|
||||
<P>
|
||||
and on Windows
|
||||
and on Windows, a command like the following:
|
||||
</P>
|
||||
|
||||
<PRE>
|
||||
@ -415,7 +414,7 @@ and on Windows
|
||||
</PRE>
|
||||
|
||||
<P>
|
||||
is equivalent to
|
||||
is equivalent to:
|
||||
</P>
|
||||
|
||||
<PRE>
|
||||
@ -435,16 +434,16 @@ messages that couldn't be transferred stay on host1.
|
||||
</P>
|
||||
<P>
|
||||
It's not the same for destination accounts as imapsync writes on host2 accounts.
|
||||
Imapsync creates folders on them, add messages, set flags on messages.
|
||||
It isn't a safe behavior on a real account. So don't use a real user account
|
||||
Imapsync creates folders on them, adds messages, and sets flags on messages.
|
||||
It isn't safe on a real account. So don't use a real user account
|
||||
to test imapsync. Learn to use it and see what it does on a test account at host2.
|
||||
</P>
|
||||
<P>
|
||||
What can badly happen? The most common bad behavior is
|
||||
the folders mapping won't be what you expect because it is strictly
|
||||
reproduced from host1 to host2. The second bad behavior is
|
||||
duplicates on second run and after, it's rare but it can happen
|
||||
when a imap server software changes headers "<CODE>Message-Id</CODE>" or "<CODE>Received</CODE>".
|
||||
that folders mapping won't be what you expect because it is strictly
|
||||
reproduced from host1 to host2. The second bad behavior is getting
|
||||
duplicates on the second run and after; it's rare but it can happen
|
||||
when an imap server software changes the headers "<CODE>Message-Id</CODE>" or "<CODE>Received</CODE>".
|
||||
Solutions to avoid duplicates are often easy (There's a FAQ called <CODE>FAQ.Duplicates.txt</CODE> about that).
|
||||
It's also possible to remove the duplicates on host2 but it's better to avoid them on user accounts at first,
|
||||
users won't like that you mess up their mailboxes.
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
Imapsync tutorial
|
||||
Gilles LAMIRAL gilles@lamiral.info
|
||||
$Id: TUTORIAL_Unix.t2t,v 1.26 2019/02/10 12:33:17 gilles Exp gilles $
|
||||
$Id: TUTORIAL_Unix.t2t,v 1.27 2022/01/14 12:42:51 gilles Exp gilles $
|
||||
|
||||
+ Good practices overview +
|
||||
|
||||
@ -16,20 +16,20 @@ without much pain. So try imapsync with a real account at the source, aka host1,
|
||||
and a test account at the destination, aka host2.
|
||||
|
||||
- Next, once familiar and satisfied by the result on the host2 test account,
|
||||
change to a real user account on host2 or just stop consider it a test one.
|
||||
change to a real user account on host2 or just stop considering it a test one.
|
||||
|
||||
|
||||
+ Basic steps +
|
||||
|
||||
++ Verifying imapsync works well on its own ++
|
||||
++ Verifying imapsync works well ++
|
||||
|
||||
Open a terminal and go to the imapsync directory.
|
||||
The imapsync directory is the directory created by extraction
|
||||
of the tarball (.tgz), its name is ``imapsync-1.xxx`` where ``1.xxx``
|
||||
is imapsync release number (1.882 at the time of this writing).
|
||||
The imapsync directory is the directory created by the extraction
|
||||
of the tarball (.tgz), its name is ``imapsync-2.xxx`` where ``2.xxx``
|
||||
is imapsync release number (2.178 at the time of this proofread).
|
||||
|
||||
```
|
||||
cd imapsync-1.xxx/
|
||||
cd imapsync-2.xxx/
|
||||
```
|
||||
|
||||
Verify imapsync runs on your system
|
||||
@ -39,13 +39,13 @@ Verify imapsync runs on your system
|
||||
It should output the help message.
|
||||
|
||||
If the previous command fails then there is an installation issue.
|
||||
Go back to https://imapsync.lamiral.info/#install then
|
||||
and read and apply the installation file corresponding to your
|
||||
Go back to the https://imapsync.lamiral.info/#install section, then
|
||||
read and apply the installation file corresponding to your
|
||||
system and drop me an email about your issue.
|
||||
|
||||
Next, verify imapsync runs live tests. This check needs an Internet
|
||||
Next, verify imapsync runs well with live tests. This check needs Internet
|
||||
access. It does a simple sync between two real dedicated
|
||||
imap maiboxes located at the host test.lamiral.info
|
||||
imap mailboxes located at the host test.lamiral.info
|
||||
```
|
||||
./imapsync --testslive
|
||||
```
|
||||
@ -54,7 +54,7 @@ Now verify that the script examples/imapsync_example.sh runs fine:
|
||||
```
|
||||
sh examples/imapsync_example.sh
|
||||
```
|
||||
This script does the same thing than "``imapsync --testslive``" but it
|
||||
This script does the same thing as "``imapsync --testslive``" but it
|
||||
uses explicitly the 6 parameters so it will be a good start
|
||||
for your future own script.
|
||||
|
||||
@ -76,22 +76,22 @@ So far so good, now we're going to work with your data.
|
||||
++ Prepare your credentials ++
|
||||
|
||||
An IMAP account is accessed with 3 parameters,
|
||||
- the imap server **host**. It's a server name or an ip address
|
||||
- the imap server **host**. It's a server name or an IP address
|
||||
- the **user** name
|
||||
- the **password**
|
||||
|
||||
|
||||
Since imapsync job is to sync two imap accounts we need 3 + 3 = 6 parameters:
|
||||
- Three parameters in order to read data from the source account: **host1**, **user1** and **password1**
|
||||
- Three parameters in order to copy this data to the destination account: **host2**, **user2** and **password2**
|
||||
Since imapsync job is to sync two imap accounts, we need 3 + 3 = 6 parameters:
|
||||
- Three parameters to read data from the source account: **host1**, **user1** and **password1**
|
||||
- Three parameters to copy this data to the destination account: **host2**, **user2** and **password2**
|
||||
|
||||
|
||||
++ Take a real user account as source ++
|
||||
++ Take a real user account as a source ++
|
||||
|
||||
Even during the learning time with imapsync, you can take a
|
||||
real user account as a source. There is also no problem if this account is
|
||||
currently used by a user. By default, this account will only be read, no change will
|
||||
be made by imapsync on it.
|
||||
be made by imapsync on it. It's safe to use a normal and live account as a source, even to learn imapsync.
|
||||
|
||||
Assuming that the imap source server name host1 is **origin.example.com**,
|
||||
the user1 account name is **myuser1** and its password is **mysecret1**,
|
||||
@ -102,12 +102,12 @@ we now have the first three parameters.
|
||||
- --password1 **mysecret1**
|
||||
|
||||
|
||||
++ Take a test user account as destination ++
|
||||
++ Take a test user account as a destination ++
|
||||
|
||||
Unlike the source side, the destination side will be modified by
|
||||
imapsync. Therefore, for learning, checking and adjusting,
|
||||
it is not a very good idea to use a real user imap account
|
||||
the first times you play with imapsync.
|
||||
imapsync. Therefore, for learning, checking, and adjusting,
|
||||
it is not a good idea to use a real user imap account
|
||||
the first time you play with imapsync.
|
||||
|
||||
If you really can't afford a test account on host2, it's ok,
|
||||
imapsync is not that bad but you may have some work to do to fix some unwanted behavior.
|
||||
@ -124,7 +124,7 @@ we now have the next three parameters.
|
||||
|
||||
++ Edit your own script mysync ++
|
||||
|
||||
Now edit the script ``mysync`` and replace the test values by yours.
|
||||
Now edit the script ``mysync`` and replace the test values with yours.
|
||||
|
||||
You're ready for a dry test on your accounts.
|
||||
|
||||
@ -135,27 +135,26 @@ sh mysync
|
||||
Since the ``mysync`` script is a copy of ``examples/imapsync_example.sh``,
|
||||
your first run with your data should include three other options
|
||||
``--automap`` ``--justfolders`` ``--dry``.
|
||||
With ``--dry`` option, nothing will really be done on host2
|
||||
With ``--dry`` option, nothing will be done for real on host2
|
||||
but yet it will test whether the credentials are ok on both sides.
|
||||
You'll encounter two successful logins, or one failure on host1,
|
||||
or a successful login on host1 but a failure on host2.
|
||||
If the login are ok, you will also observe if the folders mapping is ok.
|
||||
You'll encounter two successful logins, or one login failure on host1 or host2, or two failures on host1 and host2.
|
||||
If the logins are ok, you will be able to observe that the folders mapping is ok.
|
||||
|
||||
If a login fails then double-check all three values that identify
|
||||
If login fails then double-check all three values that identify
|
||||
the account, which are the host, the login name, and the password.
|
||||
|
||||
If the folders mapping proposed is not ok then you can fix it with
|
||||
option ``--f1f2``. The following example maps the source folder
|
||||
the option ``--f1f2``. The following example maps the source folder
|
||||
"Sent Messages" to the destination folder "Sent". The double-quotes
|
||||
are not part of the folders names but they should be used when special
|
||||
characters like blanks are in the folders names:
|
||||
are not part of the names of the folders but they should be used when special
|
||||
characters like blanks are in the names of the folders:
|
||||
|
||||
|
||||
```
|
||||
./imapsync ... --f1f2 "Sent Messages=Sent"
|
||||
```
|
||||
|
||||
As explained in the inline help or in the README:
|
||||
As explained in the inline help or the README:
|
||||
```
|
||||
--f1f2 str1=str2 : Force folder str1 to be synced to str2.
|
||||
```
|
||||
@ -169,7 +168,7 @@ sh mysync
|
||||
|
||||
|
||||
|
||||
+ Background knowledge about emailboxes +
|
||||
+ Background knowledge about mailboxes +
|
||||
|
||||
Three Internet protocols are used to access almost all email accounts:
|
||||
POP3, IMAP, HTTP.
|
||||
@ -187,7 +186,7 @@ they are unavailable from any other system located elsewhere.
|
||||
|
||||
The second protocol to deal with email messages is IMAP, Internet Message Access Protocol.
|
||||
IMAP gives access to a hierarchy of mailboxes also called folders. Other IMAP features are
|
||||
concurrent accesses, tagging with flags, search by many criterium like date, subject, size etc.
|
||||
concurrent accesses, tagging with flags, search by many criteriums like date, subject, size, etc.
|
||||
|
||||
The IMAP protocol presents most of the features POP lacks.
|
||||
Messages stay on the imap server so any client on the network can access them
|
||||
@ -199,10 +198,10 @@ HTTP is the protocol to browse the web.
|
||||
Web browsers like Google Chrome, Mozilla Firefox, Internet Explorer and Safari
|
||||
are HTTP client software tools. You already know that so what's the point with HTTP mailboxes?
|
||||
HTTP mailboxes are called webmails.
|
||||
Webmails often offer the same features than imap servers
|
||||
Webmails often offer the same features as imap servers
|
||||
because webmails underlying storage systems are often imap servers.
|
||||
|
||||
Webmails systems like Gmail, Yahoo, Exchange, Zimbra or Office365 are also accessible via imap.
|
||||
Webmails systems like Gmail, Yahoo, Exchange, Zimbra, or Office365 are also accessible via imap.
|
||||
|
||||
The conclusion of this protocol review is that mailboxes can be
|
||||
accessed using the IMAP protocol, most of the time.
|
||||
@ -210,16 +209,16 @@ Here comes imapsync.
|
||||
|
||||
In case the source mailbox is only accessible by the POP protocol,
|
||||
you can use the tool ``pop2imap`` to sync them.
|
||||
``pop2imap`` is located at http://www.linux-france.org/prj/pop2imap/
|
||||
``pop2imap`` is located at https://pop2imap.lamiral.info/
|
||||
|
||||
|
||||
+ Imapsync presentation +
|
||||
|
||||
Software imapsync is a command line tool to
|
||||
copy, migrate, backup or synchronize IMAP mailboxes.
|
||||
Software imapsync is a command-line tool to
|
||||
copy, migrate, backup, or synchronize IMAP mailboxes.
|
||||
|
||||
Command line means imapsync is not graphical, it is textual.
|
||||
Usually with command line tools you have to type characters
|
||||
Usually, with command-line tools, you have to type characters
|
||||
on your keyboard. But your fingers won't suffer much pain
|
||||
typing on the keyboard because script examples are given,
|
||||
nearly ready to run. Most of the time you only have to change
|
||||
@ -230,22 +229,22 @@ You can still use the mouse to launch an editor,
|
||||
select/copy/paste complete examples,
|
||||
and run the little script with a double-click.
|
||||
|
||||
Imapsync runs on Linux, Windows and OS X (Macintosh world).
|
||||
Imapsync runs on Linux, Windows, and OS X (Macintosh/Darwin world).
|
||||
Imapsync is written in the Perl language and, thanks to the
|
||||
Perl developers, Perl runs mostly everywhere. So does imapsync.
|
||||
|
||||
While operating systems have a lot in common, they sometimes differ,
|
||||
especially within their syntax. I won't blame anyone, historically Windows
|
||||
came after Unix. The marvelous designers in this old times
|
||||
decided it would be very cool to not share exactly the same syntax
|
||||
came after Unix. The marvelous designers in these old times
|
||||
decided it would be very cool to not share the same syntax
|
||||
for doing the same things.
|
||||
|
||||
To designate an end of line, Unix uses the character \n
|
||||
To designate an end of the line, Unix uses the character \n
|
||||
Windows uses two characters \r\n and Mac use \r.
|
||||
Thanks guys, great great thinking!
|
||||
Thanks to you guys, great thinking!
|
||||
Fifty years later, we still suffer from this...daily.
|
||||
|
||||
To avoid you some headaches with systems no one masters
|
||||
To avoid some headaches with systems that no one masters
|
||||
I will give examples in both worlds, Unix and Windows.
|
||||
OS X users are in the Unix world nowadays so they must follow
|
||||
the Unix examples.
|
||||
@ -253,17 +252,17 @@ the Unix examples.
|
||||
|
||||
+ Conventions +
|
||||
|
||||
In order to simplify display or print,
|
||||
To simplify display or print,
|
||||
each imapsync command line is usually written in several lines
|
||||
but it could be written in one single line.
|
||||
|
||||
If you prefer to use the whole command written in one single line then
|
||||
just remove the last visible character of each line ( \ or ^ ) and
|
||||
also the carriage return character.
|
||||
The last visible character means "command continues on next line";
|
||||
it is the backslash \ character on Unix and the caret ^ character on Windows.
|
||||
The last visible character \ or ^ means "command continues on next line";
|
||||
it's the backslash \ character on Unix and the caret ^ character on Windows.
|
||||
|
||||
For example, on Unix, a command like the following
|
||||
For example, on Unix, a command like the following:
|
||||
|
||||
```
|
||||
imapsync \
|
||||
@ -272,12 +271,12 @@ For example, on Unix, a command like the following
|
||||
--password1 secret1 \
|
||||
...
|
||||
```
|
||||
is equivalent to
|
||||
is equivalent to:
|
||||
```
|
||||
imapsync --host1 test.lamiral.info --user1 test1 --password1 secret1 ...
|
||||
```
|
||||
|
||||
and on Windows
|
||||
and on Windows, a command like the following:
|
||||
```
|
||||
imapsync.exe ^
|
||||
--host1 test.lamiral.info ^
|
||||
@ -285,7 +284,7 @@ and on Windows
|
||||
--password1 secret1 ^
|
||||
...
|
||||
```
|
||||
is equivalent to
|
||||
is equivalent to:
|
||||
```
|
||||
imapsync --host1 test.lamiral.info --user1 test1 --password1 secret1 ...
|
||||
```
|
||||
@ -301,15 +300,15 @@ messages that couldn't be transferred stay on host1.
|
||||
|
||||
|
||||
It's not the same for destination accounts as imapsync writes on host2 accounts.
|
||||
Imapsync creates folders on them, add messages, set flags on messages.
|
||||
It isn't a safe behavior on a real account. So don't use a real user account
|
||||
Imapsync creates folders on them, adds messages, and sets flags on messages.
|
||||
It isn't safe on a real account. So don't use a real user account
|
||||
to test imapsync. Learn to use it and see what it does on a test account at host2.
|
||||
|
||||
What can badly happen? The most common bad behavior is
|
||||
the folders mapping won't be what you expect because it is strictly
|
||||
reproduced from host1 to host2. The second bad behavior is
|
||||
duplicates on second run and after, it's rare but it can happen
|
||||
when a imap server software changes headers "``Message-Id``" or "``Received``".
|
||||
that folders mapping won't be what you expect because it is strictly
|
||||
reproduced from host1 to host2. The second bad behavior is getting
|
||||
duplicates on the second run and after; it's rare but it can happen
|
||||
when an imap server software changes the headers "``Message-Id``" or "``Received``".
|
||||
Solutions to avoid duplicates are often easy (There's a FAQ called ``FAQ.Duplicates.txt`` about that).
|
||||
It's also possible to remove the duplicates on host2 but it's better to avoid them on user accounts at first,
|
||||
users won't like that you mess up their mailboxes.
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user