diff --git a/.docker/release/files/usr/local/include/application.ini b/.docker/release/files/usr/local/include/application.ini index 83d84894c..09a2447ec 100644 --- a/.docker/release/files/usr/local/include/application.ini +++ b/.docker/release/files/usr/local/include/application.ini @@ -69,10 +69,29 @@ allow_admin_panel = On hide_x_mailer_header = On admin_panel_host = "" admin_panel_key = "admin" + +; For example to allow all images use "img-src https:". More info at https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy#directives content_security_policy = "" + +; Report CSP errors to PHP and/or SnappyMail Log csp_report = Off + +; A valid cipher method from https://php.net/openssl_get_cipher_methods encrypt_cipher = "aes-256-cbc-hmac-sha1" +; Strict, Lax or None +cookie_samesite = "Strict" + +; Additional allowed Sec-Fetch combinations separated by ";". +; For example: +; * Allow iframe on same domain in any mode: dest=iframe,site=same-origin +; * Allow navigate to iframe on same domain: mode=navigate,dest=iframe,site=same-origin +; * Allow navigate to iframe on (sub)domain: mode=navigate,dest=iframe,site=same-site +; * Allow navigate to iframe from any domain: mode=navigate,dest=iframe,site=cross-site +; +; Default is "site=same-origin;site=none" +secfetch_allow = "" + [admin_panel] allow_update = Off @@ -93,7 +112,10 @@ cafile = "" capath = "" ; Location of client certificate file (pem format with private key) on local filesystem -client_cert = "" +local_cert = "" + +; This can help mitigate the CRIME attack vector. +disable_compression = On [capa] quota = On @@ -102,6 +124,11 @@ message_actions = On attachments_actions = On [login] +; If someone logs in without "@domain.tld", this value will be used +; When this value is HTTP_HOST, the $_SERVER["HTTP_HOST"] value is used. +; When this value is SERVER_NAME, the $_SERVER["SERVER_NAME"] value is used. +; When this value is gethostname, the gethostname() value is used. +; default_domain = "" ; Allow language selection on webmail login screen @@ -123,7 +150,7 @@ sign_me_auto = "DefaultOff" ; Enable plugin support enable = Off -; List of enabled plugins +; Comma-separated list of enabled plugins enabled_list = "" [defaults] @@ -145,6 +172,9 @@ mail_reply_same_folder = Off ; Enable logging enable = Off +; Path where log files will be stored +path = "" + ; Log messages of set RFC 5424 section 6.2.1 Severity level and higher (0 = highest, 7 = lowest). ; 0 = Emergency ; 1 = Alert @@ -208,6 +238,9 @@ enable = Off ; Enables caching in the system enable = On +; Path where cache files will be stored +path = "" + ; Additional caching key. If changed, cache is purged index = "v1" @@ -227,28 +260,16 @@ http_expires = 3600 server_uids = On [imap] -use_sort = On use_force_selection = Off -use_thread = On -use_move = Off use_expunge_all_on_delete = Off -body_text_limit = 555000 message_list_fast_simple_search = On -message_list_count_limit_trigger = 0 -message_list_date_filter = 0 message_list_permanent_filter = "" message_all_headers = Off -large_thread_limit = 50 -folder_list_limit = 200 show_login_alert = On -use_list_status = On -timeout = 300 -disable_metadata = Off [labs] cache_system_data = On date_from_headers = On -autocreate_system_folders = Off allow_message_append = Off login_fault_delay = 1 log_ajax_response_write_limit = 300 @@ -258,13 +279,8 @@ try_to_detect_hidden_images = Off use_app_debug_js = Off use_app_debug_css = Off smtp_show_server_errors = Off -smtp_timeout = 60 sieve_auth_plain_initial = On sieve_allow_fileinto_inbox = Off -sieve_timeout = 10 -sasl_allow_plain = On -sasl_allow_scram_sha = Off -sasl_allow_cram_md5 = Off mail_func_clear_headers = On mail_func_additional_parameters = Off folders_spec_limit = 50 @@ -289,5 +305,5 @@ dev_email = "" dev_password = "" [version] -current = "2.23.1" -saved = "Fri, 30 Sep 2022 12:34:56 +0000" +current = "2.24.0" +saved = "Sun, 18 Dec 2022 22:10:48 +0000" diff --git a/CHANGELOG.md b/CHANGELOG.md index f5d1c977b..74156d87e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,59 @@ +## 2.24.0 – 2022-12-22 + +### Added +- Option to enable additional account unread messages count +- Prevent godaddy click tracking +- Dark theme use `color-scheme: dark;` +- More imapsync.php CLI options and help + +### Changed +- MessageList now grouped/split per day + [#737](https://github.com/the-djmaze/snappymail/pull/737) +- Account switcher still shown when allow_additional_accounts is set to Off + [#280](https://github.com/the-djmaze/snappymail/pull/280) +- PHP classes use typed properties +- Speedup Contacts Suggestions handling +- Check SMTP SIZE + [#779](https://github.com/the-djmaze/snappymail/pull/779) + +### Fixed +- Handle multiple DKIM signatures authentication results +- Reload admin extensions on update +- SieveClient quoted string parsing failed +- Invalid Attachments (PDF) + [#466](https://github.com/the-djmaze/snappymail/pull/466) +- Email HTML images rendering issue + [#564](https://github.com/the-djmaze/snappymail/pull/564) +- "Server message: No supported SASL mechanism found, remote server wants:" in hMailServer + [#780](https://github.com/the-djmaze/snappymail/pull/780) + +### Removed +- Some unused plugin hooks to improve Action handling speed + + +## 2.23.1 – 2022-12-15 + +### Changed +- More JMAP RFC matching including role +- Speedup fetch all Folders/mailboxes +- Disable unused folder_list_limit +- Merge MailSo\Mail\Folder into MailSo\Imap\Folder and speedup process +- SnappyMail\Imap\Sync now matches folders based on JMAP role +- Added the new imapsync.php command line script for + [#744](https://github.com/the-djmaze/snappymail/pull/744) +- Added manual setting for 12/24h clock + [#760](https://github.com/the-djmaze/snappymail/pull/760) +- Add options to mark the message I'm viewing as unread and return to the inbox #766 + +### Fixed +- Extension menu shows only some available extensions #778 +- New solution for [#423](https://github.com/the-djmaze/snappymail/pull/423) due to [#774](https://github.com/the-djmaze/snappymail/pull/774) +- Avatars extension error on smartphone + [#764](https://github.com/the-djmaze/snappymail/pull/764) +- Don't fetch Unread count for main account +- CSS .e-checkbox.material-design invisible on show/hide + + ## 2.23.0 – 2022-12-08 ### Added diff --git a/README.md b/README.md index 0c7d0e5eb..721e41f10 100644 --- a/README.md +++ b/README.md @@ -141,26 +141,26 @@ RainLoop 1.17 vs SnappyMail |js/* |RainLoop |Snappy | |--------------- |--------: |--------: | -|admin.js |2.170.153 | 83.917 | -|app.js |4.207.787 | 412.197 | +|admin.js |2.170.153 | 83.828 | +|app.js |4.207.787 | 410.179 | |boot.js | 868.735 | 2.351 | |libs.js | 658.812 | 193.682 | |sieve.js | 0 | 86.018 | |polyfills.js | 334.608 | 0 | |serviceworker.js | 0 | 285 | -|TOTAL |8.240.095 | 778.450 | +|TOTAL |8.240.095 | 776.343 | |js/min/* |RainLoop |Snappy |RL gzip |SM gzip |RL brotli |SM brotli | |--------------- |--------: |--------: |------: |------: |--------: |--------: | -|admin.min.js | 256.831 | 41.827 | 73.606 | 13.858 | 60.877 | 12.432 | -|app.min.js | 515.367 | 190.374 |139.456 | 63.219 |110.485 | 54.234 | +|admin.min.js | 256.831 | 41.783 | 73.606 | 13.857 | 60.877 | 12.426 | +|app.min.js | 515.367 | 189.103 |139.456 | 63.033 |110.485 | 54.075 | |boot.min.js | 84.659 | 1.474 | 26.998 | 907 | 23.643 | 733 | |libs.min.js | 584.772 | 92.082 |180.901 | 34.144 |155.182 | 30.670 | |sieve.min.js | 0 | 41.909 | 0 | 10.476 | 0 | 9.461 | |polyfills.min.js | 32.837 | 0 | 11.406 | 0 | 10.175 | 0 | -|TOTAL user |1.217.635 | 283.930 |358.761 | 98.270 |299.485 | 85.637 | -|TOTAL user+sieve |1.217.635 | 325.839 |358.761 |108.746 |299.485 | 95.098 | -|TOTAL admin | 959.099 | 135.383 |292.911 | 48.909 |249.877 | 43.835 | +|TOTAL user |1.217.635 | 282.659 |358.761 | 98.084 |299.485 | 85.478 | +|TOTAL user+sieve |1.217.635 | 324.568 |358.761 |108.560 |299.485 | 94.939 | +|TOTAL admin | 959.099 | 135.339 |292.911 | 48.908 |249.877 | 43.829 | For a user its around 70% smaller and faster than traditional RainLoop. @@ -189,8 +189,8 @@ For a user its around 70% smaller and faster than traditional RainLoop. |css/* |RainLoop |Snappy |RL gzip |SM gzip |SM brotli | |------------ |-------: |------: |------: |------: |--------: | -|app.css | 340.331 | 82.348 | 46.946 | 17.074 | 14.652 | -|app.min.css | 274.947 | 66.376 | 39.647 | 15.048 | 13.200 | +|app.css | 340.331 | 82.512 | 46.946 | 17.112 | 14.693 | +|app.min.css | 274.947 | 66.506 | 39.647 | 15.086 | 13.243 | |boot.css | | 1.326 | | 664 | 545 | |boot.min.css | | 1.071 | | 590 | 474 | |admin.css | | 30.277 | | 6.901 | 5.999 | diff --git a/dev/Styles/User/MessageList.less b/dev/Styles/User/MessageList.less index 9dafa2600..6a606b195 100644 --- a/dev/Styles/User/MessageList.less +++ b/dev/Styles/User/MessageList.less @@ -31,7 +31,7 @@ html.rl-no-preview-pane { .day { background:rgba(128,128,128,0.2); - font-size: 90%; + font-size: 12px; line-height: 2; text-align: center; text-transform: capitalize; diff --git a/dev/Styles/User/MessageView.less b/dev/Styles/User/MessageView.less index 1cd2055ea..d9d6c454f 100644 --- a/dev/Styles/User/MessageView.less +++ b/dev/Styles/User/MessageView.less @@ -117,6 +117,7 @@ html.rl-no-preview-pane { border-radius: var(--border-radius, 5px) var(--border-radius, 5px) 0 0; padding: 10px; flex-shrink: 0; + word-break: keep-all; .fontastic + span { margin-left: 0.25em; @@ -180,10 +181,6 @@ html.rl-no-preview-pane { white-space: nowrap; width: 1%; } - - td + td { - word-break: break-all; - } } .hasVirus { diff --git a/dev/View/User/MailBox/MessageList.js b/dev/View/User/MailBox/MessageList.js index 63a27d9f4..da52c3267 100644 --- a/dev/View/User/MailBox/MessageList.js +++ b/dev/View/User/MailBox/MessageList.js @@ -146,21 +146,22 @@ export class MailMessageList extends AbstractViewRight { mobileCheckedStateHide: () => ThemeStore.isMobile() ? !MessagelistUserStore.hasChecked() : 1, - // Idea for https://github.com/the-djmaze/snappymail/issues/737 listByDay: () => { - let list = [], current, today = Ymd(new Date()), lang = doc.documentElement.lang; + let list = [], current, today = Ymd(new Date()), + rtf = new Intl.RelativeTimeFormat(doc.documentElement.lang, { numeric: "auto" }); MessagelistUserStore.forEach(msg => { let date = (new Date(msg.dateTimeStampInUTC() * 1000)), ymd = Ymd(date); if (!current || ymd != current.ymd) { if (today == ymd) { - date = new Intl.RelativeTimeFormat(lang, { numeric: "auto" }).format(0, 'day'); + date = rtf.format(0, 'day'); } else if (today - 1 == ymd) { - date = new Intl.RelativeTimeFormat(lang, { numeric: "auto" }).format(-1, 'day'); + date = rtf.format(-1, 'day'); // } else if (today - 7 < ymd) { // date = date.format('l'); +// date = date.format({dateStyle: 'full'},0,LanguageStore.hourCycle()); } else { -// date = date.format('LL',0,LanguageStore.hourCycle()); +// date = date.format({dateStyle: 'medium'},0,LanguageStore.hourCycle()); date = date.format({dateStyle: 'full'},0,LanguageStore.hourCycle()); } current = { diff --git a/integrations/cloudron/DESCRIPTION.md b/integrations/cloudron/DESCRIPTION.md index 7fa5109db..b741dfc3d 100644 --- a/integrations/cloudron/DESCRIPTION.md +++ b/integrations/cloudron/DESCRIPTION.md @@ -1,4 +1,4 @@ -This app packages SnappyMail 2.23.1. +This app packages SnappyMail 2.24.0. SnappyMail is a simple, modern, lightweight & fast web-based email client. diff --git a/integrations/cloudron/Dockerfile b/integrations/cloudron/Dockerfile index 735d9b541..5a1271e19 100644 --- a/integrations/cloudron/Dockerfile +++ b/integrations/cloudron/Dockerfile @@ -4,7 +4,7 @@ RUN mkdir -p /app/code WORKDIR /app/code # If you change the extraction below, be sure to test on scaleway -VERSION=2.23.1 +VERSION=2.24.0 RUN wget https://github.com/the-djmaze/snappymail/releases/download/v${VERSION}/snappymail-${VERSION}.zip -O /tmp/snappymail.zip && \ unzip /tmp/snappymail.zip -d /app/code && \ rm /tmp/snappymail.zip && \ diff --git a/integrations/nextcloud/snappymail/appinfo/info.xml b/integrations/nextcloud/snappymail/appinfo/info.xml index 33a3e5438..0ebe26e19 100644 --- a/integrations/nextcloud/snappymail/appinfo/info.xml +++ b/integrations/nextcloud/snappymail/appinfo/info.xml @@ -3,7 +3,7 @@ snappymail SnappyMail SnappyMail Webmail - 2.23.1 + 2.24.0 agpl SnappyMail, RainLoop Team, Nextgen-Networks, Tab Fitts, Nathan Kinkade, Pierre-Alain Bandinelli script[] = "'strict-dynamic'";` ### main.default-response - params: - string $sActionName - array &$aResponse + Obsolete, use json.after-{actionname} ### main.default-response-data - params: - string $sActionName - mixed &$mResult + Obsolete, use json.after-{actionname} ### main.default-response-error-data - params: - string $sActionName - int &$iErrorCode - string &$sErrorMessage + Obsolete, use json.after-{actionname} ### main.fabrica params: