2017-05-23 03:16:20 +08:00
|
|
|
<div align="center">
|
2020-09-23 23:23:04 +08:00
|
|
|
<a href="https://github.com/the-djmaze/snappymail">
|
2021-08-17 21:34:15 +08:00
|
|
|
<img src="https://snappymail.eu/static/img/logo-256x256-white.png">
|
2017-05-23 03:16:20 +08:00
|
|
|
</a>
|
|
|
|
<br>
|
2020-09-23 23:23:04 +08:00
|
|
|
<h1>SnappyMail</h1>
|
2017-05-23 03:16:20 +08:00
|
|
|
<br>
|
2023-11-20 22:01:26 +08:00
|
|
|
|
2023-11-24 06:44:01 +08:00
|
|
|
[![github-actions](https://github.com/the-djmaze/snappymail/actions/workflows/docker.yml/badge.svg)](https://github.com/the-djmaze/snappymail/actions/workflows/docker.yml)
|
2023-11-22 03:53:28 +08:00
|
|
|
[![docker-image-size](https://img.shields.io/docker/image-size/djmaze/snappymail/latest)](https://hub.docker.com/r/djmaze/snappymail/tags)
|
2023-11-20 22:01:26 +08:00
|
|
|
|
2017-05-23 03:16:20 +08:00
|
|
|
<p>
|
2020-09-26 16:20:24 +08:00
|
|
|
Simple, modern, lightweight & fast web-based email client.
|
2017-05-23 03:16:20 +08:00
|
|
|
</p>
|
|
|
|
<p>
|
2020-09-23 23:23:04 +08:00
|
|
|
The drastically upgraded & secured fork of <a href="https://github.com/RainLoop/rainloop-webmail">RainLoop Webmail Community edition</a>.
|
|
|
|
</p>
|
|
|
|
<p>
|
2020-09-26 18:25:57 +08:00
|
|
|
We thank the RainLoop Team for making a great PHP 5 product that was good in the past.
|
2020-09-23 23:23:04 +08:00
|
|
|
</p>
|
|
|
|
<p>
|
|
|
|
Up to date system requirements, snappy performance, simple installation and upgrade, no database required
|
|
|
|
- all these make SnappyMail a good choice.
|
2017-05-23 03:16:20 +08:00
|
|
|
</p>
|
|
|
|
<h2></h2>
|
|
|
|
<br>
|
|
|
|
</div>
|
2016-08-17 06:01:20 +08:00
|
|
|
|
2020-09-23 23:23:04 +08:00
|
|
|
For more information about the product, check [snappymail.eu](https://snappymail.eu/).
|
2016-08-17 06:01:20 +08:00
|
|
|
|
2020-09-23 23:23:04 +08:00
|
|
|
Information about installing the product, check the [wiki page](https://github.com/the-djmaze/snappymail/wiki/Installation-instructions).
|
2020-08-09 04:52:51 +08:00
|
|
|
|
2023-12-27 00:42:56 +08:00
|
|
|
And don't forget to read the whole [Wiki](https://github.com/the-djmaze/snappymail/wiki).
|
2016-08-17 06:01:20 +08:00
|
|
|
|
|
|
|
## License
|
|
|
|
|
2020-09-23 23:23:04 +08:00
|
|
|
**SnappyMail** is released under
|
2022-09-02 03:16:52 +08:00
|
|
|
**GNU AFFERO GENERAL PUBLIC LICENSE Version 3 (AGPL)**.
|
|
|
|
http://www.gnu.org/licenses/agpl-3.0.html
|
2016-08-17 06:01:20 +08:00
|
|
|
|
2024-01-03 00:44:34 +08:00
|
|
|
Copyright (c) 2020 - 2024 SnappyMail
|
2022-09-02 03:37:32 +08:00
|
|
|
Copyright (c) 2013 - 2022 RainLoop
|
2020-03-10 00:04:17 +08:00
|
|
|
|
|
|
|
## Modifications
|
|
|
|
|
2020-09-23 23:23:04 +08:00
|
|
|
This fork of RainLoop has the following changes:
|
2020-03-10 00:04:17 +08:00
|
|
|
|
2022-11-22 19:05:21 +08:00
|
|
|
* Privacy/GDPR friendly (no: Social, Gravatar, Facebook, Google, Twitter, DropBox, X-Mailer)
|
2020-03-10 00:04:17 +08:00
|
|
|
* Admin uses password_hash/password_verify
|
2020-07-15 20:45:11 +08:00
|
|
|
* Auth failed attempts written to syslog
|
2020-07-29 17:29:59 +08:00
|
|
|
* Added Fail2ban instructions
|
2021-10-29 19:09:12 +08:00
|
|
|
* ES2018
|
2022-11-04 19:02:11 +08:00
|
|
|
* PHP 7.4+ required
|
2020-03-10 00:04:17 +08:00
|
|
|
* PHP mbstring extension required
|
2021-03-04 19:16:50 +08:00
|
|
|
* PHP replaced pclZip with PharData and ZipArchive
|
2021-10-29 19:09:12 +08:00
|
|
|
* Dark mode
|
2021-02-24 18:01:10 +08:00
|
|
|
* Added option to remove background/font colors from messages for real "dark mode"
|
2020-07-15 20:45:11 +08:00
|
|
|
* Removed BackwardCapability (class \RainLoop\Account)
|
2021-03-04 19:16:50 +08:00
|
|
|
* Removed ChangePassword (re-implemented as plugin)
|
2020-07-15 20:45:11 +08:00
|
|
|
* Removed POP3 support
|
|
|
|
* Removed background video support
|
|
|
|
* Removed Sentry (Application Monitoring and Error Tracking Software)
|
2021-10-29 19:09:12 +08:00
|
|
|
* Removed Spyc yaml
|
2022-11-22 19:05:21 +08:00
|
|
|
* Removed OwnCloud
|
2020-07-15 20:45:11 +08:00
|
|
|
* Replaced gulp-uglify with gulp-terser
|
2020-03-10 00:04:17 +08:00
|
|
|
* CRLF => LF line endings
|
2020-09-06 17:13:43 +08:00
|
|
|
* Embed boot.js and boot.css into index.html
|
2022-11-22 19:05:21 +08:00
|
|
|
* Removal of old JavaScript code (things are native these days)
|
2020-09-13 20:13:16 +08:00
|
|
|
* Added modified [Squire](https://github.com/neilj/Squire) HTML editor as replacement for CKEditor
|
2022-05-22 05:24:50 +08:00
|
|
|
* Updated [Sabre/VObject](https://github.com/sabre-io/vobject)
|
2020-09-17 06:02:35 +08:00
|
|
|
* Split Admin specific JavaScript code from User code
|
2022-03-14 22:42:05 +08:00
|
|
|
* Split Sieve specific JavaScript code from User code
|
2020-10-29 00:12:33 +08:00
|
|
|
* JSON reviver
|
|
|
|
* Better memory garbage collection management
|
2020-11-10 03:14:04 +08:00
|
|
|
* Added serviceworker for Notifications
|
2021-01-22 00:37:41 +08:00
|
|
|
* Added advanced Sieve scripts editor
|
|
|
|
* Slimmed down language files
|
2021-01-26 06:50:39 +08:00
|
|
|
* Replaced webpack with rollup
|
2021-02-17 23:31:29 +08:00
|
|
|
* No user-agent detection (use device width)
|
2021-03-04 19:16:50 +08:00
|
|
|
* Added support to load plugins as .phar
|
2021-04-20 02:44:12 +08:00
|
|
|
* Replaced old Sabre library
|
|
|
|
* AddressBook Contacts support MySQL/MariaDB utf8mb4
|
2021-07-16 22:24:07 +08:00
|
|
|
* Added [Fetch Metadata Request Headers](https://www.w3.org/TR/fetch-metadata/) checks
|
2021-08-10 21:24:46 +08:00
|
|
|
* Reduced excessive DOM size
|
2021-10-29 19:09:12 +08:00
|
|
|
* Support [Kolab groupware](https://kolab.org/)
|
2023-12-04 09:03:57 +08:00
|
|
|
* Support many more [IMAP RFC's](https://snappymail.eu/comparison#IMAP)
|
2021-11-12 17:00:59 +08:00
|
|
|
* Support Sodium and OpenSSL for encryption
|
2022-02-07 19:29:19 +08:00
|
|
|
* Much better PGP support
|
2021-10-29 19:09:12 +08:00
|
|
|
|
2020-07-15 20:45:11 +08:00
|
|
|
|
2021-07-26 17:48:53 +08:00
|
|
|
### Supported browsers
|
2020-07-27 23:40:00 +08:00
|
|
|
|
2021-07-26 17:48:53 +08:00
|
|
|
This fork uses downsized/simplified versions of scripts and has no support for Internet Explorer nor Edge Legacy.
|
|
|
|
Supported are:
|
|
|
|
|
2022-09-02 03:37:32 +08:00
|
|
|
* Chrome 80+
|
|
|
|
* Edge 80+
|
2022-05-05 15:59:05 +08:00
|
|
|
* Firefox 78+
|
2022-09-02 03:37:32 +08:00
|
|
|
* Opera 67+
|
|
|
|
* Safari 13.1+
|
2020-07-28 17:23:06 +08:00
|
|
|
|
2020-07-23 22:06:16 +08:00
|
|
|
|
2021-07-26 17:48:53 +08:00
|
|
|
### Removal of old JavaScript
|
|
|
|
|
|
|
|
The result is faster and smaller download code (good for mobile networks).
|
2020-07-24 02:50:20 +08:00
|
|
|
|
2021-01-26 06:50:39 +08:00
|
|
|
* Added dev/prototype.js for some additional features
|
2020-09-21 05:15:06 +08:00
|
|
|
* Modified Jua.js to be without jQuery
|
2020-08-31 22:33:40 +08:00
|
|
|
* Replaced Autolinker with simple https/email detection
|
2021-10-29 19:09:12 +08:00
|
|
|
* Replaced momentToNode with proper HTML5 `<time>`
|
2020-08-31 22:33:40 +08:00
|
|
|
* Replaced resize listeners with ResizeObserver
|
|
|
|
* Replaced bootstrap.js with native drop-in replacement
|
2020-09-03 18:51:15 +08:00
|
|
|
* Replaced dev/Common/ClientStorageDriver/* with Web Storage Objects polyfill
|
2020-09-21 05:15:06 +08:00
|
|
|
* Replaced *Ajax with *Fetch classes because we use the Fetch API, not jQuery.ajax
|
2021-07-29 17:43:47 +08:00
|
|
|
* Replaced [knockoutjs](https://github.com/knockout/knockout) 3.4 with a modified 3.5.1
|
2020-09-21 05:15:06 +08:00
|
|
|
* Replaced knockout-sortable with native HTML5 drag&drop
|
2021-02-07 06:37:53 +08:00
|
|
|
* Replaced simplestatemanager with CSS @media
|
|
|
|
* Replaced inputosaurus with own code
|
2020-09-26 16:20:24 +08:00
|
|
|
* Replaced keymaster with own shortcuts handler
|
2022-11-22 19:05:21 +08:00
|
|
|
* Replaced OpenPGP.js v2 with OpenPGP.js v5
|
2022-10-10 16:53:04 +08:00
|
|
|
* Removed ifvisible.js
|
2020-07-31 22:13:38 +08:00
|
|
|
* Removed pikaday
|
|
|
|
* Removed underscore
|
|
|
|
* Removed polyfills
|
|
|
|
* Removed Modernizr
|
|
|
|
* Removed nanoscroll
|
2020-09-22 00:54:41 +08:00
|
|
|
* Removed lightgallery
|
|
|
|
* Removed jQuery
|
2020-09-21 22:05:04 +08:00
|
|
|
* Removed jquery-ui
|
2020-07-31 22:13:38 +08:00
|
|
|
* Removed jquery-scrollstop
|
|
|
|
* Removed jquery-mousewheel
|
|
|
|
* Removed matchmedia-polyfill
|
2020-10-15 16:45:18 +08:00
|
|
|
* Removed momentjs (use Intl)
|
2020-08-13 19:16:08 +08:00
|
|
|
* Removed opentip (use CSS)
|
2020-08-25 02:56:14 +08:00
|
|
|
* Removed non-community (aka Prem/Premium/License) code
|
2021-10-29 19:09:12 +08:00
|
|
|
* Removed ProgressJS
|
2020-07-31 22:13:38 +08:00
|
|
|
|
2020-09-30 22:10:01 +08:00
|
|
|
|
2022-09-02 03:37:32 +08:00
|
|
|
RainLoop 1.17 vs SnappyMail
|
2020-09-30 22:10:01 +08:00
|
|
|
|
2020-11-10 03:14:04 +08:00
|
|
|
|js/* |RainLoop |Snappy |
|
|
|
|
|--------------- |--------: |--------: |
|
2024-01-22 22:11:44 +08:00
|
|
|
|admin.js |2.170.153 | 80.563 |
|
|
|
|
|app.js |4.207.787 | 410.974 |
|
2023-02-25 02:47:39 +08:00
|
|
|
|boot.js | 868.735 | 4.142 |
|
2024-01-22 22:11:44 +08:00
|
|
|
|libs.js | 658.812 | 192.606 |
|
|
|
|
|sieve.js | 0 | 84.707 |
|
2022-09-02 03:37:32 +08:00
|
|
|
|polyfills.js | 334.608 | 0 |
|
2020-11-10 03:14:04 +08:00
|
|
|
|serviceworker.js | 0 | 285 |
|
2024-01-22 22:11:44 +08:00
|
|
|
|TOTAL |8.240.095 | 773.277 |
|
2021-01-27 19:02:37 +08:00
|
|
|
|
2021-02-01 21:34:24 +08:00
|
|
|
|js/min/* |RainLoop |Snappy |RL gzip |SM gzip |RL brotli |SM brotli |
|
|
|
|
|--------------- |--------: |--------: |------: |------: |--------: |--------: |
|
2024-01-22 22:11:44 +08:00
|
|
|
|admin.min.js | 256.831 | 39.461 | 73.606 | 13.218 | 60.877 | 11.841 |
|
|
|
|
|app.min.js | 515.367 | 187.193 |139.456 | 63.375 |110.485 | 54.428 |
|
2023-02-25 02:47:39 +08:00
|
|
|
|boot.min.js | 84.659 | 2.084 | 26.998 | 1.202 | 23.643 | 1.003 |
|
2024-01-22 22:11:44 +08:00
|
|
|
|libs.min.js | 584.772 | 92.780 |180.901 | 34.489 |155.182 | 30.953 |
|
|
|
|
|sieve.min.js | 0 | 41.164 | 0 | 10.365 | 0 | 9.359 |
|
2022-09-02 03:37:32 +08:00
|
|
|
|polyfills.min.js | 32.837 | 0 | 11.406 | 0 | 10.175 | 0 |
|
2024-01-22 22:11:44 +08:00
|
|
|
|TOTAL user |1.217.635 | 282.057 |358.761 | 99.066 |299.485 | 86.384 |
|
|
|
|
|TOTAL user+sieve |1.217.635 | 323.221 |358.761 |109.431 |299.485 | 95.743 |
|
|
|
|
|TOTAL admin | 959.099 | 134.325 |292.911 | 48.909 |249.877 | 43.797 |
|
2021-05-19 21:58:37 +08:00
|
|
|
|
2023-12-09 05:24:04 +08:00
|
|
|
For a user it is around 69% smaller and faster than traditional RainLoop.
|
2020-08-31 22:33:40 +08:00
|
|
|
|
|
|
|
### CSS changes
|
|
|
|
|
2021-01-27 19:02:37 +08:00
|
|
|
* Solve jQuery removed "features" with native css code
|
2021-02-07 06:37:53 +08:00
|
|
|
* Themes work in mobile mode
|
|
|
|
* Bugfix invalid/conflicting css rules
|
2021-02-17 23:31:29 +08:00
|
|
|
* Use flexbox
|
2022-11-22 19:05:21 +08:00
|
|
|
* Use border-box
|
2021-07-29 17:43:47 +08:00
|
|
|
* Split app.css to have separate admin.css
|
2021-02-17 23:31:29 +08:00
|
|
|
* Remove oldschool 'float'
|
2021-02-19 04:06:19 +08:00
|
|
|
* Remove unused css
|
2020-08-31 22:33:40 +08:00
|
|
|
* Removed html.no-css
|
|
|
|
* Removed dev/Styles/Cmd.less
|
|
|
|
* Removed dev/Styles/Scroll.less
|
|
|
|
* Removed Internet Explorer from normalize.css
|
|
|
|
* Removed node_modules/opentip/css/opentip.css
|
|
|
|
* Removed node_modules/pikaday/css/pikaday.css
|
2022-01-28 03:54:27 +08:00
|
|
|
* Removed unused vendors/bootstrap/less/*
|
2020-08-31 22:33:40 +08:00
|
|
|
* Removed vendors/jquery-nanoscroller/nanoscroller.css
|
|
|
|
* Removed vendors/jquery-letterfx/jquery-letterfx.min.css
|
|
|
|
* Removed vendors/Progress.js/minified/progressjs.min.css
|
2021-02-07 06:37:53 +08:00
|
|
|
* Removed gulp-autoprefixer
|
2020-07-31 22:13:38 +08:00
|
|
|
|
2020-07-30 18:23:11 +08:00
|
|
|
|
2021-02-01 21:34:24 +08:00
|
|
|
|css/* |RainLoop |Snappy |RL gzip |SM gzip |SM brotli |
|
2021-07-21 02:53:11 +08:00
|
|
|
|------------ |-------: |------: |------: |------: |--------: |
|
2023-12-27 00:42:56 +08:00
|
|
|
|app.css | 340.331 | 84.484 | 46.946 | 17.627 | 15.110 |
|
|
|
|
|app.min.css | 274.947 | 67.910 | 39.647 | 15.541 | 13.547 |
|
2021-07-21 02:53:11 +08:00
|
|
|
|boot.css | | 1.326 | | 664 | 545 |
|
|
|
|
|boot.min.css | | 1.071 | | 590 | 474 |
|
2023-12-14 07:08:41 +08:00
|
|
|
|admin.css | | 30.641 | | 7.028 | 6.111 |
|
|
|
|
|admin.min.css | | 24.742 | | 6.352 | 5.599 |
|
2020-07-28 23:20:14 +08:00
|
|
|
|
2022-01-28 03:54:27 +08:00
|
|
|
### PGP
|
|
|
|
RainLoop uses the old OpenPGP.js v2
|
|
|
|
SnappyMail v2.12 uses OpenPGP.js v5, GnuPG and Mailvelope.
|
|
|
|
SnappyMail is able to use and generate ECDSA and EDDSA keys, where RainLoop does not.
|
|
|
|
|
2022-01-31 18:54:13 +08:00
|
|
|
Since SnappyMail tries to achieve the best mobile experience, it forked OpenPGP.js to strip it down.
|
|
|
|
* remove all unused Node.js
|
|
|
|
* remove all old browsers support
|
|
|
|
See https://github.com/the-djmaze/openpgpjs for development
|
|
|
|
|
2022-01-28 03:54:27 +08:00
|
|
|
|OpenPGP |RainLoop |Snappy |RL gzip |SM gzip |RL brotli |SM brotli |
|
|
|
|
|--------------- |--------: |--------: |------: |-------: |--------: |--------: |
|
2024-01-22 22:11:44 +08:00
|
|
|
|openpgp.min.js | 330.742 | 540.792 |102.388 | 167.971 | 84.241 | 138.010 |
|
2022-01-28 03:54:27 +08:00
|
|
|
|openpgp.worker | 1.499 | | 824 | | 695 | |
|
|
|
|
|
2020-07-23 22:06:16 +08:00
|
|
|
|
2020-09-09 23:29:14 +08:00
|
|
|
### Squire vs CKEditor
|
2020-10-20 23:39:00 +08:00
|
|
|
The [Squire](https://github.com/neilj/Squire) implementation is not 100% compatible yet, but it shows the massive overhead of CKEditor.
|
2020-09-10 19:48:25 +08:00
|
|
|
|
|
|
|
Still TODO:
|
|
|
|
|
|
|
|
* support for tables (really needed?!?)
|
2020-09-09 23:29:14 +08:00
|
|
|
|
|
|
|
| | normal | min | gzip | min gzip |
|
|
|
|
|-------- |-------: |-------: |------: |--------: |
|
2021-09-01 18:21:08 +08:00
|
|
|
|squire | 122.321 | 41.906 | 31.867 | 14.330 |
|
2020-09-09 23:29:14 +08:00
|
|
|
|ckeditor | ? | 520.035 | ? | 155.916 |
|
|
|
|
|
2020-09-11 20:40:13 +08:00
|
|
|
CKEditor including the 7 asset requests (css,language,plugins,icons) is 633.46 KB / 180.47 KB (gzip).
|
2020-09-09 23:29:14 +08:00
|
|
|
|
2021-03-25 20:35:15 +08:00
|
|
|
To use the old CKEditor, you must install the plugin.
|