news.shtml 62 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  3. <html lang="en" id="TOP" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
  4. <head>
  5. <meta http-equiv="content-type" content="application/xhtml+xml; charset=UTF-8" />
  6. <title>Imapsync News</title>
  7. <meta content="Gilles LAMIRAL" name="author" />
  8. <meta content="None" name="copyright" />
  9. <meta content="imapsync, imap, transfer, migration, synchronization" name="keywords" />
  10. <meta content="imap migration tool" name="description" />
  11. <meta content="text/css" http-equiv="content-style-type" />
  12. <meta content="0" http-equiv="expires" />
  13. <link href="../S/images/logo_imapsync_s.png" type="image/png" rel="icon" />
  14. <link type="text/css" rel="stylesheet" href="../S/style.css" />
  15. <meta name="viewport" content="width=device-width, initial-scale=1" />
  16. <!--
  17. <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" />
  18. -->
  19. </head>
  20. <body>
  21. <h1>News about next imapsync, currently distributed <!--#exec cmd="cat ../VERSION | tr -d '\n'"-->,
  22. next and previous releases <a href="../#TOP" id="latest"><small>(back to menu)</small></a>
  23. </h1>
  24. <h2>Roadmap</h2>
  25. <!--
  26. <ul>
  27. <li><b>Roadmap</b>: </li>
  28. </ul>
  29. -->
  30. <p>
  31. If you are very interrested in those projects, don't hesitate to solicit me!
  32. </p>
  33. <ul>
  34. <li><b>Roadmap</b>: Build a docker image including everything, to have a complete online /X in a single command.</li>
  35. <li><b>Roadmap</b>: Or better: Include a webserver in imapsync to have an online /X integrated. (NB: proof of concept already coded and working)</li>
  36. <li><b>Roadmap</b>: Add the sync of multiple accounts inside imapsync itself instead of via an external shell script doing the loop from a csv file.</li>
  37. <li><b>Roadmap</b>: Build an online tool, like /X, for multiple accounts at once. (NB: proof of concept already coded and working)</li>
  38. </ul>
  39. <h2>New features or bugfixes since previous releases:</h2>
  40. <p>imapsync <!--#exec cmd="cat ../VERSION" --> was written on <!--#flastmod file="VERSION" -->
  41. </p>
  42. <p>See <b><a href="../ChangeLog">ChangeLog</a></b> to read what has been done in details since 2001.</p>
  43. <!--
  44. <ul>
  45. <li><b>2.230</b></li>
  46. <li><b>General</b>: </li>
  47. <li><b>Dependencies added</b>: None </li>
  48. <li><b>Dependencies removed</b>: None </li>
  49. <li><b>Enhancement</b>: </li>
  50. <li><b>Enhancement</b>: </li>
  51. <li><b>Usability</b>: </li>
  52. <li><b>Usability</b>: </li>
  53. <li><b>Bug fix</b>: </li>
  54. <li><b>Bug fix</b>: </li>
  55. <li><b>Refactoring</b>: </li>
  56. <li><b>Refactoring</b>: </li>
  57. <li><b>Security</b>: </li>
  58. <li><b>Security</b>: </li>
  59. <li><b>Portability</b>: </li>
  60. <li><b>Portability</b>: </li>
  61. <li><b>CGI context</b>: </li>
  62. <li><b>CGI context</b>: </li>
  63. <li><b>CGI context</b>: </li>
  64. <li><b>CGI context</b>: </li>
  65. </ul>
  66. -->
  67. <ul>
  68. <li><b>2.229</b></li>
  69. <li><b>General</b>: </li>
  70. <li><b>Dependencies added</b>: Proc::ProcessTable </li>
  71. <li><b>Dependencies removed</b>: None </li>
  72. <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>
  73. <li><b>Enhancement</b>: Filtering buggy flags is now case insensitive. \Junk or \JUNK or \jUnK etc. (sub tests_filterbuggyflags)</li>
  74. <li><b>Enhancement</b>: Added --memorystress to check memory crunching in normal run.</li>
  75. <li><b>Usability</b>: Do not email final reports by default. Use --emailreport1 and --emailreport2 to add final emails reports in each INBOX.</li>
  76. <li><b>CGI context</b>:
  77. <ul>
  78. <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>
  79. <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>
  80. <li>When refuse to serve, exits with value 69 EX_UNAVAILABLE</li>
  81. </ul>
  82. </li>
  83. <li><b>Testing</b>: 1992 unit tests</li>
  84. </ul>
  85. <ul>
  86. <li><b>2.200</b></li>
  87. <li><b>Dependencies removed</b>: None </li>
  88. <li><b>Dependencies added</b>: None </li>
  89. <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>
  90. <li><b>Enhancement</b>: Documented why total sizes can differ even when the sync is perfect.</li>
  91. <li><b>Enhancement</b>: Added SERVER_NAME SERVER_ADDR SERVER_ADMIN variables and values to the output.</li>
  92. <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>
  93. <li><b>Enhancement</b>: Added "Posta inviata" for \Sent with --automap</li>
  94. <li><b>CGI context</b>: Upped ERRORS_MAX_CGI from 20 to 500.</li>
  95. <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>
  96. <li><b>Usability</b>: Added warning "parsing headers of folder ... It can take time for huge folders. Be patient."</li>
  97. <li><b>Bug fix</b>: Do not turn on --delete2duplicates when --syncduplicates is on, unless --delete2duplicates is given.</li>
  98. <li><b>Bug fix</b>: Redirect STDERR to STDOUT in all cases, --log or --nolog</li>
  99. <li><b>Bug fix</b>: Do not allow --skipcrossduplicates and --usecache. Exit EX_USAGE 64</li>
  100. <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>
  101. <li><b>Bug fix</b>: --tests --testslive was listing 0 folders.</li>
  102. <li><b>Refactoring</b>: Deglobalized $debuglist $debugflags </li>
  103. <li><b>Refactoring</b>: Added sync->{ permanentflags2 }</li>
  104. </ul>
  105. <ul>
  106. <li><b>2.178</b></li>
  107. <li><b>Dependencies removed</b>: None </li>
  108. <li><b>Dependencies added</b>: Perl module Compress::Zlib</li>
  109. <li><b>Enhancement</b>: Added final statistic line: "CPU time and %cpu : 13.27 sec 8.3 %cpu 2.1 %allcpus</li>
  110. <li><b>Enhancement</b>: Removed the hard limit --maxsize 35_651_584 set by --gmail2 since CAPABILITY is used and good.</li>
  111. <li><b>Enhancement</b>: Does not checknoabletosearch if --justfolders</li>
  112. <li><b>Enhancement</b>: When creating a folder, check if it is selectable and consider ok if it is selectable.</li>
  113. <li><b>Enhancement</b>: Options --gmail1 --gmail2 together sets --useheader X-Gmail-Received --useheader Message-Id</li>
  114. <li><b>Enhancement</b>: Added compression in the imap connexions.
  115. Compression is off by default no matter the capability announced.
  116. Use --compress1 and --compress2 to turn compression on.</li>
  117. <li><b>Enhancement</b>: Added --keepalive1 and --keepalive2 options.
  118. Some firewalls and network gears like to timeout connections prematurely if the connection sits idle.
  119. This option enables SO_KEEPALIVE on the host1 socket.
  120. --keepalive1 is on by default since imapsync release 2.169
  121. 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>
  122. <li><b>Usability</b>: Removed --fast option. It didn't do anything anyway, it was a fake option.</li>
  123. <li><b>Usability</b>: Added advice inline advice on errors
  124. <ul>
  125. <li>ERR_OVERQUOTA. "The destination mailbox is 100% full, get free space on it and then resume the sync."</li>
  126. <li>ERR_TRANSFER_EXCEEDED. "The maximum transfer size for a single sync is reached ( over 3 GB ). Relaunch the sync to sync more."</li>
  127. <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>
  128. <li>ERR_CONNECTION_FAILURE_HOST1. "Check that host1 on port1 is the right IMAP server to be contacted for your mailbox."</li>
  129. <li>ERR_CONNECTION_FAILURE_HOST2. "Check that host2 on port2 is the right IMAP server to be contacted for your mailbox."</li>
  130. <li>ERR_AUTHENTICATION_FAILURE_USER1. "Check the credentials for user1."</li>
  131. <li>ERR_AUTHENTICATION_FAILURE_USER2. "Check the credentials for user2."</li>
  132. </ul>
  133. </li>
  134. <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>
  135. <li><b>Usability</b>: Added README help for --truncmess</li>
  136. <li><b>CGI context</b>: Experimental loaddelay forced to 0 (no delay at all). So far a huge load is rarely a problem.</li>
  137. <li><b>CGI context</b>: Bugfix. Abort didn't set charset=UTF-8; same thing for heavy load 503 Service Unavailable</li>
  138. <li><b>Bug fix</b>: Made reconnect mechanism works with --oauthdirect1 --oauthdirect2 --oauthaccesstoken1 --oauthaccesstoken2</li>
  139. <li><b>Bug fix</b>: Upped the maximum number a pid can be. From 99999 to 2^22.
  140. 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>
  141. <li><b>Bug fix</b>: Load average on Mac was sometimes buggy. locale float 3,14 instead of 3.14</li>
  142. <li><b>Bug fix</b>: errors_incr() exited with CATCH_ALL</li>
  143. <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>
  144. <li><b>Docker context</b>: Current working directory changed from /var/tmp to /var/tmp/uid_$EFFECTIVE_USER_ID</li>
  145. </ul>
  146. <ul>
  147. <li><b>2.140</b></li>
  148. <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>
  149. <li><b>Dependencies removed</b>: None</li>
  150. <li><b>Dependencies added</b>: None</li>
  151. <li><b>Enhancement</b>: Check if SEARCH ALL works on both accounts and then add --noabletosearch if one can not. Use --nochecknoabletosearch to avoid that behavior.</li>
  152. <li><b>Enhancement</b>: Added an analyse and classification of the errors encountered.
  153. Most common error encountered is printed at the end.
  154. Exit value 112 (EXIT_WITH_ERRORS_MAX) is now replaced by the most common error encountered exit value:
  155. <pre>
  156. EX_OK => 0 ; #/* successful termination */
  157. EX_USAGE => 64 ; #/* command line usage error */
  158. EX_NOINPUT => 66 ; #/* cannot open input */
  159. EX_UNAVAILABLE => 69 ; #/* service unavailable */
  160. EX_SOFTWARE => 70 ; #/* internal software error */
  161. EXIT_CATCH_ALL => 1 ; # Any other error
  162. EXIT_BY_SIGNAL => 6 ; # Should be 128+n where n is the sig_num
  163. EXIT_BY_FILE => 7 ;
  164. EXIT_PID_FILE_ERROR => 8 ;
  165. EXIT_CONNECTION_FAILURE => 10 ;
  166. EXIT_TLS_FAILURE => 12 ;
  167. EXIT_AUTHENTICATION_FAILURE => 16 ;
  168. EXIT_SUBFOLDER1_NO_EXISTS => 21 ;
  169. EXIT_WITH_ERRORS => 111 ;
  170. EXIT_WITH_ERRORS_MAX => 112 ;
  171. EXIT_OVERQUOTA => 113 ;
  172. EXIT_ERR_APPEND => 114 ;
  173. EXIT_ERR_FETCH => 115 ;
  174. EXIT_ERR_CREATE => 116 ;
  175. EXIT_ERR_SELECT => 117 ;
  176. EXIT_TRANSFER_EXCEEDED => 118 ;
  177. EXIT_ERR_APPEND_VIRUS => 119 ;
  178. EXIT_TESTS_FAILED => 254 ; # Like Test::More API
  179. EXIT_CONNECTION_FAILURE_HOST1 => 101 ;
  180. EXIT_CONNECTION_FAILURE_HOST2 => 102 ;
  181. EXIT_AUTHENTICATION_FAILURE_USER1 => 161 ;
  182. EXIT_AUTHENTICATION_FAILURE_USER2 => 162 ;
  183. </pre>
  184. </li>
  185. <li><b>Enhancement</b>: Added option --dry1 it avoids to fetch the message on host1 in --dry mode. Option --dry1 is on when --dry is on.
  186. It speeds up --dry very much. To get the old --dry behavior, use --dry --nodry1</li>
  187. <li><b>Enhancement</b>: Do both sides login and authentication before exiting on failure.</li>
  188. <li><b>Enhancement</b>: --timeout can now be a float (was only integer). Same for --timeout1 --timeout2</li>
  189. <li><b>Enhancement</b>: Added option --syncduplicates to sync duplicates. On by default in CGI context. Off by default on command line.</li>
  190. <li><b>Enhancement</b>: Added option --trylogin. After a login failure of any kind, imapsync tries to login
  191. with the LOGIN command. Use --notrylogin to avoid that. --trylogin is on by default.
  192. </li>
  193. <li><b>Enhancement</b>: Added options --oauthaccesstoken1 and --oauthaccesstoken2 to support OAUTH2 authentication.</li>
  194. <li><b>Enhancement</b>: Added options --oauthdirect1 and --oauthdirect2 to support OAUTH2 authentication.</li>
  195. <li><b>Enhancement</b>: Added statistic line "CPU time and %cpu".
  196. Example: "CPU time and %cpu : 9.2 sec 39.8 %cpu 19.9 %allcpus".</li>
  197. <li><b>Enhancement</b>: Added option --filterbuggyflags to filter flags known to be buggy and
  198. generators of errors "BAD Invalid system flag" or "NO APPEND Invalid flag list".</li>
  199. <li><b>CGI context</b>: Back from Message-Id to Message-Id Received in cgisetcontext</li>
  200. <li><b>CGI context</b>: In CGI context, the log directory is no longer ./LOG_imapsync/ but simply ./ It should fasten the searches and grep</li>
  201. <li><b>CGI context</b>: Added --loglogfile option. Append ../list_all_logs_auto.txt with the logfile name. On by default in CGI context.</li>
  202. <li><b>Usability</b>: Changed time presentation on ETA and in final stats. Example: Wednesday 16 June 2021-06-16 00:32:05 +0200 CEST</li>
  203. <li><b>Usability</b>: Do not check selectable folders for huge accounts with more than 152 folders, 98 percentile of /X;
  204. It could be very long and ended up with some users transformed in stone just by staring at the fixed output.</li>
  205. <li><b>Bug fix</b>: The number of detected cpus (cores) was accurate only on Linux. Added Freebsd and fixed Darwin and Windows parts.</li>
  206. <li><b>Refactoring</b>: Continuing to deglobalize the global variables.</li>
  207. <li><b>Refactoring</b>: 1734 unit tests.</li>
  208. </ul>
  209. <ul>
  210. <li><b>1.977</b></li>
  211. <li><b>Dependencies removed</b>: None.</li>
  212. <li><b>Dependencies added</b>: Perl modules Encode::IMAPUTF7</li>
  213. <li><b>Windows</b>: imapsync.exe is now 64 bits (it was a 32bit binary before).
  214. If you use an old 32bit PC, use imapsync_32bit.exe instead.
  215. </li>
  216. <li><b>Enhancement</b>: Folders sizes are now presented per folder for host1 and host2,
  217. as well as the differrences between them.
  218. Comparing folders is now easier</li>
  219. <li><b>Enhancement</b>: cgidir is . when used by Net::Server::HTTP</li>
  220. <li><b>Enhancement</b>: Added context in --releasecheck user_agent. CGI or Docker or Standard.</li>
  221. <li><b>Usability</b>: Added ETA at the beginning of a folder process (it is also to improve the /X progress bar accuracy).</li>
  222. <li><b>Usability</b>: Added the number of errors and the max number of errors allowed at the final line.
  223. Example: "Exiting with return value 0 (EX_OK: successful termination) 0/50 nb_errors/max_errors"</li>
  224. <li><b>Bug fix</b>: Folders names with + characters must keep their + as they are when prensenting them in uft8 (in folders listings [] = [], right part)</li>
  225. <li><b>Bug fix</b>: PIDs can be negative under Windows.</li>
  226. <li><b>Bug fix</b>: --resynclabels was not on with --gmail1 --gmail2</li>
  227. <li><b>Bug fix</b>: Count a fatal error as a error before presenting the count errors when exiting.</li>
  228. <li><b>Bug fix</b>: Docker context. Killing myself in docker context doesn't seem to work well,
  229. as well as sending signals several times.
  230. So just install catch_exit with INT (ctr-c on terminals)
  231. and exits if still alive after killing myself.</li>
  232. <li><b>Bug fix</b>: Option --justconnect did not show the line "IP address:"</li>
  233. <li><b>Bug fix</b>: Reviewed all exit_clean to include a final CR on the error message.</li>
  234. <li><b>Bug fix</b>: Added SSL_cipher_list => 'DEFAULT:!DH' to tests with ssl.</li>
  235. <li><b>Bug fix</b>: When using --subfolder2 SUB and --delete2folders, do not delete the folder SUB (even it is not on host1).</li>
  236. <li><b>Bug fix</b>: CGI context. charset was charset=ISO-8859-1 in header (CGI.pm default). Now "text/plain; charset=UTF-8"</li>
  237. <li><b>Bug fix</b>: </li>
  238. <li><b>Refactoring</b>: Moved main instructions into sub single_sync(). The goal is to prepare multiple different syncs in imapsync.</li>
  239. <li><b>Refactoring</b>: Cgi context is now set on with env variables SERVER_SOFTWARE and SERVER_PORT (was only SERVER_SOFTWARE).
  240. It is because Net::Server::HTTP does not set SERVER_SOFTWARE but SERVER_PORT.
  241. It is a preparation to a homemade web server to serve on imapsync as a cgi and
  242. get free from Apache or a complicated web server stuff configuration.
  243. </li>
  244. </ul>
  245. <ul>
  246. <li><b>1.945</b> (2019/06/25) </li>
  247. <li><b>Dependency added</b>: Perl modules Text::ParseWords and File::Tail </li>
  248. <li><b>Enhancement</b>: A new /X including:
  249. <ul>
  250. <li>Options like <tt>--dry --justlogin --justfolders --justfoldersizes</tt>,</li>
  251. <li>An extra mode with <tt>--delete1 --delete2 --subfolder1 --subfolder2</tt> in order to make backup/restore syncs online,</li>
  252. <li>A button to reverse source and destination parameters.</li>
  253. </ul>
  254. </li>
  255. <li><b>Usability</b>: Added the error message text after "Exiting with return value xx".
  256. Example: Exiting with return value 16 (EXIT_AUTHENTICATION_FAILURE)</li>
  257. <li><b>Usability</b>: Now "imapsync --host1 imap.lamiral.info" or "imapsync --host2 127.0.0.1" or both do like a --justconnect on servers.
  258. Useful to check rapidely an imap server. Caveat: no longer a command line error.
  259. </li>
  260. <li><b>Usability</b>: Added some error message texts explaining the exit numbers. Example: "Exiting with return value 16 (EXIT_AUTHENTICATION_FAILURE)"</li>
  261. <li><b>Usability</b>: Added what function is called when installing a signal. Example: "kill -QUIT 19839 # special behavior: call to sub catch_exit"</li>
  262. <li><b>Usability</b>: Now --justfolders activates --foldersizesatend</li>
  263. <li><b>Usability</b>: Moved the warning "no header by parse_headers so taking whole header with BODY.PEEK[HEADER]" to --debug mode.</li>
  264. <li><b>Usability</b>: Moved the warning "no header found so adding our own" to --debug mode.</li>
  265. <li><b>Bug fix</b>: USR1 signal for toggle_sleep call was never installed.</li>
  266. <li><b>Bug fix</b>: The number of messages deleted reported at the end was not accurate at all.</li>
  267. <li><b>Bug fix</b>: Change the longest line in --exchange2 and --office from 10500 to 10239. (\n inserted for those long lines)</li>
  268. <li><b>Enhancement</b>: Added PROCESS_ID after "Tail -f finished."</li>
  269. <li><b>Enhancement</b>: --maxage and --minage can take float as value in order to filter part of a day. (Need --noabletosearch also).</li>
  270. <li><b>Enhancement</b>: Gmail context. Added <tt>--resynclabels</tt> to resync the Gmail labels <tt>X-GM-LABELS</tt>.
  271. </li>
  272. <li><b>Enhancement</b>: Backup/Restore context. Added <tt>--subfolder1 "Foo/Bar"</tt> option
  273. in order to restore a backup made with <tt>--subfolder2 "Foo/Bar"</tt>.
  274. The option <tt>--folderrec "Foo/Bar"</tt> is implied by <tt>--subfolder1 "Foo/Bar"</tt>
  275. because it's the most common purpose.
  276. Also, options <tt>--subfolder1</tt> and <tt>--subfolder2</tt> turn off --automap
  277. if it is set because no one would have it set in this context.
  278. </li>
  279. <li><b>Enhancement</b>: All exits are now done with a specific return code related to the error causing the exit.
  280. Here is the list of the exit code values (an integer between 0 and 255),
  281. the names reflects their meaning:
  282. <pre>
  283. EX_OK => 0 ; #/* successful termination */
  284. EX_USAGE => 64 ; #/* command line usage error */
  285. EX_NOINPUT => 66 ; #/* cannot open input */
  286. EX_UNAVAILABLE => 69 ; #/* service unavailable */
  287. EX_SOFTWARE => 70 ; #/* internal software error */
  288. EXIT_CATCH_ALL => 1 ; # Any other error
  289. EXIT_BY_SIGNAL => 6 ; # Should be 128+n where n is the sig_num
  290. EXIT_PID_FILE_ERROR => 8 ;
  291. EXIT_CONNECTION_FAILURE => 10 ;
  292. EXIT_TLS_FAILURE => 12 ;
  293. EXIT_AUTHENTICATION_FAILURE => 16 ;
  294. EXIT_SUBFOLDER1_NO_EXISTS => 21 ;
  295. EXIT_WITH_ERRORS => 111 ;
  296. EXIT_WITH_ERRORS_MAX => 112 ;
  297. EXIT_TESTS_FAILED => 254 ; # Like Test::More API
  298. </pre>
  299. </li>
  300. <li><b>Usability</b>: Gmail context. Activate --resynclabels by default with <tt>--gmail1 --gmail2</tt></li>
  301. <li><b>Usability</b>: The maximum size of a message is the minimum of --maxsize and APPENDLIMIT=xxx (given the imap servers) or each one if the other no exists.</li>
  302. <li><b>Usability</b>: CGI context. Added default like --maxsize 1_000_000_000 (Out of memory prevention?).</li>
  303. <li><b>Usability</b>: CGI context. Only use "Message-Id" to identify messages, instead of "Message-Id" + "Received". We'll see.</li>
  304. <li><b>Usability</b>: CGI context. --addheader on by default. In order to remove it from the /X call. Still allow it as an option.</li>
  305. <li><b>Enhancement</b>: Added option --appendlimit xxxx in order to override the value got by APPENDLIMIT in CAPABILITY.
  306. The goal is to permit --truncmess of large messages.</li>
  307. <li><b>Enhancement</b>: Added option --truncmess to allow transfer of too big messages.
  308. Use it if you think it's better to have a truncated message than no message at all.</li>
  309. <li><b>Usability</b>: CGI context. Instead of quit with "another imapsync may be curently running",
  310. do like a tail -f on the other running sync, if the standart (crendentials) parameters are the same.</li>
  311. <li><b>Usability</b>: CGI context. A heavy load is now logged.</li>
  312. <li><b>Usability</b>: CGI context. Tolerate more load. Double the threshold. Now accept load at 2 per core instead of 1 per core</li>
  313. <li><b>Usability</b>: CGI context. Remove edging blanks of the 6 options <tt>--hostX --userX --passwordX</tt> (where X = 1 or 2).
  314. It will solve some login failures on /X just because blanks are not visible but sometimes there,
  315. copy/paste my friend you're not always my friend... use <tt>--nosanitize</tt> to avoid it.</li>
  316. <li><b>Bug fix</b>: With <tt>--gmail1</tt> or <tt>--gmail2</tt> do not sync <tt>[Gmail]/All Mail</tt> if it is not requested. </li>
  317. <li><b>Bug fix</b>: When asked to terminate by a signal, kill myself by the signal instead of an exit call.
  318. Applied Martin Cracauer's advice on <a href="https://www.cons.org/cracauer/sigint.html">Proper handling of SIGINT/SIGQUIT</a>.
  319. I hope it fixes the <a href="https://github.com/imapsync/imapsync/issues/142">not always working double-ctrl-c</a>
  320. to end the sync.</li>
  321. <li><b>Bug fix</b>: Fixed tests to pass <tt>imapsync --tests</tt> under the docker image.</li>
  322. <li><b>Bug fix</b>: Gmail context. <tt>--synclabels --subfolder2 "Foo"</tt> create only sublabels under <tt>"Foo"</tt> and not a mixture with root labels.</li>
  323. <li><b>Bug fix</b>: <tt>--subfolder2 "Pf2/Sub2"</tt> and <tt>--subfolder2 "Sub2"</tt> perform the same when <tt>"Pf2"</tt> is the prefix of host2</li>
  324. <li><b>Bug fix</b>: imapsync now syncs messages whatever their proclaimed size are.
  325. (ProtonMail Bridge 1.1.3
  326. <a href="https://github.com/imapsync/imapsync/issues/163#issuecomment-480800242"
  327. >does RFC822.SIZE null for all messages</a>).</li>
  328. <li><b>Refactoring</b>: Fixed some perl critics.</li>
  329. <li><b>Refactoring</b>: Deglobalized some variables</li>
  330. <li><b>Security</b>: Sanitized --subfolder1 and --subfolder2 values.</li>
  331. <li><b>Portability</b>: Upgraded Mac binary to handle TLSv1.2</li>
  332. <li><b>Roadmap</b>: Will add <tt>--subfolder1</tt> and <tt>--subfolder2</tt> parameters to /X in order to make backup/restore syncs.</li>
  333. </ul>
  334. <ul>
  335. <li><b>1.921</b> (2019/02/18) </li>
  336. <li><b>Enhancement</b>: Script <a href="../examples/sync_parallel_unix.sh">sync_parallel_unix.sh</a> to parallelize massive syncs.
  337. It uses the powerful GNU <tt>parallel</tt> command.
  338. </li>
  339. <li><b>Enhancement</b>: Added option <tt>--synclabels</tt> to sync Gmail labels. It should speed up Gmail to Gmail syncs.
  340. The option <tt>--synclabels</tt> applies only during a copy of a message for now. Resyncing Gmail labels will be coded later.
  341. </li>
  342. <li><b>Enhancement</b>: Option <tt>--synclabels</tt> is activated with <tt>--gmail1 --gmail2</tt> used together.</li>
  343. <li><b>Portability</b>: The imapsync script <a href="https://en.wikipedia.org/wiki/Shebang_(Unix)">Shebang</a>
  344. (first line of imapsync) uses <tt>env</tt> now, instead of direct perl path.
  345. I'm not sure it's a good change that
  346. <tt>#!/usr/bin/perl</tt> becomes <tt>#!/usr/bin/env perl</tt></li>
  347. <li><b>Enhancement</b>: Final stats:
  348. <ul>
  349. <li>Added a counter of crossduplicates on host2 ( a crossduplicate is a message found accross different folders )</li>
  350. <li>Added counter of "Messages found in host1 not in host2"</li>
  351. <li>Added counter of "Messages found in host2 not in host1"</li>
  352. <li>Added stat "Load end is"</li>
  353. <li>Added comment on final stat about messages in host1 not in host2</li>
  354. <li>Added comment on final stat about messages in host2 not in host1</li>
  355. <li>Added comment on final stat about unidentified messages and an --addheader suggestion</li>
  356. <li>Removed counters of "Total bytes duplicate host1" and "Total bytes duplicate host2"</li>
  357. <li>Removed counter of "Total bytes error"</li>
  358. </ul>
  359. </li>
  360. <li><b>Enhancement</b>: Added authmech X-MASTERAUTH. To be used for Kerio with --authmech1 X-MASTERAUTH or --authmech2 X-MASTERAUTH ( Patch from https://github.com/imapsync/imapsync/pull/53/files )</li>
  361. <li><b>Enhancement</b>: Added --sigprint HUP (signal HUP by default) in order to allow some asynchronous prints (with, for example, a <tt>kill -HUP IMAPSYNC_PID</tt>) in CGI mode and avoid timeouts from browser</li>
  362. <li><b>Enhancement</b>: <tt>--skipcrossduplicates</tt> activated with <tt>--gmail1</tt> alone</li>
  363. <li><b>Enhancement</b>: <tt>--skipcrossduplicates</tt> is NOT activated with <tt>--gmail2</tt> alone or with <tt>--gmail1 --gmail2</tt> together used.</li>
  364. <li><b>Enhancement</b>: Speed. Deletions on host1 are done by batch during a resync.</li>
  365. <li><b>Enhancement</b>: Added automatic <tt>--maxsize</tt> from <tt>"CAPABILITY APPENDLIMIT=xxxx"</tt> (Gmail)</li>
  366. <li><b>Enhancement</b>: Added <tt>--folderlast '[Gmail]/All Mail'</tt> with <tt>--gmail1 --gmail2</tt></li>
  367. <li><b>Enhancement</b>: With <tt>--office1</tt> option, folder "Files" is excluded because it's a "special" folder. Like <tt>--exclude "^Files$"</tt>.
  368. Unless <tt>--noexclude</tt> is used.</li>
  369. <li><b>Enhancement</b>: With <tt>--office2</tt> option, folder "Files" on host1 is renamed like <tt>--f1f2 "Files=Files_renamed_by_imapsync"</tt>.
  370. Unless <tt>--nof1f2</tt> is used.</li>
  371. <li><b>Enhancement</b>: Added <tt>--exclude '^Files$'</tt> with <tt>--office2</tt> option.</li>
  372. <li><b>Enhancement</b>: Added inline explanations for the options <tt>--office1 --office2 --exchange1 --exchange2</tt> (what they set and how to avoid what they set).</li>
  373. <li><b>Enhancement</b>: Added <tt>--noregexmess</tt> to avoid the regexmess setting with <tt>--office2</tt> and <tt>--exchange2</tt> (wrap long lines >= 10500 char).</li>
  374. <li><b>Enhancement</b>: Added <tt>--noregexflag</tt> to avoid the regexflag set by <tt>--exchange2</tt> (remove <tt>\Flagged</tt> flag).</li>
  375. <li><b>Enhancement</b>: Added <tt>IO::Socket::IP</tt> and <tt>CGI</tt> in the list of the modules versions.</li>
  376. <li><b>Usability</b>: Added PPID info where PID is printed. Unix only. Can be useful in some contextes, CGI, embeded, debugging etc.</li>
  377. <li><b>Bug fix</b>: Now split the deletion of messages in several chunks (using --split1)</li>
  378. <li><b>Bug fix</b>: --debugssl 0 was impossible and equivalent to --debugssl 1</li>
  379. <li><b>Bug fix</b>: Removed <tt>--nosubscribed</tt> usage since it is not coded and useless anyway.</li>
  380. <li><b>Bug fix</b>: Option <tt>--maxsleep</tt> override variable <tt>$MAX_SLEEP</tt> in <tt>gmail*()</tt> subroutines.</li>
  381. <li><b>Bug fix</b>: Do not create host2 folder when no messages are found on this folder on host1
  382. (See <a href="https://github.com/imapsync/imapsync/issues/95">https://github.com/imapsync/imapsync/issues/95</a>)</li>
  383. <li><b>Bug fix</b>: The regex to remove the flag <tt>\Flagged</tt> was wrong. It worked because of another filter run after.</li>
  384. <li><b>Bug fix</b>: The options <tt>--exchange1</tt> and <tt>--exchange2</tt> were not options! No one complained...</li>
  385. <li><b>Bug fix</b>: A pid can be up to 99999 on FreeBSD</li>
  386. <li><b>Refactoring</b>: Deglobarised some global variables</li>
  387. <li><b>Refactoring</b>: Refactored <tt>sub appendlimit()</tt> to use <tt>Mail::IMAPClient::capability</tt> like the API.
  388. No hack from internal <tt>$imap->{ APPENDLIMIT }</tt></li>
  389. <li><b>Refactoring</b>: Fixed some perl critics.</li>
  390. <li><b>Portability</b>: Added freebsd support for loadavg and cpu_cores.</li>
  391. <li><b>Portability</b>: Calls memory_consumption_of_pids_win32() within Cygwin environment (https://github.com/imapsync/imapsync/pull/22)</li>
  392. <li><b>Dependency removed</b>: None.</li>
  393. <li><b>Dependency added</b>: None.</li>
  394. <li><b>Roadmap</b>: Proxy mode abandoned. Will be another lighter memory tool (since less memory consumption is the goal).</li>
  395. </ul>
  396. <ul>
  397. <li><b>1.882</b> (2018/05/06) On the road to a proxy mode! (not done yet)</li>
  398. <li><b>Enhancement</b>: Added option --nocheckfoldersexist ( Default is like --checkfoldersexist )</li>
  399. <li><b>Enhancement</b>: Added option --noresyncflags : Do not resync flags for already transfered messages.
  400. May be useful when a user has already started to play with its host2 account.</li>
  401. <li><b>Enhancement</b>: Option --abort now creates a log too, in order to see if imapsync ended by signal comes from option --abort or something else.</li>
  402. <li><b>Enhancement</b>: Added option --sigexit; For example --sigexit QUIT --sigexit TERM to exit when receiving QUIT or TERM signals.<br/>
  403. Added option --sigreconnect. For example --sigreconnect INT to reconnect to both imap servers when receiving INT signal.<br/>
  404. Added option --sigignore. For example --sigignore TERM to "ignore" the TERM signal. In fact print stats during the sync.<br/>
  405. Default is like: --sigexit QUIT --sigexit TERM --sigreconnect INT
  406. </li>
  407. <li><b>Enhancement</b>: Moved the hostname printing at first line. The goal is for clarity when in proxy mode.<br/>
  408. Added free RAM info in the banner.<br/>
  409. </li>
  410. <li><b>Enhancement</b>: When using sleeping behavior, a signal USR1 toggles sleep from 2s to 0s (back to 2s with on next USR1 signal). Unix only.</li>
  411. <li><b>Usability</b>: Detect extra arguments. Meaning usually a quoting issue in the command line or that options are not well parsed.</li>
  412. <li><b>Usability</b>: Added inline documentation about --releasecheck and --noreleasecheck
  413. Default upstream is still --releasecheck. Just a line to change to have --noreleasecheck by default (as before)</li>
  414. <li><b>Usability</b>: Added inline advice to resync after an end commanded by a TERM or QUIT signal.</li>
  415. <li><b>Bug fix</b>: Fixed sub epoch() to allow that kind of silly INTERNALDATE 00-Jan-0000 00:00:00 +0000
  416. (Thanks to IBM Domino...)</li>
  417. <li><b>Bug fix</b>: --releasecheck activated was hardcoded in cgi context. Now it depends on the default behavior chosen.
  418. Bug pending. Still have to fix --releasecheck on with --help</li>
  419. <li><b>Bug fix</b>: Added \t\r\n characters to be replaced by character _ in sub filter_forbidden_characters()</li>
  420. <li><b>Bug fix</b>: fixes to pass --tests under root user.</li>
  421. <li><b>CGI context</b>: Added SERVER_SOFTWARE and SERVER_PORT info.</li>
  422. <li><b>CGI context</b>: Added free RAM, total RAM and hostname in the status.</li>
  423. <li><b>CGI context</b>: Reduced the loadavg info in the header status.</li>
  424. <li><b>Refactoring</b>: Fixed some perlcritics level 4.</li>
  425. <li><b>Refactoring</b>: Deglobalized several global variables.</li>
  426. <li><b>Dependency added</b>: Perl module Regex::Common</li>
  427. </ul>
  428. <ul>
  429. <li><b>1.836</b> (2017/09/05) More secure by default, ssl or tls activation!</li>
  430. <li><b>Enhancement</b>: An <a href="https://hub.docker.com/r/gilleslamiral/imapsync/"><b>Imapsync Docker image</b></a> available!</li>
  431. <li><b>Usability</b>: Now goes to SSL by default if port 993 is open. Use <tt>--nosslcheck</tt> to avoid that.</li>
  432. <li><b>Usability</b>: Now goes to TLS by default if possible, ie, only if STARTTLS is in CAPABILITY. If you want only TLS and nothing else, use <tt>--tls1 --nossl1</tt></li>
  433. <li><b>Usability</b>: Now if you want a basic imap connection on port 143 with no default encryption behavior, ie, no ssl nor tls,
  434. then use <tt>--nossl1 --notls1</tt> for host1 and <tt>--nossl2 --notls2</tt> for host2.</li>
  435. <li><b>Enhancement</b>: Added <tt>--gmail1</tt> and <tt>--gmail2</tt> to simplify Gmail options setting.
  436. It sets parameters suggested in the <a href="../FAQ.d/FAQ.Gmail.txt">Gmail FAQ</a> <tt>--ssl</tt>, <tt>--host</tt>, etc.</li>
  437. <li><b>Enhancement</b>: Added <tt>--office1</tt> and <tt>--office2</tt> to simplify Office 365 options setting.
  438. It sets parameters suggested in the <a href="../FAQ.d/FAQ.Exchange.txt">Exchange/Office365 FAQ</a>.</li>
  439. <li><b>Enhancement</b>: Added <tt>--exchange1</tt> and <tt>--exchange2</tt> to simplify Exchange options setting.
  440. It sets parameters suggested in the <a href="../FAQ.d/FAQ.Exchange.txt">Exchange FAQ</a>.</li>
  441. <li><b>Enhancement</b>: Added <tt>--domino1</tt> and <tt>--domino2</tt> to simplify Domino options setting.
  442. It sets parameters suggested in the <a href="../FAQ.d/FAQ.Domino.txt">Domino FAQ</a>.</li>
  443. <li><b>Enhancement</b>: Added <tt>--maxsleep</tt> in order to avoid timeouts with <tt>--maxbytespersecond</tt> and <tt>--maxmessagespersecond</tt> options.
  444. By default imapsync will sleep 2 seconds maximum, like if the command line contained <tt>--maxsleep 2</tt></li>
  445. <li><b>Enhancement</b>: Added <tt>--maxbytesafter</tt> in order to start <tt>--maxbytespersecond</tt> limitation only after
  446. <tt>--maxbytesafter</tt> amount of data transferred. Usefull for Gmail limits, for example,
  447. in order to active a 50K/s limit rate only after 500 MB of data transfer, use
  448. <tt>--maxbytesafter 500_000_000 --maxbytespersecond 50_000</tt></li>
  449. <li><b>Enhancement</b>: Added <tt>--testsunit</tt> in order to run any unit test individualy from the command line.
  450. Several --testsunit are allowed. Example:
  451. <tt>imapsync --testsunit tests_true --testsunit tests_always_fail</tt></li>
  452. <li><b>Enhancement</b>: Added password setting via environment variables <tt>IMAPSYNC_PASSWORD1</tt> and <tt>IMAPSYNC_PASSWORD2</tt></li>
  453. <li><b>Usability</b>: No more useless and false warning <tt>"says it has NO CAPABILITY for AUTHENTICATE LOGIN"</tt></li>
  454. <li><b>Usability</b>: Options <tt>--delete1</tt> and <tt>--delete</tt> are now aliases.
  455. Option <tt>--delete1</tt> is preferable over <tt>--delete</tt> (<tt>--delete</tt> is still supported). </li>
  456. <li><b>Usability</b>: Now prints always permanentflags info.
  457. It helps to understand most flag issues at first run, without <tt>--debugflags</tt></li>
  458. <li><b>Usability</b>: Now prints "could not append ( Subject:[$subject], Date:[$h1_date], Size:[$h1_size] )"
  459. when append fails.</li>
  460. <li><b>Usability</b>: Option <tt>--showpasswords</tt> now shows also passwords with <tt>--debugimap</tt>. Useful to debug quoting issues.</li>
  461. <li><b>Usability</b>: <tt>--ipv4</tt> is now synonym of <tt>--inet4</tt> and <tt>--ipv6</tt> is now synonim of <tt>--inet6</tt></li>
  462. <li><b>Usability</b>: Added <tt>--testslive6</tt> to check pure ipv6 connectivity.</li>
  463. <li><b>Enhancement</b>: Added <tt>--noabletosearch1</tt> and <tt>--noabletosearch2</tt>;
  464. Still support <tt>--noabletosearch</tt>, which turn on both <tt>--noabletosearch1</tt> and <tt>--noabletosearch2</tt>
  465. </li>
  466. <li><b>Enhancement</b>: Added <tt>--abort</tt> option to terminate a previous call still running.
  467. In command line context <tt>--abort</tt> uses the pidfile to know what to abort.
  468. In cgi context, ie online, exact same credentials are needed in order to really abort the other sync.</li>
  469. <li><b>Enhancement</b>: Added milliseconds in the default logfile name since several runs is possible within one second in cgi context or on a powerful machine.</li>
  470. <li><b>Docker context</b>: Added docker context in order to be run under the nobody user without permission issues.</li>
  471. <li><b>Docker context</b>: Can run imapsync <tt>--tests</tt> under nobody user on Unix (or at least Linux).</li>
  472. <li><b>Bugfix</b>: Fixed issue "SSL routines:ssl3_check_cert_and_algorithm:dh key too small" with
  473. <a href="http://stackoverflow.com/questions/36417224/openssl-dh-key-too-small-error">openssl-dh-key-too-small-error</a>
  474. <tt>SSL_cipher_list => 'DEFAULT:!DH'</tt></li>
  475. <li><b>CGI context</b>: Allow parameters passed by POST.</li>
  476. <li><b>CGI context</b>: Abort, before doing anything, if the server load is already too heavy,
  477. and invite to come later depending on the current load (1, 5, or 15 minutes later).</li>
  478. <li><b>Bug fix</b>: Guessed prefix is the empty string even when there is no folders (which is a bad sign anyway, since INBOX should be listed).</li>
  479. <li><b>Bug fix</b>: Option <tt>--skipmess</tt> could not work most of the time. I guess it was a mistake arrived by badly converting an "unless" to an "if". Perl critics with no tests added => caveat emptor!</li>
  480. <li><b>Refactoring</b>: Removed Mail::IMAPClient overload definitions</li>
  481. <li><b>Dependency added</b>: IO::Socket::SSL</li>
  482. <li><b>Dependency added</b>: Sys::MemInfo</li>
  483. <li><b>Dependency added</b>: Pod::Usage</li>
  484. </ul>
  485. <ul>
  486. <li><b>1.727</b> (2016/08/19) https website and CGI on the way!</li>
  487. <li><b>Security</b>: Thanks to free and easy <b>letsencrypt</b>,
  488. Imapsync website is available in https:
  489. <a href="https://imapsync.lamiral.info/"><b>https://imapsync.lamiral.info/</b></a>
  490. </li>
  491. <li><b>Enhancement</b>: Added option <tt>--delete1emptyfolders</tt>. It deletes empty folders on host1, INBOX excepted.
  492. Useful with <tt>--delete</tt> since what remains on host1 is only what failed to be synced.</li>
  493. <li><b>Enhancement</b>: Imapsync can be used as a CGI program. Still experimental. The web UI interface has to be written.</li>
  494. <li><b>Enhancement</b>: <b>XOAUTH2</b> authentication works with <b>json</b> files without extra tool openssl. Old pk12 files are still supported (still with openssl).</li>
  495. <li><b>Enhancement</b>: Memory usage passed from <b>5x to 2x of the biggest message size</b>.
  496. Some users do send 700MB messages, imapsync needed 3.5 GB of RAM, now it crunches only 1.4 GB,
  497. a more common RAM value available on small hosts.</li>
  498. <li><b>Enhancement</b>: Added option <tt>--inet4</tt> to force ipv4 in ssl and tls modes.
  499. Useful with Gmail and Office365 when ipv6 is disable on the imapsync host but not ipv6 resolution.</li>
  500. <li><b>Enhancement</b>: Reconnect to imap servers with a Ctrl-c. Exit with two Ctrl-c within one second or one Ctrl-\</li>
  501. <li><b>Enhancement</b>: Copy is not done when one --pipemess command ends with an empty message generated.</li>
  502. <li><b>Enhancement</b>: STDERR of --pipemess commands are reported on STDOUT and in the logfile (they were ignored before).</li>
  503. <li><b>Enhancement</b>: </li>
  504. <li><b>Dependency</b>: Added Perl module dependency of Readonly to transform hard coded magic numbers into names. Mandatory module.</li>
  505. <li><b>Dependency</b>: Added Perl module dependency of Test::MockObject for some tests. Only a "require" for now.</li>
  506. <li><b>Security</b>: In CGI mode, remove all content in the unsafe "eval"uated options
  507. (--regextrans2 --regexflag --regexmess --skipmess --pipemess --delete2foldersonly --delete2foldersbutnot).
  508. Consider these options not available in CGI mode.</li>
  509. <li><b>Bug fix</b>: Fixed -1 wrong output in statistics for big accounts (%d => %s) in printf.</li>
  510. <li><b>Bug fix</b>: Uncommented call to $test_builder->reset( ) Don't know why it was commented but it was bad for knowing tests go wrong.</li>
  511. <li><b>Bug fix</b>: Check connected state in sub create_folder(). Avoid multiple useless failures.</li>
  512. <li><b>Refactoring</b>: Wrote Perl package Imapsync::Getopt::Long to handle CGI requests like command line options.
  513. Started as a copy of Luke Ross Getopt::Long::CGI</li>
  514. <li><b>Refactoring</b>: Perlcritic cleanup 627 violations of CodeLayout::ProhibitTrailingWhitespace.</li>
  515. <li><b>Refactoring</b>: Perlcritic cleanup 60 Double-sigil dereferences.</li>
  516. <li><b>Refactoring</b>: Perlcritic cleanup 458 ValuesAndExpressions::ProhibitInterpolationOfLiterals. "Useless interpolation of literal string"</li>
  517. <li><b>Refactoring</b>: Perlcritic cleanup 420 CodeLayout::ProhibitParensWithBuiltins. "Builtin function called with parentheses". (Severity: 1).</li>
  518. <li><b>Refactoring</b>: Perlcritic cleanup, various small advices.</li>
  519. <li><b>Refactoring</b>: Replaced print by myprint, printf by myprintf, sprinf by mysprintf.
  520. Will ease <tt>--quiet</tt> mode and general output handling.</li>
  521. </ul>
  522. <ul>
  523. <li><b>1.684</b> (2016/03/17) Small changes, bugfixes</li>
  524. <li><b>Bug fix</b>: Imapsync.exe updated to Mail-IMAPClient-3.38 (3.37 had a bug with credentials containing special characters)</li>
  525. <li><b>Usability</b>: Added inline help about "use --noexpungeaftereach to speed up" if --delete is used.</li>
  526. <li><b>Usability</b>: Added --sslargs1 in documentation, usage option list.</li>
  527. <li><b>Bug fix</b>: No more warning about "Use of uninitialized value $sockargs[7] in join or string at"
  528. in ssl or tls mode. Was due to "'SSL_version' => undef".</li>
  529. <li><b>Bug fix</b>: No more "Can't use an undefined value as a HASH reference at /usr/bin/imapsync line 1247."</li>
  530. <li><b>Bug fix</b>: Added --expungeaftereach check in sub delete_message_on_host1().</li>
  531. </ul>
  532. <ul>
  533. <li><b>1.678</b> (2016/01/21) <b>Improved website!</b> (I hope...)</li>
  534. <li><b>Enhancement</b>: Added <b><tt>--sslargs1</tt></b> and <b><tt>--sslargs2</tt></b> to pass any ssl parameter for host1 or host2 connection.
  535. Example: <tt>--sslargs1 SSL_verify_mode=1 --sslargs1 SSL_version=SSLv3</tt></li>
  536. <li><b>Enhancement</b>: Added <tt>--timeout1 int</tt> and <tt>--timeout2 int</tt> in seconds (<tt>--timeout int</tt> still available to set both with the same value)</li>
  537. <li><b>Enhancement</b>: Added <tt>--debugssl int</tt>. Default is like <tt>--debugssl 1</tt> (Only print out errors).</li>
  538. <li><b>Enhancement</b>: Added several <a href="./poll.shtml">polls</a> to know where I shall focus improvements.</li>
  539. <li><b>Usability</b>: Added env_proxy call in <tt>sub xoauth2()</tt>
  540. to read proxy settings from environment variable <tt>http_proxy</tt>
  541. without using <tt>PERL_LWP_ENV_PROXY=1</tt></li>
  542. <li><b>Usability</b>: Wrote <a href="../doc/TUTORIAL_Unix.html">TUTORIAL_Unix</a>.</li>
  543. <li><b>Usability</b>: Check f1 folder exists when specified by <tt>--f1f2</tt> and warns when it doesn't</li>
  544. <li><b>Usability</b>: Added <tt>--automap --justfolders --dry</tt> in <tt>imapsync_example.sh</tt> and <tt>imapsync_example.bat</tt></li>
  545. <li><b>Bug fix</b>: Added require Encode::Byte to solve "The locale codeset (cp1252) isn't one that perl can decode" on Win32.</li>
  546. <li><b>Refactoring</b>: Removed <tt>--allow3xx</tt> option.</li>
  547. <li><b>Refactoring</b>: Continue to move to one global $sync-&gt; in order to reduce number of parameters in routines.</li>
  548. </ul>
  549. <ul>
  550. <li><b>1.670</b> (2015/12/03) Folders <b>mapping made easy</b> with <b>--automap</b></li>
  551. <li><b>Enhancement</b>: Added option <b><tt>--automap</tt></b> that guesses folders mapping,
  552. for folders like "Sent", "Junk", "Drafts", "All", "Archive", "Flagged".
  553. <ul>
  554. <li>IMAP Special-Use folders described in <a href="https://tools.ietf.org/html/rfc6154">rfc6154</a>
  555. are supported and also well known names for Exchange and common clients. </li>
  556. <li>Automap is turned off by default,
  557. to try it a safe method is to use <tt>--automap --justautomap</tt>, it will exit early</li>
  558. </ul>
  559. </li>
  560. <li><b>Enhancement</b>: Added <b><tt>--f1f2 str1=str2</tt></b> : Force folder str1 to be synced to str2.
  561. <ul>
  562. <li>Option <tt>--f1f2</tt> overrides any <tt>--automap</tt> mapping and any <tt>--regextrans2</tt> transformation. </li>
  563. <li>Example <tt>--f1f2 Spam=Junk</tt> to map Spam folder to Junk.</li>
  564. </ul>
  565. </li>
  566. <li><b>Enhancement</b>: Added <b><tt>--justautomap</tt></b> to exit after seeing what will happen with
  567. --automap and --f1f2 options.</li>
  568. <li><b>Enhancement</b>: Added <a href="https://tools.ietf.org/html/rfc2087">IMAP4 QUOTA </a> values (RFC 2087)
  569. when they are available. A warning goes up when it's time to find space.
  570. </li>
  571. <li><b>Enhancement</b>: Added <a href="http://tools.ietf.org/html/rfc2971.html">IMAP4 ID extension</a>.
  572. <ul>
  573. <li>ID feature is on by default if supported by the IMAP servers,
  574. use <b><tt>--noid</tt></b> to turn it off.</li>
  575. <li>ID Infos returned by the imap servers are shown.</li>
  576. <li>Infos sent to the servers are name=imapsync, version=`imapsync --version`, os=$OSNAME`,
  577. vendor='Gilles LAMIRAL' and date=`rcs date of release`.</li>
  578. <li>For github or other distributors you can hack this part
  579. by searching <tt>$imapsync_id_github</tt></li>
  580. </ul>
  581. </li>
  582. <li><b>Enhancement</b>: Added <b><tt>--logdir path</tt></b> to change the default log directory.
  583. Default is <tt>LOG_imapsync/</tt>
  584. </li>
  585. <li><b>Usability</b>: Added folders counting in outputs.</li>
  586. <li><b>Usability</b>: Better output in the login part</li>
  587. <li><b>Usability</b>: Guess prefixes and separators instead of forcing the user to find them.</li>
  588. <li><b>Usability</b>: Output, added <tt>Host1:</tt> or <tt>Host2:</tt> at the beginning of lines.</li>
  589. <li><b>Bug fix</b>: SSL_VERIFY_NONE in --ssl and --tls modes</li>
  590. <li><b>Bug fix</b>: Fixed xoauth2 calls. Now XOAUTH2 Works on Windows <tt>--authmech1 XOAUTH2</tt>
  591. with openssl installed.
  592. See <a href="http://imapsync.lamiral.info/FAQ.d/FAQ.XOAUTH2.txt">FAQ.d/FAQ.XOAUTH2.txt</a>.</li>
  593. <li><b>Bug fix</b>: Fixed IO::Socket::SSL constants issue with latest releases</li>
  594. <li><b>Bug fix</b>: Changed "Host1: checking all wanted folders exist" not efficient algorithm in order
  595. to allow efficiently a 2.4 million folders account. Yes, some accounts have this.</li>
  596. <li><b>Refactoring</b>: Started to use global $sync-&gt; in order to reduce number of parameters in routines.</li>
  597. <li><b>Refactoring</b>: Some perlcritic fixes.</li>
  598. </ul>
  599. <ul>
  600. <li><b>1.644</b> (2015/07/17) Mac OS X standalone binary provided!</li>
  601. <li><b>Enhancement</b>: Mac OS X standalone binary called <tt>imapsync_bin_Darwin</tt></li>
  602. <li><b>Enhancement</b>: Added option <tt>--subfolder2 SUB</tt> Move whole host1 folders hierarchy under folder SUB.</li>
  603. <li><b>Enhancement</b>: Added <tt>--fetch_hash_set "1:*"</tt> to permit Mail2World success.
  604. Need a patched Mail::IMAPClient 3.35 in <tt>sub fetch_hash()</tt></li>
  605. <li><b>Usability</b>: No folders sizes if --justfolders, unless really wanted.</li>
  606. <li><b>Usability</b>: No warning about messages when <tt>--dry --justfolders</tt> are used together.</li>
  607. <li><b>Bug fix</b>: Added NOOP in --dry mode during fake APPEND in order to avoid timeouts</li>
  608. </ul>
  609. <ul>
  610. <li><b>1.636</b> (2015/03/31)</li>
  611. <li><b>Enhancement</b>: Added errors dump listing at the end, before last folder sizes or the statistics. Turned on by default. Use <tt>--noerrorsdump</tt> to avoid it.</li>
  612. <li><b>Enhancement</b>: Added <tt>--maxlinelengthcmd</tt> that will be called upon when a line over <tt>--maxlinelength</tt> value is detected. </li>
  613. <li><b>Enhancement</b>: Exchange maxlinelength issue fixed with <tt>--maxlinelengthcmd 'reformime -r7'</tt> on Linux.
  614. Install maildrop package to get reformime command</li>
  615. <li><b>Enhancement</b>: Added <tt>--testslive</tt>. Running <tt>imapsync --testslive</tt> performs a live test on real accounts (I own).</li>
  616. <li><b>Enhancement</b>: Added <tt>--pipemess</tt> in order to pass all message to an external filter tool like <tt>reformime -r7</tt>.</li>
  617. <li><b>Enhancement</b>: Added xoauth2 support, available on Unix with underlying openssl. Thanks to Joaquin Lopez.</li>
  618. <li><b>Enhancement</b>: Added <tt>--skipmess regex</tt> to skip messages matching a regex.
  619. Example <tt>--skipmess 'm/[\x80-ff]/'</tt> to slip messages with non-7bit characters ( ie a byte somewhere begins with 1 )</li>
  620. <li><b>Usability</b>: Better output of folders excluded by --exclude and folders included by --include</li>
  621. <li><b>Usability</b>: Added inline help in many places. What you can do with switches to change imapsync behaviour, contextually. Learn imapsync the easy way.</li>
  622. <li><b>Bug fix</b>: <tt>imapsync --tests</tt> should work under any circumstance now, any Unix, Windows, exe or bin or script. 561 non-regression tests</li>
  623. <li><b>Bug fix</b>: Options <tt>--folderfirst</tt> and <tt>--folderlast</tt> generated an error when their value folder does not exist. Existence is checked.</li>
  624. <li><b>Bug fix</b>: Option <tt>--disarmreadreceipts</tt> used to change Disposition-Notification-To in the body when not available in the header.
  625. Now never changes the body in all cases.</li>
  626. <li><b>Bug fix</b>: Change default useheader values. Now it is really like <tt>--useheader "Message-Id" --useheader "Received"</tt>.
  627. HMailServer replies two lines with <tt>--useheader "Message-Id" --useheader "Message-ID"</tt> in older imapsync releases.
  628. </li>
  629. <li><b>Bug fix</b>: in <tt>imap_utf7_decode()</tt> + character must not be escaped. Was a bug with Cyrillic characters</li>
  630. <li><b>Refactoring</b>: Started to split the <a href="../FAQ">FAQ</a> file in several parts in <a href="../FAQ.d/">FAQ.d/*</a></li>
  631. <li><b>Refactoring</b>: Split the <a href="../INSTALL">INSTALL</a> file in several parts in <a href="../INSTALL.d/">INSTALL.d/*</a></li>
  632. </ul>
  633. <ul>
  634. <li><b>1.607</b> (2014/11/14) Folders shown also in utf8.</li>
  635. <li><b>Caveat to upgrade on Unix!</b>: New <b>Unicode::String</b> Perl module dependency, for utf8 output. See the <a href="../INSTALL">INSTALL</a> file.</li>
  636. <li><b>Enhancement</b>: Added --skipemptyfolders to skip syncing empty host1 folders. They are not created on host2.</li>
  637. <li><b>Enhancement</b>: Windows exe now uses IO::SSL 2.002 instead of 1.98 (is it really an enhancement?).</li>
  638. <li><b>Usability</b>: Remove /x from regexes applied with --include and --exclude. Blanks no longer have to be explicit with \ or [ ].</li>
  639. <li><b>Usability</b>: Added utf8 output for folder names, protocol native utf7imap special characters are not user friendly readable</li>
  640. <li><b>Usability</b>: Moved foldersizes output after folders lists output.</li>
  641. <li><b>Usability</b>: Added total size transferred after each message copied.</li>
  642. <li><b>Usability</b>: After ETA, added number of total to be synced, as a denominator dddd after each message copied, like nnn/dddd
  643. where nnn is the number of messages copied. Before there was only nnn without /dddd.</li>
  644. <li><b>Bug fix</b>: Cache fix on Windows. File paths with brackets [] are special, they have to be escaped with glob.
  645. For example, [Gmail] must be written [[]Gmail[]].</li>
  646. <li><b>Bug fix</b>: Added several checks if IsUnconnected. Goal avoid imap commands while disconnected.
  647. Reconnexion would be better anyway.</li>
  648. </ul>
  649. <ul>
  650. <li><b>1.597</b> (2014/10/06) Small things</li>
  651. <li><b>Enhancement</b>: Added --nomixfolders to avoid merging folders that are considered different on host1 but the same on destination host2
  652. because of case sensitivities and insensitivities.</li>
  653. <li><b>Bug fix</b>: Fixed "imapsync doesn't see created folders in the listing of folder sizes at the end". (second time this bug shows up)</li>
  654. </ul>
  655. <ul>
  656. <li><b>1.592</b> (2014/05/22) Logging by default! (an internal feature now)</li>
  657. <li><b>Caveat to upgrade</b>: New <b>IO::Tee</b> Perl module dependency, for logging. See the <a href="../INSTALL">INSTALL</a> file.</li>
  658. <li><b>Windows upgrade</b>: Win32 binary is now distributed in a zip file with two batches scripts ready to use it.</li>
  659. <li><b>Enhancement</b>: Added logging by default in subdirectory <b>./LOG_imapsync/</b></li>
  660. <li><b>Enhancement</b>: <b>Added option --log turned on by default</b>. Use --nolog to disable logging.</li>
  661. <li><b>Enhancement</b>: Added option --logfile. Default is like ./LOG_imapsync/YYYY_MM_DD_HH_MM_SS_user2.txt
  662. where YYYY_MM_DD_HH_MM_SS is the launching date and time like 2014_05_20_23_45_10</li>
  663. <li><b>Enhancement</b>: Added option <b>--disarmreadreceipts</b> to fix resending read receipts on host2. A must with Exchange as host2.</li>
  664. <li><b>Enhancement</b>: Added FTGate support (no EXAMINE imap command used anymore).</li>
  665. <li><b>Usability</b>: Updated the code to easily switch on --noreleasecheck by default but allowing --releasecheck (some users want this feature).</li>
  666. <li><b>Usability</b>: Warn syncing messges will not be simulated when --dry mode is on and folder on host2 does not exist yet.</li>
  667. <li><b>Bug fix</b>: Make TLS works with last IO::Socket::SSL default value (Added SSL_verify_mode =&gt; 'SSL_VERIFY_NONE') in --tls mode.</li>
  668. <li><b>Bug fix</b>: Fixed bug when creating folders on host2 with --sep2=\\ (Lotus Notes).</li>
  669. <li><b>Bug fix</b>: Try to get folder size when a folder on host2 has the same name but with a different case
  670. like OLD_MAIL -&gt; old_mail. This avoids "does not exist" output.</li>
  671. </ul>
  672. <ul>
  673. <li><b>1.584</b> (2014/02/05)</li>
  674. <li><b>Enhancement</b>: Added --minmaxlinelength to select messages with long lines only.
  675. It helps to diagnostic Echange error on messages with lines longer than 9000 characters</li>
  676. <li><b>Enhancement</b>: Added --debugmaxlinelength</li>
  677. <li><b>Bug fix</b>: --ssl1 --tls2 was buggy because of default SSL_VERIFY_PEER.
  678. "Can not go to tls encryption on [localhost]:Unable to start TLS: Cannot determine peer hostname for verification..."</li>
  679. <li><b>Bug fix</b>: Check if going to tls is ok, exit otherwise with explicit error message.
  680. Thanks to Dennis Schridde for reporting this ugly bug that deserves this <a href="http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2014-2014">CVE-2014-2014</a>.</li>
  681. <li><b>Debug</b>: Print separator given by NAMESPACE even when --sep1 oe --sep2 is used.</li>
  682. <li><b>Debug</b>: Prints prefix given by NAMESPACE even when --prefix1 or --prefix2 is used.
  683. It is a preparation for advising not to use --prefix unless suggested.</li>
  684. </ul>
  685. <p><b>Good changes</b> made before, listed because <b>they can help</b>:
  686. </p>
  687. <ul>
  688. <li><b>Enhancement</b>: Added <b>--skipcrossduplicates</b> to avoid copying messages that are already copied in another folder, good <b>from Gmail to X</b>.</li>
  689. <li><b>Enhancement</b>: Added --debugcrossduplicates to print which messages (UIDs) are skipped with --skipcrossduplicates (and in what other folders they are).</li>
  690. <li><b>Enhancement</b>: Added --folderfirst string: sync this folder first. --folderfirst "Work" --folderfirst "Friends"</li>
  691. <li><b>Enhancement</b>: Added --folderlast string: sync this folder last. --folderlast "[Gmail]/All Mail" etc.</li>
  692. <li><b>Enhancement</b>: Added <b>--maxmessagespersecond</b> to limit messages tranfer rate and fix <b>Office365 throttle limitation</b> (use --maxmessagespersecond 4).</li>
  693. <li><b>Enhancement</b>: Added --maxbytespersecond to limit byte transfer rate.</li>
  694. <li><b>Enhancement</b>: Added --debugmemory option that prints memory consumption after each message is copied.</li>
  695. <li><b>Enhancement</b>: Added --authmech EXTERNAL.</li>
  696. <li><b>Enhancement</b>: Adapted behavior for allowing --maxdate --mindate with --noabletosearch.
  697. Use internat date instead of Date: header.</li>
  698. <li><b>Enhancement</b>: QQMail IMAP4Server success (with --noabletosearch option) </li>
  699. <li><b>Usability</b>: Apply same treatment to --delete2duplicates as --delete2.
  700. If --uidexpunge2 can be done, do it, else do --expunge2 (unless --nouidexpunge2 or --noexpunge2).</li>
  701. <li><b>Usability</b>: Added --timeout in the --help output. Default timeout is 120 seconds now
  702. (was nothing by imapsync, 600 with underlying modules).</li>
  703. <li><b>Enhancement/Bug fix</b>: Added --ssl1_SSL_version and --ssl2_SSL_version to force the SSL_version
  704. in case the default auto-negociation does not work. Example: <b>--ssl1 --ssl1_SSL_version SSLv3</b></li>
  705. <li><b>Enhancement</b>: Added option --messageidnodomain to fix Mailenable bug changing the domain part of Message-Id header, and avoid duplicates</li>
  706. <li><b>Enhancement</b>: Added option --syncflagsaftercopy to fix Mailenable bug not getting the flags with the APPEND</li>
  707. <li><b>Enhancement</b>: Added option <b>--maxlinelength</b> to skip messages whose max line length is over a number of bytes.
  708. Exchange 2013 and Office365 need <b>--maxlinelength 1000</b> (which is a RFC2822 must) to avoid disconnections.</li>
  709. <li><b>Usability</b>: Added --fixInboxINBOX, turned on by default, to map automatically Inbox INBOX folder names.</li>
  710. <li><b>Usability</b>: IMAP server removing consecutive spaces on the header part doesn't generate duplicates (MailEnable does that)</li>
  711. <li><b>Usability</b>: SSL_verify_mode 0 to avoid warning about Man-In-The-Middle.</li>
  712. <li><b>Enhancement</b>: Added XOAUTH authentication. Thanks to Eduardo Bortoluzzi Junior.</li>
  713. <li><b>Enhancement</b>: Added <b>--search1</b> and <b>--search2</b> to allow different searches on each host.</li>
  714. <li><b>Usability</b>: Added --delete1 as an alias for --delete</li>
  715. <li><b>Speed</b>: Option <b>--nocheckmessageexists is activated by default</b> since --checkmessageexists often slow down transfers too much.</li>
  716. <li><b>Usability</b>: Option --foldersizesatend is on if --foldersizes is on. Off if --nofoldersizesatend</li>
  717. <li><b>Usability</b>: Added <b>host2 minus host1 statistic</b>: number of messages and bytes.
  718. One difference at the start and one at the end.
  719. Useful to <b>detect quickly a difference between host2 and host1</b>.
  720. Need both --foldersizes and --foldersizesatend options (which are on by default).</li>
  721. <li><b>Usability</b>: Added <b>--foldersizesatend</b>.
  722. It gets the folders sizes at the end of the whole transfer.
  723. Turned on by default (use --nofoldersizesatend to turn it off).</li>
  724. <li><b>Enhancement</b>: Added option <b>--delete2duplicates</b>;
  725. it deletes messages in host2 that are duplicates.
  726. --delete2duplicates is on when --delete2 is set unless --nodelete2duplicates is set too.
  727. </li>
  728. <li><b>Enhancement</b>: Added option <b>--pidfilelocking</b>;
  729. it aborts imapsync, when just launched,
  730. in case another imapsync may be running.
  731. Turned off by default</li>
  732. <li><b>Usability</b>: Added option <b>--showpasswords</b>.
  733. it shows passwords on output instead of "MASKED".
  734. Turned off by default.
  735. Useful to restart a run by reading the log
  736. or to see what happen with special characters.
  737. </li>
  738. <li><b>Bug fix</b>: Added option <b>--fixslash2</b>
  739. to avoid the '<b>Invalid mailbox name</b>' error.
  740. It acts when --sep1 is character / and --sep2 is not character /
  741. and host1 folder name contains --sep2 characters.
  742. Turned on by default (--nofixslash2 to unable it).</li>
  743. <li><b>Enhancement</b>: Added option <b>--noabletosearch</b>
  744. to allow the listing of messages without the imap "SEARCH ALL" command.
  745. It's useful for playing with poor imap servers like <b>Softalk 7.6.4</b>
  746. (8.6 is fine with SEARCH ALL).</li>
  747. <li><b>Enhancement</b>: Added <b>--noexpungeaftereach</b>
  748. to speedup --delete --expunge from Gmail.</li>
  749. <li><b>Enhancement</b>: Added option <b>--nocheckmessageexists</b> to <b>speed up</b> with <b>Tobit imap server</b> as host1.</li>
  750. <li><b>Enhancement</b>: Added option --exitwhenover option <b>to avoid locking</b>
  751. when transfers exceed maximum limit.
  752. See for example <a href="https://support.google.com/a/answer/1071518?hl=en">this Gmail constraint</a>
  753. <ul>
  754. <li>imapsync ... --exitwhenover 2500000000 # 2.5GB if <b>host1 is Gmail</b></li>
  755. <li>imapsync ... --exitwhenover 500000000 # 500MB if <b>host2 is Gmail</b></li>
  756. </ul>
  757. </li>
  758. <li><b>Usability</b>: Default headers used to identify a message are like --useheader "Message-Id" --useheader "Received"
  759. (<b>Exchange compatibility</b> bu default).</li>
  760. <li><b>Enhancement</b>: Added option --addheader to fix the issue
  761. "ignored (no header so we ignore this message)" (on <b>Sent</b> folder usually).
  762. Thanks to Ameir Abdeldayem</li>
  763. <li><b>Enhancement</b>: Added --nofilterflags to check any STORE flags
  764. by ignoring PERMANENTFLAGS (Exchange tests)</li>
  765. </ul>
  766. <hr />
  767. <div>
  768. <a href="https://validator.w3.org/check?uri=referer">
  769. <img width="88" height="31" alt="Valid XHTML 1.0 Strict" src="../S/images/valid-xhtml10" />
  770. </a>
  771. <a href="https://jigsaw.w3.org/css-validator/check/referer">
  772. <img alt="CSS Valide !" src="../S/images/vcss-blue" style="border:0;width:88px;height:31px" />
  773. </a>
  774. <a href="https://www.anybrowser.org/campaign/">
  775. <img alt="Viewable With Any Browser" src="../S/images/ab_jlh.png" style="border:0;width:88px;height:31px" />
  776. </a>
  777. </div>
  778. <hr />
  779. <p>
  780. <!--#config timefmt="%D" -->
  781. <!--#config timefmt="%A %B %d, %Y" -->
  782. <b>This document last modified on <!--#echo var="LAST_MODIFIED" --></b>
  783. ($Id: news.shtml,v 1.87 2022/09/15 08:42:40 gilles Exp gilles $)<br />
  784. <a href="#TOP">Top of the page</a>
  785. </p>
  786. </body></html>