## 2.38.2 – 2024-10-09
### Fixed
- error '$index is not defined' in Settings > Accounts
  [#1797](https://github.com/the-djmaze/snappymail/issues/1797)


## 2.38.1 – 2024-10-08

### Added
- Admin - Extensions search filter
- Options to unset current font family and size
  [#1726](https://github.com/the-djmaze/snappymail/issues/1726)
- Option to allow insecure cryptkey
  [#1746](https://github.com/the-djmaze/snappymail/issues/1746)
- Save vCard FN property
  [#1761](https://github.com/the-djmaze/snappymail/issues/1761)
- Docker Nginx should listen on IPv6 addresses in addition to IPv4
  [#1770](https://github.com/the-djmaze/snappymail/issues/1770)
- Full-screen Message View on Double-Click
  [#1787](https://github.com/the-djmaze/snappymail/issues/1787)

### Changed
- Use the custom Squire as submodule vendors/squire2
- Disallow noembed and noframes HTML elements
- Keep 1 space between HTML elements in compressed templates
- Squire: sanitizeToDOMFragment now uses cleanHTML()
- Squire: improved handling of BR elements
  [#1389](https://github.com/the-djmaze/snappymail/issues/1389)
- Nextcloud border-radius by @gnilebein
  [#1790](https://github.com/the-djmaze/snappymail/pull/1790)
- Compose window sentFolder handling for
  [#1793](https://github.com/the-djmaze/snappymail/pull/1793)
- Update Portuguese by @ner00
- Update Polish by @tinola
- Update French by @hguilbert
- Update Portuguese (Brazil) by @mstolf

### Fixed
- Composer dialog scroll got broken in v2.28
- Composer dialog "from" triangle button wrong position due to font changes
- Admin - Config `search` should be ko.observable() not ko.observableArray()
- Squire: paste images
  [#1389](https://github.com/the-djmaze/snappymail/issues/1389)
- Domain whitelist failures on login
  [#1706](https://github.com/the-djmaze/snappymail/issues/1706)
- Sieve parse errors
- Sieve support `index` was not optional for
  [#1709](https://github.com/the-djmaze/snappymail/issues/1709)
- Pagination problem for large mailbox after 2.36.1
  [#1716](https://github.com/the-djmaze/snappymail/issues/1716)
- Undefined constant "LOG_ERROR"
  [#1754](https://github.com/the-djmaze/snappymail/issues/1754)
- Search Filter Capital "B" not working
  [#1780](https://github.com/the-djmaze/snappymail/issues/1780)
- PHP 8.4: Implicitly nullable parameter declarations deprecated


## 2.38.0 – 2024-09-16

### Added
- Remove `tel:` links when converting HTML to plain
  [#1724](https://github.com/the-djmaze/snappymail/issues/1724)
- Convert HTML to Markdown instead of plain, by using [Turndown](https://github.com/mixmark-io/turndown)
  [#1604](https://github.com/the-djmaze/snappymail/issues/1604)
- Check HTMLInputElement.validity() for
  [#1733](https://github.com/the-djmaze/snappymail/issues/1733)

### Changed
- Use a modified [Squire 2.3.2](https://github.com/the-djmaze/Squire/commits/snappymail/)
- cleanHtml use allowedTags instead of disallowedTags and improved CSS handling
- Update Portuguese by @ner00

### Fixed
- mXSS exploit found by SonarSource
  [CVE-2024-45800](https://github.com/the-djmaze/snappymail/security/advisories/GHSA-2rq7-79vp-ffxm)
- Call to a member function Email() on null
  [#1706](https://github.com/the-djmaze/snappymail/issues/1706)
- IMAP capabilities via IMAP Proxy
  [#1725](https://github.com/the-djmaze/snappymail/issues/1725)
- Messages on page setting is not validated against 999 max
  [#1733](https://github.com/the-djmaze/snappymail/issues/1733)


## 2.37.3 – 2024-08-27

### Added
- Mark images with width=1 as tracking pixel
- Show warning in Admin -> About when PHP runs in 32bit
- Edit ACL rules
  [#157](https://github.com/the-djmaze/snappymail/issues/157)
- Show GnuPG version for
  [#1560](https://github.com/the-djmaze/snappymail/issues/1560)
- Make sure only scalar values are allowed in $_ENV for
  [#1560](https://github.com/the-djmaze/snappymail/issues/1560)
- Change minimum new mail check interval
  [#1678](https://github.com/the-djmaze/snappymail/issues/1678)
- Sieve editor does not support "index" extension
  [#1709](https://github.com/the-djmaze/snappymail/issues/1709)

### Changed
- Improved domain autoconfig interaction
- MS autodiscover priorities DNS over subdomain
- Simplify sieve scripts list
  [#1675](https://github.com/the-djmaze/snappymail/issues/1675)
- Handling of (token) errors due to
  [#1706](https://github.com/the-djmaze/snappymail/issues/1706)
- Sabre/Xml to v4.0.5
- Update Chinese by @Artoria2e5
- Update French by @hguilbert

### Fixed
- Thread sorting visible after disabling the imap capability
  [#1574](https://github.com/the-djmaze/snappymail/issues/1574)
- Creating new message impossible as long as a draft exists?
  [#1710](https://github.com/the-djmaze/snappymail/issues/1710)
- InvalidToken error at login
  [#1706](https://github.com/the-djmaze/snappymail/issues/1706)

### Nextcloud
- Force Nextcloud personal language by default
  [#1428](https://github.com/the-djmaze/snappymail/issues/1428)


## 2.37.2 – 2024-08-13

### Added
- Validate Fetch JSON response

### Fixed
- PATH_INFO bug due to Office365 OAuth login
- Prevent logout loop on error

### Nextcloud
- Failed loading due to Office365 OAuth2 attempt
  [#1703](https://github.com/the-djmaze/snappymail/issues/1703)


## 2.37.1 – 2024-08-12

### Fixed
- Gulp v5 broke the fonts

### Nextcloud
- Support v30


## 2.37.0 – 2024-08-12

### Added
- JavaScript event `rl-vm-visible`
- Detailed error message on account switch failure for
  [#1594](https://github.com/the-djmaze/snappymail/issues/1594)
- Workarounds for Microsoft OAuth2 (currently requires Apache AcceptPathInfo)
  [#1645](https://github.com/the-djmaze/snappymail/issues/1645)
- Support "mark for deletion"
  [#1657](https://github.com/the-djmaze/snappymail/issues/1657) by @smsoft-ru
- Invoke "Update Identity" pop up right after login (when not initialized)
  [#1689](https://github.com/the-djmaze/snappymail/issues/1689)
- Keyboard shortcut for "Swap default (background) color"
  [#1690](https://github.com/the-djmaze/snappymail/issues/1690)

### Changed
- Updated gulp to v5
- Replaced vulnerable gulp-header with gulp-append-prepend
- Removed abandoned vulnerable rollup-plugin-html
- Align save button in admin security settings
- Made registerProtocolHandler('mailto') optional by activating at Settings -> General
- Improved InvalidToken handling for
  [#1653](https://github.com/the-djmaze/snappymail/issues/1653)
- Cleanup localizations
- Update French by @hguilbert
- Update German by @tkasch
- Update Polish by @tinola
- Update Portuguese by @ner00

### Fixed
- prevent multiple afterShow() and afterHide() due to `transitionend` on multiple CSS properties
- Attempt to read property "smimeSigned" on null
- Refreshing mail list doesn't update current message
  [#1654](https://github.com/the-djmaze/snappymail/issues/1654)
- Deletion of CACHE folder causing error
  [#1660](https://github.com/the-djmaze/snappymail/issues/1660)
- Multiple line breaks are not displayed
  [#1666](https://github.com/the-djmaze/snappymail/issues/1666)
- RainLoop\Exceptions\ClientException::__construct(): Argument #2 ($oPrevious) must be of type ?Throwable, string given
  [#1686](https://github.com/the-djmaze/snappymail/issues/1686)
- SpamAssassin Division by zero
  [#1694](https://github.com/the-djmaze/snappymail/issues/1694)
- Failed to parse RFC 2822 date '6 Jul 2024 16:42:09 +0200'
  [#1694](https://github.com/the-djmaze/snappymail/issues/1694)
- Fix capabilities when THREAD is disabled
  [#1698](https://github.com/the-djmaze/snappymail/pull/1698) by @akhil1508

### Nextcloud
- Failed loading due to incorrect `app_path`
- Bugfix language detection
- Allow multi-account in nc with oauth login
  [#1699](https://github.com/the-djmaze/snappymail/pull/1699) by @akhil1508


## 2.36.4 – 2024-06-25

### Added
- Customize private key passphrase expiration interval
  [#1545](https://github.com/the-djmaze/snappymail/discussions/1545)
- AdvancedSearch support for filtering mails before a given date
  [#1606](https://github.com/the-djmaze/snappymail/pull/1606) by @codiflow
- Control valid spam and virus headers
  [#1607](https://github.com/the-djmaze/snappymail/issues/1607)
- Remember S/MIME private Key without function
  [#1611](https://github.com/the-djmaze/snappymail/issues/1611)
- Resize compose dialog
- Magnetic theme
  [#1637](https://github.com/the-djmaze/snappymail/pull/1637) by @TheCuteFoxxy

### Changed
- Improved signing messages by allowing to choose between the options
- Improved language detection code
- More detailed Decrypt errors
- Update French by @hguilbert
- Update Polish by @tinola
- Update Portuguese by @ner00
- Update Spanish by @huloza

### Fixed
- Default language error
- Undefined $sEmail in DoAdminDomainMatch
- Handling Autocrypt header failed on `=`
  [#1608](https://github.com/the-djmaze/snappymail/issues/1608)
- Blank lines are inserted when editing draft
  [#1609](https://github.com/the-djmaze/snappymail/issues/1609)
- Workaround Cyrus MAILBOXID bug (disable OBJECTID capability by default due to impact)
  [#1640](https://github.com/the-djmaze/snappymail/issues/1640)
- Workaround HTML with multiple body elements or MIME with multiple text/html
  [#1641](https://github.com/the-djmaze/snappymail/issues/1641)

### Nextcloud
- OIDC stay logged in
  [#1620](https://github.com/the-djmaze/snappymail/pull/1620) by @avinash-0007


## 2.36.3 – 2024-05-27

### Changed
- UserAuth prevent plugin errors (like the Nextcloud plugin did)

### Fixed
- Undefined variable $aTokenData
  [#1567](https://github.com/the-djmaze/snappymail/issues/1567)


## 2.36.2 – 2024-05-26

### Added
- "copy to" action in menu's for
  [#1559](https://github.com/the-djmaze/snappymail/issues/1559)
- Log signal info for
  [#1569](https://github.com/the-djmaze/snappymail/issues/1569)
- OpenPGP.js automatically import backup keys from server

### Changed
- Improved "remember me" cookie handling
- Update Basque by @Thadah
- Update Portuguese by @ner00

### Fixed
- "Account already exists"
  [#1561](https://github.com/the-djmaze/snappymail/issues/1561)
- Properly escape path separator in tar.php file list regex
  [#1562](https://github.com/the-djmaze/snappymail/pull/1562) by @sevmonster
- Prevent mkdir() error
  [#1565](https://github.com/the-djmaze/snappymail/issues/1565)
- SCRAM Exception when trying to log in to SMTP
  [#1575](https://github.com/the-djmaze/snappymail/issues/1575)
- Error when redirected back to instance after Gmail OAuth
  [#1580](https://github.com/the-djmaze/snappymail/issues/1580)
- Uncaught TypeError: hasPublicKeyForEmails(...).then is not a function
  [#1589](https://github.com/the-djmaze/snappymail/issues/1589)
- Undefined variable $sFilename
- GPG/PGP exec() return false handling

### Nextcloud
- OIDC login active again
  [#1572](https://github.com/the-djmaze/snappymail/pull/1572) by @avinash-0007


## 2.36.1 – 2024-04-23

### Added
- Autoconfig detect through DNS SRV (RFC 6186 & 8314) and disable MX
- Have I Been Pwned class to check breached passwords and email addresses
- Handle RFC 5987 in Content-Disposition header
- Ignore text/x-amp-html
- Show SMTP error to user
  [#1521](https://github.com/the-djmaze/snappymail/issues/1521)
- OAuth2 for login using gmail (and others)

### Changed
- logMask all AUTHENTICATE requests
- ErrorTip use white-space: pre
- Simplify LoginProcess handling
- ES2020 everywhere (require Safari 13.1)
- Modified Squire to be more in line with v2.2.8
- CSS set min-width for .attachmentParent and .flagParent to line them up
- cPanel use extension login-cpanel instead of login-remote
- Improved login credentials handling
- Speedup Knockout a bit and removed `with($context)` scope
- Update Belarusian by @spoooyders
- Update Chinese by @mayswind
- Update French by @hguilbert
- Update Polish by @tinola
- Update Portuguese by @ner00

### Fixed
- Content encoding and type detection in JavaScript could fail due to case-sensitivity.
- Extensions set logger failed
- GnuPG check open_basedir and if shell_exec is disabled
  [#1385](https://github.com/the-djmaze/snappymail/issues/1385)
  [#1496](https://github.com/the-djmaze/snappymail/issues/1496)
  [#1555](https://github.com/the-djmaze/snappymail/issues/1555)
- Hide pagination when search result has no messages
- Prevent mbstring error before setup.php
- Prevent MessagesPerPage Infinity
  [#1540](https://github.com/the-djmaze/snappymail/issues/1540)
- Reseal CryptKey failed
  [#1543](https://github.com/the-djmaze/snappymail/issues/1543)

### Nextcloud
- Add an occ command to set up the login settings
  [#1552](https://github.com/the-djmaze/snappymail/issues/1552)


## 2.36.0 – 2024-03-18

### Added
- Allow setting the supported THREAD algorithm
- Icon to system folders
- Remove remembered password after 15 minutes of inactivity
  [#1142](https://github.com/the-djmaze/snappymail/issues/1142)
- Swap background and text color for unreadable text on dark background
  [#1486](https://github.com/the-djmaze/snappymail/issues/1486)
- Generate TOTP code at ?Admin -> Security
  [#1501](https://github.com/the-djmaze/snappymail/issues/1501)
- Button to change S/MIME private key passphrase
  [#1505](https://github.com/the-djmaze/snappymail/issues/1505)
- Belarusian
  [#1512](https://github.com/the-djmaze/snappymail/pull/1512) by @spoooyders
- Log some domain idn_to_ascii issues
  [#1513](https://github.com/the-djmaze/snappymail/issues/1513)

### Changed
- On folder/mailbox rename, also rename all children instead of reloading all
- Seal MainAccount CryptKey and on error ask old login passphrase to reseal key.
- Moved cache drivers outside core into extensions
- Sieve always allow fileinto INBOX
  [#1510](https://github.com/the-djmaze/snappymail/issues/1510)
- Moved application.ini `sieve_auth_plain_initial` to per domain config
- Languages use rfc5646, by using the shortest ISO 639 code by default
- Update French by @hguilbert
- Update Portuguese by @ner00

### Fixed
- On folder/mailbox rename, the old fullName must be removed from cache
- On folder/mailbox rename, the checkable option was not renamed
- Sort accounts drag & drop
- S/MIME encrypted and opaque signed not visible
  [#1450](https://github.com/the-djmaze/snappymail/issues/1450)
- Wrong last UID of thread
  [#1507](https://github.com/the-djmaze/snappymail/issues/1507)
- Creation of dynamic property SnappyMail\DAV\Client::$HTTP
  [#1509](https://github.com/the-djmaze/snappymail/issues/1509)
- "Download as ZIP" fails for messages
  [#1514](https://github.com/the-djmaze/snappymail/issues/1514)
- SMTP "Authentication failed" when IMAP uses `shortLogin` and SMTP not
  [#1517](https://github.com/the-djmaze/snappymail/issues/1517)


## 2.35.4 – 2024-03-16

### Added
- \SnappyMail\IDN::toAscii()

### Changed
- OpenPGP.js to v5.11.1
- punycode.js lowercase domain names
- application.ini `login_lowercase` removed and now configurable per domain JSON `lowerLogin`
- Update Portuguese by @ner00

### Fixed
- Raise JS TypeEroor "toLowerCase" after update
  [#1491](https://github.com/the-djmaze/snappymail/issues/1491)
- Call to undefined function shell_exec
  [#1496](https://github.com/the-djmaze/snappymail/issues/1496)
- Download attachments as ZIP doesn't work for PGP encrypted mail
  [#1499](https://github.com/the-djmaze/snappymail/issues/1499)
- Importing or downloading a PGP public key attachment from a PGP encrypted message doesn't work
  [#1500](https://github.com/the-djmaze/snappymail/issues/1500)
- VCard PHP Notice: Undefined index: ENCODING

### Nextcloud
- Changed stored password handling
- Can't login from nextcloud with 2.35.3 bug Nextcloud
  [#1490](https://github.com/the-djmaze/snappymail/issues/1490)


## 2.35.3 – 2024-03-12

### Added
- GnuPG can be disabled
- Missing strings for localization inside identity popup (Cryptography > S/MIME)
  [#1458](https://github.com/the-djmaze/snappymail/issues/1458)
- Automatically verify PGP and S/MIME signed messages
- TNEFDecoder for
  [#1012](https://github.com/the-djmaze/snappymail/discussions/1012)
- RTF to HTML converter for
  [#1012](https://github.com/the-djmaze/snappymail/discussions/1012)
- Polyfill for PHP ctype
  [#1250](https://github.com/the-djmaze/snappymail/issues/1250)

### Changed
- `new Error()` to `Error()`
- Reduce KnockoutJS footprint by removing unused code
- CSS reposition rainloopErrorTip location
- Improved error handling on PGP and S/MIME decrypt
- Improved OpenPGP.js import keys
- Use Identity S/MIME key and certificate from server instead of POST
- application.ini `[webmail]language_admin` to `[admin_panel]language`
- application.ini `[security]admin_panel_host` to `[admin_panel]host`
- application.ini `[security]admin_panel_key` to `[admin_panel]key`
- Drop deprecated Domain::SetConfig()
- Internationalized domain names are now handled as punycode
- Cacher->Get() can now return NULL
- Update French by @hguilbert
- Update Polish by @tinola
- Update Portuguese by @ner00

### Fixed
- Handling of Internationalized Domain Names in several areas
- Decrypt error message
- Stalwart ManageSieve Error 352 when getting Filters
  [#1455](https://github.com/the-djmaze/snappymail/issues/1455)
- Nextcloud V25+ theme slightly broken
  [#1463](https://github.com/the-djmaze/snappymail/issues/1463)
- PGP decryption fails with "Not armored text"
  [#1462](https://github.com/the-djmaze/snappymail/issues/1462)
- AUTH_BASIC falling through as AUTH_BEARER; change AUTH_BEARER to a different value
  [#1461](https://github.com/the-djmaze/snappymail/issues/1461)
- SetPassword expects \SnappyMail\SensitiveString
- Crash on importing corrupt OpenPGP keys
- Crash on old browsers instead of showing error
- Ignore popups on logoutReload()
  [#1467](https://github.com/the-djmaze/snappymail/issues/1467)
- Custom SASLMechanisms fail in IMAP when the connection is secure
  [#1484](https://github.com/the-djmaze/snappymail/pull/1484) by @botsarenthuman


## 2.35.2 – 2024-02-27

### Added
- GnuPG error handling
- Missing strings for localization inside identity popup (Cryptography > S/MIME)
  [#1458](https://github.com/the-djmaze/snappymail/issues/1458)

### Changed
- Update Portuguese by @ner00

### Fixed
- Drop support for gnupg PECL extension as it fails with "no passphrase" issues
- Error 352 when getting Filters
  [#1455](https://github.com/the-djmaze/snappymail/issues/1455)

### Nextcloud
- SetPassword(): Argument #1 must be of type SensitiveString, string given
  [#1456](https://github.com/the-djmaze/snappymail/issues/1456)


## 2.35.1 – 2024-02-26

### Added
- Search functionality in Admin -> Config
- Cache S/MIME passphrases when "remember" is checked
- Import S/MIME certificate popup
- pre-verify S/MIME opaque signed messages so we have a body to view
- Sort PGP keys and S/MIME certificates on email address
- Optionally use existing private key to generate S/MIME certificate

### Changed
- Better handling to detect which PGP or S/MIME sign/encrypt to use
- Improved StorageType handling
- Cleanup and improved Capa handling
- OPEN_PGP should be OPENPGP as it is one word
- Use get_debug_type() instead of gettype()
- Require OpenSSL due to S/MIME
- AbstractProvider::IsActive() is now an abstract method and must be defined in child class
- Make better use of SnappyMail\SensitiveString
- Update Polish translation by @tinola

### Fixed
- Verify S/MIME signatures got broken allong the way while implementing this
- Generate S/MIME self-signed certificate failed to keep existing private key
- MIME parser RegExp didn't escape boundary which caused issues
- TypeError: b64Encode(...).match(...) is null on saving compose draft
- Fix timestampToString() for future dates


## 2.35.0 – 2024-02-20

### Added
- S/MIME support
  [#259](https://github.com/the-djmaze/snappymail/issues/259)

### Changed
- Disable IMAP METADATA by default (hardly used)
- Update Polish translation by @tinola
- Rename CSS .openpgp-control to .crypto-control
- Renamed some methods in PHP

### Fixed
- When moving a folder/mailbox check for parent delimiter
- Mask `passphrase` in the logs for PHP < 8.2
- Added some missing translations
- Sign messages using PGP
- Check for CONDSTORE or QRESYNC to get the HIGHESTMODSEQ
- Unable to login on certain IMAP server since 2.34.2
  [#1438](https://github.com/the-djmaze/snappymail/issues/1438)

### Nextcloud
- Save as .eml
  [#1425](https://github.com/the-djmaze/snappymail/issues/1425)


## 2.34.2 – 2024-02-14

### Fixed
- Message was sent but not saved to sent items folder
  [#1432](https://github.com/the-djmaze/snappymail/issues/1432)
- Login with scram failed
  [#1433](https://github.com/the-djmaze/snappymail/issues/1433)


## 2.34.1 – 2024-02-13

### Added
- Autocrypt support
  [#342](https://github.com/the-djmaze/snappymail/issues/342)
- Load the mailboxes/folders of all namespaces (other users, global, shared, etc.)
- Load keys from server into OpenPGP.js
  [#973](https://github.com/the-djmaze/snappymail/issues/973)
- Import PGP Keys from remote key servers
- Sort Inbox Folders with Unread Messages First
  [#1427](https://github.com/the-djmaze/snappymail/issues/1427)
- Define JMAP FolderModel.myRights
- Identity Management: add identity display name
  [#1405](https://github.com/the-djmaze/snappymail/issues/1405)
- Identity Management: add per-identity "sent" folder
  [#1404](https://github.com/the-djmaze/snappymail/issues/1404)
- Some support for JSON-LD / Structured Email
  [#1422](https://github.com/the-djmaze/snappymail/issues/1422)
- Domain Autoconfig and Microsoft's autodiscover (and also as extension/plugin)
- View MMS messages that are received via email
  [#1294](https://github.com/the-djmaze/snappymail/issues/1294)
- Draft code for S/MIME
  [#259](https://github.com/the-djmaze/snappymail/issues/259)

### Changed
- Many OpenPGP improvements
  [#89](https://github.com/the-djmaze/snappymail/issues/89)
- Allow CSP connect-src CORS for keys.openpgp.org to directly fetch PGP keys
- Improved handling of visible folders
- KnockoutJS Replace some ko.exportSymbol('*') in favour of ko['*']
- KnockoutJS use Symbol for isObservableArray()
- Simplify generating folderListVisible
- Drop the bSearchSecretWords param from logger
- Transparent background for text
  [#1412](https://github.com/the-djmaze/snappymail/issues/1412)
- Enable OpenPGP.js by default at install
- Added folder edit popup for improved IMAP ACL Support
  [#157](https://github.com/the-djmaze/snappymail/issues/157)
- Process all IMAP namespaces
- Update Polish by @tinola
- Update Portuguese by @ner00

### Fixed
- Make time_zone a select list due to PEBKAC
- Workaround Outlook generated double spacing
  [#1415](https://github.com/the-djmaze/snappymail/issues/1415)
- HTML Parser is not picking up the full Unsubscribe URL in the attached text file
  [#1225](https://github.com/the-djmaze/snappymail/issues/1225)
- Contacts - it auto "Select All", after entry delete
  [#1411](https://github.com/the-djmaze/snappymail/issues/1411)
- Message header parsing issue
  [#1403](https://github.com/the-djmaze/snappymail/issues/1403)
- apple-touch-icon should not be transparent
  [#1408](https://github.com/the-djmaze/snappymail/issues/1408)
- Creation of dynamic property is deprecated
  [#1409](https://github.com/the-djmaze/snappymail/issues/1409)
- Ask/send readReceipt was broken
- OpenPGP public key can not be removed anymore after importing private key of subkey
  [#1384](https://github.com/the-djmaze/snappymail/issues/1384)
- KnockoutJS failed to output text '0'
- JavaScript friendlySize() failed on 0
- Workaround Dovecot `PREAUTH [CAPABILITY (null)]` issue
- Workaround disabled ACL could cause "Disconnected: Too many invalid IMAP commands"

### Nextcloud
- Save multiple as .eml
  [#1425](https://github.com/the-djmaze/snappymail/issues/1425)
- Disabled support for Nextcloud OpenID Connect
  [#1420](https://github.com/the-djmaze/snappymail/issues/1420)


## 2.33.0 – 2024-01-22

### Added
- Feature to use the SQLite AddressBook per login account instead of global (on by default).
- Return all fetched messages headers in JSON.

### Changed
- Docker hub use Alpine linux 3.18.5 and PHP 8.2
- Some InvalidArgumentException to the better suited ValueError
- Removed some unused KnockoutJS code
- KnockoutJS drop unused rateLimit method
- Cleanup some data-bind=""
- Drop the disabled KnockoutJS twoWayBindings
- Drop support for KnockoutJS _ko_property_writers and for two-way binding they must be observables
- Login form use method="POST" to prevent uri exposure when javascript fails
- Merge code to generate MIME PGP parts and MIME Plain parts
- SMTP sendRequestWithCheck for future support of RFC's
- Cleanup mime header handling

### Fixed
- Sorting not supported since 2.32.0
  [#1373](https://github.com/the-djmaze/snappymail/issues/1373)
- FILE_ON_SAVING_ERROR is not defined
  [#1379](https://github.com/the-djmaze/snappymail/issues/1379)
- Saving EML files with same subject result in only saving latest email
  [#1381](https://github.com/the-djmaze/snappymail/issues/1381)
- Some Sieve parser issues
- Handling of RainLoop Sieve script
- Sieve rfc5429 RejectCommand and ErejectCommand
- KnockoutJS title:value was removed, use attr:{title:value}
- dataBaseUpgrade() always runs on sqlite and pgsql
- Message was sent but not saved to sent items folder
  [#1397](https://github.com/the-djmaze/snappymail/issues/1397)
- DKIM `pass` detection sometimes failed


## 2.32.0 – 2023-12-26

### Added
- Run full GetUids() in background when message_list_limit is set
- MessageListThreadsMap as background task when message_list_limit is set
- Properly set CACHEDIR.TAG
- Sending group email to all contact addresses
  [#1286](https://github.com/the-djmaze/snappymail/pull/1286) by @rezaei92

### Changed
- Default IMAP message_list_limit to 10000
- DoMessageCopy() return toFolder hash/etag
- Improved Squire WYSIWYG
- Sort real attachments and inline attachments for
  [#1360](https://github.com/the-djmaze/snappymail/issues/1360)
- Nextcloud Theme fixes and improvements
  [#1363](https://github.com/the-djmaze/snappymail/pull/1363) by @hampoelz
- Improve display of attachments
  [#1361](https://github.com/the-djmaze/snappymail/issues/1361)
- Rename messageVisibility to messageVisible
- All CSS font-size to % instead of px
- Flip source code view of .eml attachments
  [#1332](https://github.com/the-djmaze/snappymail/issues/1332)

### Fixed
- Folders array_filter(): Argument 1 must be of type array, null given
- At upgrade set `static` and `themes` folder to 0755
- Preview tooltip shows "null" when PREVIEW capability is disabled

### Nextcloud
- Improved language handling
  [#1362](https://github.com/the-djmaze/snappymail/pull/1362) by @avinash-0007
- FilterLanguage had wrong parameter order
- Use NextcloudV25+ theme by default


## 2.31.0 – 2023-12-08

### Added
- PHP Hook `filter.language` to allow remote language selection

### Changed
- Cleaner language detection
- Get Squire in sync with v2.2.5 and some bugfixes
- Update French by @Cwpute
- Squire: drop support for iPod

### Fixed
- Call to undefined method FolderMyRights()
  [#1344](https://github.com/the-djmaze/snappymail/issues/1344)
- NO Mailbox does not exist, or must be subscribed to")
  [#1354](https://github.com/the-djmaze/snappymail/issues/1354)
- Flag indicators are added to wrong message
  [#1347](https://github.com/the-djmaze/snappymail/pull/1347) by @SergeyMosin
- Squire: issue when using the enter key in a reply window
  [#1296](https://github.com/the-djmaze/snappymail/issues/1296)
- Squire: crash on cut/delete range

### Nextcloud
- Use language as defined in Nextcloud settings
  [#1293](https://github.com/the-djmaze/snappymail/issues/1293)
- Plugin Call to undefined method RainLoop\Model\MainAccount::ImapConnectAndLoginHelper()
- SnappyMail failed due to Nextcloud Symfony polyfill


## 2.30.0 – 2023-12-04

### Added
- SnappyMail\SensitiveString class to secure passwords
- Allow to disable all IMAP features through Admin -> Domain
- Setting to open mails in a tab or new window
  [#951](https://github.com/the-djmaze/snappymail/issues/951)
- Fully support IMAP PREVIEW
  [#1338](https://github.com/the-djmaze/snappymail/issues/1338)
- Disable "Mark message as read after", offer manual toggle
  [#1289](https://github.com/the-djmaze/snappymail/issues/1289)
- A "Move to" button inside message view as an icon/button and in the drop down menu.
  [#1295](https://github.com/the-djmaze/snappymail/issues/1295)
- Support for IMAP WITHIN
- Support \noinferiors to disallow creating subfolders
- A test due to Failed loading libs.min.js
  [#358](https://github.com/the-djmaze/snappymail/issues/358),
  [#862](https://github.com/the-djmaze/snappymail/issues/862),
  [#890](https://github.com/the-djmaze/snappymail/issues/890),
  [#895](https://github.com/the-djmaze/snappymail/issues/895),
  [#1238](https://github.com/the-djmaze/snappymail/issues/1238),
  [#1320](https://github.com/the-djmaze/snappymail/issues/1320)

### Changed
- Split PHP 8 polyfills from include.php
- Disable snappymail/v/0.0.0/static/.htaccess for now as many servers have issues with it
- Merged all Domain `disable_*` settings into `disabled_capabilities:[]`
- Prioritize LIST-EXTENDED over LSUB (LSUB deprecated in IMAP4rev2)
- Removed unused ImapClient::IsSupported()
- Removed obsolete `$_ENV['SNAPPYMAIL_NEXTCLOUD']`
- Removed unused Plugin->replaceTemplate()
- Removed openDropdownTrigger

### Fixed
- Move to button does not work
  [#1328](https://github.com/the-djmaze/snappymail/issues/1328)
- Mark passwords as sensitive information
  [#1343](https://github.com/the-djmaze/snappymail/issues/1343)
- Account sSmtpPassword wrong value
- SCRAM sign-in failed
  [#1245](https://github.com/the-djmaze/snappymail/issues/1245)
- Squire generates to many `<div><br></div>`
  [#1339](https://github.com/the-djmaze/snappymail/issues/1339)
- Creation of dynamic property SnappyMail\Stream\ZipEntry::$compression is deprecated
- `json.after-*` hooks didn't send $aResponse as recursive array
- Sieve: Move to folder with trailing space does not work
  [#1329](https://github.com/the-djmaze/snappymail/issues/1329)
- Squire: cantFocusEmptyTextNodes var is always undefined
  [#1337](https://github.com/the-djmaze/snappymail/issues/1337)
- Squire: Remove redundant <span> after replacing styles
- Squire: Handle empty nodes in moveRangeBoundariesDownTree
- Theme "Nextcloud V25+" can't be translated
  [#1331](https://github.com/the-djmaze/snappymail/issues/1331)


## 2.29.4 – 2023-11-21

### Fixed
- Contacts not work
  [#1319](https://github.com/the-djmaze/snappymail/issues/1319)


## 2.29.3 – 2023-11-21

### Added
- Docker Hub image
  [#965](https://github.com/the-djmaze/snappymail/pull/965) by @leojonathanoh

### Changed
- Sabre/VObject 4.5.4 and Sabre/Xml 4.0.4
  [#1311](https://github.com/the-djmaze/snappymail/issues/1311)

### Fixed
- '#/mailbox/folder/mUID/search' uri/route handling
  [#1301](https://github.com/the-djmaze/snappymail/pull/1301) by @SergeyMosin
- "Remember me" doesn't work when browser is closed
  [#1313](https://github.com/the-djmaze/snappymail/issues/1313)
- Blank email displayed when "Prefer HTML to plain text" is unchecked and the message is html only
  [#1302](https://github.com/the-djmaze/snappymail/issues/1302)
- Parent folder of Sub folder not useable.
  [#1008](https://github.com/the-djmaze/snappymail/issues/1008)
- Large detailed header don't display body
  [#1284](https://github.com/the-djmaze/snappymail/issues/1284)

### Nextcloud
- Improvements for Install / update issues #929
  [#929](https://github.com/the-djmaze/snappymail/issues/929)
- Should use language as defined in cloud settings #1293
  [#1293](https://github.com/the-djmaze/snappymail/issues/1293)


## 2.29.2 – 2023-11-14

### Added
- Show size of folders in folders list #1303
  [#1303](https://github.com/the-djmaze/snappymail/issues/1303)

### Fixed
- Configuration failed when using special chars in MySQL password #1308
  [#1308](https://github.com/the-djmaze/snappymail/issues/1308)
- With email open, "delete" doesn't delete #1274
  [#1274](https://github.com/the-djmaze/snappymail/issues/1274)
- Fix threading view in Thunderbird (others?)
  [#1304](https://github.com/the-djmaze/snappymail/pull/1304) by @tkasch


## 2.29.1 – 2023-10-02

### Fixed
- Some small messages list bugs


## 2.29.0 – 2023-10-02

### Added
- Modern UI / Nextcloud Theme
  [#629](https://github.com/the-djmaze/snappymail/pull/629) by @hampoelz
- "Add/Edit signature" label to PopupsIdentity.html
  [#1248](https://github.com/the-djmaze/snappymail/pull/1248) by @SergeyMosin
- use calendar icon in message list for messages with '.ics' or 'text/calendar' attachments by @SergeyMosin
  [#1248](https://github.com/the-djmaze/snappymail/pull/1248)
- Show unseen message count when the message list is threaded
  [#1248](https://github.com/the-djmaze/snappymail/pull/1248) by @SergeyMosin
- in mobile mode hide folders(left) panel when a folder is clicked
  [#1248](https://github.com/the-djmaze/snappymail/pull/1248) by @SergeyMosin
- spellcheck the subject when 'allowSpellcheck' setting is true
  [#1248](https://github.com/the-djmaze/snappymail/pull/1248) by @SergeyMosin
- 'collapse_blockquotes', 'allow_spellcheck' and 'mail_list_grouped' to admin settings ('defaults' section)
  [#1248](https://github.com/the-djmaze/snappymail/pull/1248) by @SergeyMosin
- Browser support for autocompleting TOTP code
  [#1251](https://github.com/the-djmaze/snappymail/issues/1251)

### Changed
- URL strip tracking for
  [#1225](https://github.com/the-djmaze/snappymail/issues/1225)
- Color picker use color blind palette "Tableau 10" by Maureen Stone by default
  [#1199](https://github.com/the-djmaze/snappymail/issues/1199)
- Draft code to improve mobile breakpoints
  [#1150](https://github.com/the-djmaze/snappymail/issues/1150)
- address input: space character can trigger '_parseValue' if the email address looks complete
  [#1248](https://github.com/the-djmaze/snappymail/pull/1248) by @SergeyMosin
- if applicable set '\\answered' or '$forwarded' flag after a message is sent so the proper icon is shown in the message list view
  [#1248](https://github.com/the-djmaze/snappymail/pull/1248) by @SergeyMosin

### Fixed
- CHARSET is not valid in UTF8 mode
  [#1230](https://github.com/the-djmaze/snappymail/issues/1230)
- Spam score is always "acceptable"
  [#1228](https://github.com/the-djmaze/snappymail/issues/1228)
- Undefined constant PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT
  [#1205](https://github.com/the-djmaze/snappymail/issues/1205)
- Fetch controller.abort(reason) handling
  [#1220](https://github.com/the-djmaze/snappymail/issues/1220)
- "Request failed" on message move
  [#1220](https://github.com/the-djmaze/snappymail/issues/1220)
- Unwrapped text nodes attached to squire._root
  [#1234](https://github.com/the-djmaze/snappymail/pull/1234) by @SergeyMosin
- Extra wrapper div is added in Squire every time a Draft is open (or closed) after save.
  [#1208](https://github.com/the-djmaze/snappymail/issues/1208)
- foreach() argument must be of type array|object
  [#1237](https://github.com/the-djmaze/snappymail/issues/1237)
- `<font>` tag 'style' is lost in replies
  [#1248](https://github.com/the-djmaze/snappymail/pull/1248) by @SergeyMosin
- unseen indicator is not shown in thread view when 'listGrouped' settings is false
  [#1248](https://github.com/the-djmaze/snappymail/pull/1248) by @SergeyMosin
- TOTP plugin is dependent on ctype
  [#1250](https://github.com/the-djmaze/snappymail/issues/1250)

### Nextcloud
- iFrame mode: click on unified search result opens inner iFrame
  [#1248](https://github.com/the-djmaze/snappymail/pull/1248) by @SergeyMosin
- set 'smremember' cookie if 'sign_me_auto' is set to 'DefaultOn' when using 'snappymail-autologin*', otherwise nextcloud users need to re-login when the browser is re-opened
  [#1248](https://github.com/the-djmaze/snappymail/pull/1248) by @SergeyMosin
- Improve UX of "Put in Calendar" option in plugin
  [#1259](https://github.com/the-djmaze/snappymail/pull/1259) by @theronakpatel


## 2.28.4 – 2023-07-10

### Added
- application.ini msg_default_action
  [#1204](https://github.com/the-djmaze/snappymail/pull/1204) by @SergeyMosin
- application.ini view_show_next_message
  [#1204](https://github.com/the-djmaze/snappymail/pull/1204) by @SergeyMosin
- application.ini view_images
  [#1204](https://github.com/the-djmaze/snappymail/pull/1204) by @SergeyMosin
- nextcloud add ability to include custom php file in InstallStep migration
  [#1197](https://github.com/the-djmaze/snappymail/pull/1197) by @SergeyMosin
- Support plugin for Squire editor
  [#1192](https://github.com/the-djmaze/snappymail/issues/1192)

### Changed
- only show 'Add "domain.tld" as an application for mailto links?' message after login (firefox shows the message on every reload otherwise).
  [#1204](https://github.com/the-djmaze/snappymail/issues/1204)
- Convert getPdoAccessData() : array to a RainLoop\Pdo\Settings object instance
- New bidi buttons to Squire editor
  [#1200](https://github.com/the-djmaze/snappymail/pull/1200) by @rezaei92

### Fixed
- Undefined constant PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT
  [#1205](https://github.com/the-djmaze/snappymail/issues/1205)
- 'reloadTime' function result is passed into 'setInterval' instead of the function
  [#1204](https://github.com/the-djmaze/snappymail/pull/1204) by @SergeyMosin
- UNKNOWN-CTE Invalid data in MIME part
  [#1186](https://github.com/the-djmaze/snappymail/issues/1186)


## 2.28.3 – 2023-06-22

### Added
- Attachments in "new window" view
  [#1166](https://github.com/the-djmaze/snappymail/issues/1166)

### Changed
- Update Portuguese by @ner00
- Update French by @hguilbert

### Fixed
- Some emails with inline CSS break the UI
  [#1187](https://github.com/the-djmaze/snappymail/issues/1187)
- Remote.get() Promise broken by previous change
  [#1185](https://github.com/the-djmaze/snappymail/issues/1185)
- Class "MailSo\Base\Exceptions\InvalidArgumentException" not found
  [#1182](https://github.com/the-djmaze/snappymail/issues/1182)
- First account not showed in the right list (dropbox)
  [#1180](https://github.com/the-djmaze/snappymail/issues/1180)


## 2.28.2 – 2023-06-19

### Added
- Detailed error for "Cannot access the repository at the moment"
  [#1164](https://github.com/the-djmaze/snappymail/issues/1164)
- Bidi in Squire editor
  [#1158](https://github.com/the-djmaze/snappymail/issues/1158)
- Translate Squire UI
- Nextcloud 27 compatibility by @LarsBel
- JWT class for handling JSON Web Tokens

### Changed
- Update German by @cm-schl
- Update French by @hguilbert
- Update Polish by @tinola
- Merge handling of local Account Settings. Found while investigating
  [#1170](https://github.com/the-djmaze/snappymail/issues/1170)
- Image max-width now 100% instead of 90vw

### Fixed
- Cannot modify header information
  [#929](https://github.com/the-djmaze/snappymail/issues/929) (comment)
- Admin Panel broken when admin_panel_host is set
  [#1169](https://github.com/the-djmaze/snappymail/issues/1169)
- Invalid CSP report-uri
- Prevent MessageList multiple request at the same time
  [#1071](https://github.com/the-djmaze/snappymail/issues/1071)
- Error in Addressbook Sync
  [#1179](https://github.com/the-djmaze/snappymail/issues/1179)
- base64_decode() second parameter must be true


## 2.28.1 – 2023-06-05

### Changed
- Optical issue with input fields for mail and folder search
  [#1149](https://github.com/the-djmaze/snappymail/issues/1149)
- Update Chinese translation
  [#1157](https://github.com/the-djmaze/snappymail/pull/1157) by @mayswind
- Update Polish translation
  [#1156](https://github.com/the-djmaze/snappymail/pull/1156) by @tinola

### Fixed
- Undefined SIG constants
  [#1147](https://github.com/the-djmaze/snappymail/issues/1147)


## 2.28.0 – 2023-05-30

### Added
- Threaded view make number orange when unread sub-messages
  [#1028](https://github.com/the-djmaze/snappymail/issues/1028)
- Handle PHP pctnl messages
- addEventListener('rl-view-model') missing for Settings
  [#1013](https://github.com/the-djmaze/snappymail/issues/1013)
- CSS `--btn-border-radius`

### Changed
- Improved RTL languages support
  [#1056](https://github.com/the-djmaze/snappymail/issues/1056)
- Composer text/attachments as tabs
  [#1119](https://github.com/the-djmaze/snappymail/issues/1119)
- Filter dialog doesn't refer to folder names consistently
  [#1111](https://github.com/the-djmaze/snappymail/issues/1111)
- TLS connection for MYSQL contact db
  [#1078](https://github.com/the-djmaze/snappymail/issues/1078)
- Allow empty message body when there are attachments
  [#1052](https://github.com/the-djmaze/snappymail/issues/1052)
- PHP inherit logger as Trait
- Update Portuguese
  [#1124](https://github.com/the-djmaze/snappymail/pull/1124) by @ner00
- Update Traditional Chinese (Taiwan)
  [#1107](https://github.com/the-djmaze/snappymail/pull/1107) by @chiyi4488
- Update Russian
  [#1108](https://github.com/the-djmaze/snappymail/pull/1108) by @konkere
- Update Italian
  [#1094](https://github.com/the-djmaze/snappymail/pull/1094) by @cm-schl
- Update French
  [#1102](https://github.com/the-djmaze/snappymail/pull/1102) by @hguilbert
- Update German
  [#1087](https://github.com/the-djmaze/snappymail/pull/1087) by @cm-schl

### Fixed
- Show messagelist timeout/abort error for
  [#1071](https://github.com/the-djmaze/snappymail/issues/1071)
- DesktopNotifications setting not saved
  [#1137](https://github.com/the-djmaze/snappymail/issues/1137)
- PHP Deprecation warning for $_openPipes
  [#1141](https://github.com/the-djmaze/snappymail/issues/1141)
- Images size wrong
  [#1134](https://github.com/the-djmaze/snappymail/issues/1134)
- Unable to preview body of encrypted mail in mailvelope reply-to
  [#1130](https://github.com/the-djmaze/snappymail/issues/1130)
- Replace `<button>` in HTML message with innerHTML instead of remove
  [#1125](https://github.com/the-djmaze/snappymail/issues/1125)
- Mailvelope failed
  [#1126](https://github.com/the-djmaze/snappymail/issues/1126)
- Tabs labels row height
- Selecting not yet existing filter throws error message instead of opening edit box
  [#1104](https://github.com/the-djmaze/snappymail/issues/1104)
- JavaScript Squire `node is null` error
- Config/Application.php: array_rand(): Argument
  [#1](https://github.com/the-djmaze/snappymail/issues/1) cannot be empty
  [#1123](https://github.com/the-djmaze/snappymail/issues/1123)
- Pressing Enter in Add Filter dialog results in "Leave page?" prompt
  [#1112](https://github.com/the-djmaze/snappymail/issues/1112)
- Issue with certain Amazon emails
  [#1086](https://github.com/the-djmaze/snappymail/issues/1086)
- HTML font 8px and 10px issue
  [#1082](https://github.com/the-djmaze/snappymail/issues/1082)
- Exception when executed on command line on the first-time
  [#1085](https://github.com/the-djmaze/snappymail/issues/1085)
- Folders missing pagination
  [#1070](https://github.com/the-djmaze/snappymail/issues/1070)
- Nextcloud WYSIWYG button style
  [#1138](https://github.com/the-djmaze/snappymail/issues/1138)
- Nextcloud .btn-group > .btn layout
- Nextcloud Bulleted items do not show the bullets in the preview window.
  [#1117](https://github.com/the-djmaze/snappymail/issues/1117)
- Nextcloud Contacts integration
  [#1083](https://github.com/the-djmaze/snappymail/issues/1083)


## 2.27.3 – 2023-04-04

### Added
- Squire visualize some active buttons states
- Hard coded string "Message body is empty"
  [#1048](https://github.com/the-djmaze/snappymail/issues/1048)
- Split SPAM label in user.json for directory and action
  [#1065](https://github.com/the-djmaze/snappymail/issues/1065)
- A solution for
  [#1056](https://github.com/the-djmaze/snappymail/issues/1056) to support dates in different language/calendar
- Log \nonexistent folder for
  [#1008](https://github.com/the-djmaze/snappymail/issues/1008)

### Changed
- Cleanup some enums to consts
- Workaround Upgrade with Nextcloud stuck in Maintenance mode
  [#1046](https://github.com/the-djmaze/snappymail/issues/1046)
- Use Actions()->decodeRawKey()
- French language updated
  [#1045](https://github.com/the-djmaze/snappymail/pull/1045) by @hguilbert
- Sorting in folders not working
  [#1022](https://github.com/the-djmaze/snappymail/issues/1022)
- Allow saving draft with empty body
  [#1052](https://github.com/the-djmaze/snappymail/issues/1052)

### Fixed
- GnuPG decrypt failed
- Clear folder link should be hidden if "dangerous actions" is not active
  [#1037](https://github.com/the-djmaze/snappymail/issues/1037)
- 500 error generating preview with GD2
  [#1009](https://github.com/the-djmaze/snappymail/issues/1009)
- Text and Links Jumping While Writing
  [#1004](https://github.com/the-djmaze/snappymail/issues/1004)
- Odd annoying behaviour when copy/ pasting anything into an email and then attempting to edit it.
  [#1054](https://github.com/the-djmaze/snappymail/issues/1054)
- Check if $rImapLiteralStream is open resource and not closed
- Save as eml to nextcloud not working anymore
  [#1057](https://github.com/the-djmaze/snappymail/issues/1057)
- AuthError and Call to a member function ImapConnectAndLogin() on null
  [#1060](https://github.com/the-djmaze/snappymail/issues/1060)
- Thread count missing/shown
  [#1003](https://github.com/the-djmaze/snappymail/issues/1003)


## 2.27.2 – 2023-03-22

### Added
- authentication with smtp freenet.de
  [#1038](https://github.com/the-djmaze/snappymail/issues/1038)

### Changed
- SASL always base64 by default

### Fixed
- Cache issue with index
  [#1024](https://github.com/the-djmaze/snappymail/issues/1024)


## 2.27.1 – 2023-03-21

### Changed
- Improved attachmentIcon glyph coloring
- Better design for .accountPlace text
  [#1025](https://github.com/the-djmaze/snappymail/issues/1025)

### Fixed
- Reply is broken
  [#1027](https://github.com/the-djmaze/snappymail/issues/1027)
- Endless loop at login - Cannot assign array to property MailSo\Imap\Folder::$MAILBOXID
  [#1032](https://github.com/the-djmaze/snappymail/issues/1032)


## 2.27.0 – 2023-03-20

### Added
- Unique attachments.zip filename
  [#992](https://github.com/the-djmaze/snappymail/issues/992)
- Select next email after (re)move current
  [#968](https://github.com/the-djmaze/snappymail/issues/968)

### Changed
- Improved FolderCollection handling
- MODSEQ requires 64-bit int
- Update russian language
  [#994](https://github.com/the-djmaze/snappymail/pull/994) by @Akrobs
- Don't make font bigger when screen > 1400px
- Put top menu "accountPlace" inside top-system-dropdown-id
- Put attachment controls inside attachmentsPlace
- Show message toolbar on screens > 1400px
  [#970](https://github.com/the-djmaze/snappymail/issues/970)
- Chinese updated
  [#1011](https://github.com/the-djmaze/snappymail/pull/1011) by @mayswind
- Prevent folder/messages flags conflict by using the right name `attributes` for Folders
- FolderInformation() use jsonSerialize()
- Squire space handling on paste use `\u00A0` instead of `&nbsp;` for
  [#1004](https://github.com/the-djmaze/snappymail/issues/1004)
- Better line-height for QR code

### Fixed
- Composer src is null
- Image in Signature disappears in Sent/Draft
  [#932](https://github.com/the-djmaze/snappymail/issues/932)
- Mail list is empty
  [#998](https://github.com/the-djmaze/snappymail/issues/998)
- Cache handling issues
  [#1003](https://github.com/the-djmaze/snappymail/issues/1003)
- No message notification popup when installed in sub-directory
  [#1007](https://github.com/the-djmaze/snappymail/issues/1007)
- ERROR: Undefined constant "MailSo\Log\Drivers\STDERR"
  [#965](https://github.com/the-djmaze/snappymail/issues/965)
- 'Location:' headers using proper '302 Found' header
- Can't send email
  [#1006](https://github.com/the-djmaze/snappymail/issues/1006)
- Attachment preview
  [#1005](https://github.com/the-djmaze/snappymail/issues/1005)
- When decrypt message, subject was replaced empty

### Removed
- \MailSo\Imap\ImapClient::GetConnectedPort()

### Nextcloud
- CSS `--panel-bg-clr` was missing
- SnappyMail Menu under Nextcloud top bar
  [#1017](https://github.com/the-djmaze/snappymail/issues/1017)


## 2.26.4 – 2023-02-24

### Added
- Add CSP frame-ancestors for
  [#537](https://github.com/the-djmaze/snappymail/issues/537)

### Changed
- Reduce/simplify CSS footprint
- Use the System/Browser font by default
  [#988](https://github.com/the-djmaze/snappymail/pull/988) by @HeySora
- Make layout fully responsive using matchMedia('(max-width: 799px)')
- Move brotli and gzip compress option to application.ini
- After page refreshes in background whilst editing a draft, the space bar stops working
  [#860](https://github.com/the-djmaze/snappymail/issues/860)
- Updated Portuguese
  [#984](https://github.com/the-djmaze/snappymail/pull/984) by @ner00
- Updated French
  [#985](https://github.com/the-djmaze/snappymail/pull/985) by @hguilbert

### Fixed
- unset border-box for message body
  [#990](https://github.com/the-djmaze/snappymail/issues/990)
- Unread email count badge shows -1
  [#989](https://github.com/the-djmaze/snappymail/issues/989)
- unicode mailto: addresses not decoded
- Unicode email/url address matching
  [#955](https://github.com/the-djmaze/snappymail/issues/955)
- Invalid Token if run in IFrame
  [#537](https://github.com/the-djmaze/snappymail/issues/537)

### Removed
- rl.initData


## 2.26.3 – 2023-02-21

### Added
- Translate "Are you sure you want to exit?"
- stderr as Logger

### Changed
- Moved rl.fetch and rl.fetchJSON to boot.js so that AppData can be fetched as JSON
- Many AppData properties to JavaScript camelCase
- Cleanup Identity handling
- Merge GnuPG and OpenPGP.js passphrases

### Fixed
- Notification enum conflicts with window.Notification
- language selector didn't show current language in green
- Threads indicator got lost with new message cache handling
- messagesBodiesDom never cached previous messages
- Nextcloud File picker doesn't insert multiple links
  [#981](https://github.com/the-djmaze/snappymail/issues/981)
- Call to protected method RainLoop\Enumerations\UploadError::getUserMessage()
  [#982](https://github.com/the-djmaze/snappymail/issues/982)
- Issue with the top logo and text of a certain e-mail
  [#953](https://github.com/the-djmaze/snappymail/issues/953)
- Facebook logo missing from emails sent out by it
  [#954](https://github.com/the-djmaze/snappymail/issues/954)

### Removed
- Unused Squire code


## 2.26.2 – 2023-02-17

### Added
- Remove CSS white-space from messages to prevent annoying side scrolling
- Show error when trying to send empty message
  [#974](https://github.com/the-djmaze/snappymail/issues/974)
- max_sys_loadavg as setting
  [#971](https://github.com/the-djmaze/snappymail/issues/971)

### Changed
- Speedup and improved cleanHtml() and cleanCSS() handling
- Better handling of upload .eml files to a mailbox
- Rename Folder Hash to ETag as it is the more obvious name
- Moved AllowDraftAutosave option from Settings -> Security to Settings -> General -> Compose
- SmtpClient->Connect() use $oSettings->Ehlo
- Improved handling of `<style>` elements in messages
- French updated by @hguilbert

### Fixed
- Remove SVG elements properly from messages
  [#972](https://github.com/the-djmaze/snappymail/issues/972)
- Sending large HTML messages slow/fail
  [#962](https://github.com/the-djmaze/snappymail/issues/962)
- Nextcloud login failed
  [#969](https://github.com/the-djmaze/snappymail/issues/969)
- DoMessageList() hash check was incorrect
- "Move to folder" button overlays folder sidebar on mobile
  [#961](https://github.com/the-djmaze/snappymail/issues/961)
- Spanish translation SPAM and NOT SPAM strings are reversed
  [#964](https://github.com/the-djmaze/snappymail/issues/964)
- Can't open Thunderbird PGP keys from decrypted message
  [#958](https://github.com/the-djmaze/snappymail/issues/958)
- Can't close Sieve dialog
  [#960](https://github.com/the-djmaze/snappymail/issues/960)


## 2.26.1 – 2023-02-14

### Added
- Option to allow `<style>` in messages (beta)
- Message in new tab/window was missing BCC

### Changed
- Don't clone message for viewing, so that there is instant interaction with messagelist item
- emailArrayToStringLineHelper() now filters addresses without email address
- Cleanup EmailModel and better email address parsing and handling
- Workaround "server connection error"
  [#936](https://github.com/the-djmaze/snappymail/issues/936)
- Cleanup AbstractViewPopup handling
- Italian translation
  [#948](https://github.com/the-djmaze/snappymail/pull/948) by @lota
- Replace Element.fromHTML() with createElement()

### Fixed
- New subfolder not visible
  [#937](https://github.com/the-djmaze/snappymail/issues/937)
- OpenPGP decrypted attachments `friendlySize` not a function
- Message @media print was broken due to new `display:flex`
- addressparser() didn't handle groups properly
- middleclick in messages list failed when messagesDom not yet initialized
- Cannot open messages that have an email address without an @ in the From header
  [#950](https://github.com/the-djmaze/snappymail/issues/950)
- CSS don't display:flex when `[hidden]`
- Default theme handling by @Niveshkrishna


## 2.26.0 – 2023-02-10

### Added
- Whitelist advanced SPF/DKIM/DMARC valid feature
  [#938](https://github.com/the-djmaze/snappymail/issues/938)

### Changed
- \RainLoop\Providers\AddressBook\Utils functions param `Contact` changed to `VCard`

### Fixed
- Issue with themes and Chrome cache
  [#188](https://github.com/the-djmaze/snappymail/issues/188)
- Settings panel width due to display:flex
  [#940](https://github.com/the-djmaze/snappymail/issues/940)
- Not respecting default theme setting
  [#941](https://github.com/the-djmaze/snappymail/issues/941)
- Some files had 0755 instead of 0644
- Some spacing between message "view images" buttons for
  [#201](https://github.com/the-djmaze/snappymail/issues/201)
- Whitelist failed when empty or when using `:`
  [#938](https://github.com/the-djmaze/snappymail/issues/938)
- Cosmetics of the external images whitelist menu
  [#939](https://github.com/the-djmaze/snappymail/issues/939)
- PdoAddressBook ORDER BY deleted DESC to prevent sync and export issues
- Undefined variable $items in upgrade.php
- qq.com not supporting literal-string in search
  [#836](https://github.com/the-djmaze/snappymail/issues/836)


## 2.25.5 – 2023-02-09

### Added
- New dark themes
  [#925](https://github.com/the-djmaze/snappymail/pull/925) by @TheCuteFoxxy
- External images option 'Always when DKIM is valid' for
  [#201](https://github.com/the-djmaze/snappymail/issues/201)
- Image whitelist menu on message for
  [#201](https://github.com/the-djmaze/snappymail/issues/201)

### Changed
- pt-PT translation by @ner00
  [#917](https://github.com/the-djmaze/snappymail/issues/917) and
  [#920](https://github.com/the-djmaze/snappymail/issues/920)
- fr-FR translation by @hguilbert
  [#919](https://github.com/the-djmaze/snappymail/issues/919)
- Layout section rl-right now is `display: flex` and solves
  [#928](https://github.com/the-djmaze/snappymail/issues/928)
- Some Themes background to `cover`
  [#918](https://github.com/the-djmaze/snappymail/issues/918)
- Speedup cleanHtml() parser
- Reduce memory usage on addressbook import

### Fixed
- Prevent loading loop between MessageList and FolderInformation requests
- Admin -> Config layout
- Inline images sometimes failed
- Undefined index: cid
  [#921](https://github.com/the-djmaze/snappymail/issues/921)
- On upgrade prevent Apache access errors for
  [#358](https://github.com/the-djmaze/snappymail/issues/358)
- Import contacts as CSV is broken
  [#931](https://github.com/the-djmaze/snappymail/issues/931)

### Removed
- Blockquote height calculator for
  [#902](https://github.com/the-djmaze/snappymail/issues/902)


## 2.25.4 – 2023-02-06

### Added
- message maximum quoted text level for speed.
  [#902](https://github.com/the-djmaze/snappymail/issues/902)
- LoveDark Theme
  [#913](https://github.com/the-djmaze/snappymail/pull/913) by @TheCuteFoxxy

### Changed
- Moved pluginEnable() to \SnappyMail\Repository::enablePackage()
- Updrate French language by @hguilbert
- Cleanup material-design checkbox
- Some style change for settings panels
- Some MailMessageView styling
- Disabled blockquotes height calculation for
  [#902](https://github.com/the-djmaze/snappymail/issues/902)
- Enhance Add domain dialog
  [#916](https://github.com/the-djmaze/snappymail/issues/916)

### Fixed
- Fixed arrows in thread view while scrolling
  [#908](https://github.com/the-djmaze/snappymail/issues/908)
- CSS btn-thin were too high
- Whitelist to show images directly
  [#201](https://github.com/the-djmaze/snappymail/issues/201)
- MailSo\Base\Http::GetHost(): Return value must be of type string
  [#910](https://github.com/the-djmaze/snappymail/issues/910)
- Nextcloud undefined variable $sUser
  [#915](https://github.com/the-djmaze/snappymail/issues/915)
- Hopefull improved styling for Firefox mobile fixes
- Scroll display error
  [#912](https://github.com/the-djmaze/snappymail/issues/912)
- Autofocus was triggered when view resized
- Better solution for Settings Page is bigger than the Account Page
  [#897](https://github.com/the-djmaze/snappymail/issues/897)

### Removed
- $bUrlEncode as it was always false


## 2.25.3 – 2023-02-03

### Added
- Make message collapse quotes optional
  [#902](https://github.com/the-djmaze/snappymail/issues/902)

### Changed
- Improved loginErrorDelay to prevent timing attacks and default to 5 seconds
- Moved message collapse quotes to HTML parser
- Moved some application.ini settings to other sections
- Moved source "/assets/*" to proper location in /snappymail/v/0.0.0/static/
- Set checkMailInterval to 15 minutes by default (now that it is configurable)

### Fixed
- Prevent plugin property decrypt error
  [#859](https://github.com/the-djmaze/snappymail/issues/859)
- Index.html cache issue
  [#891](https://github.com/the-djmaze/snappymail/issues/891)
- Images whitelist regular expression failed
  [#201](https://github.com/the-djmaze/snappymail/issues/201)
- Undefined index: ShowImages
  [#901](https://github.com/the-djmaze/snappymail/issues/901)
- Chrome shows LSep boxes in certain emails
  [#900](https://github.com/the-djmaze/snappymail/issues/900)
- Don't remember OpenPGP/GnuPGP key passphrase when it fails
  [#840](https://github.com/the-djmaze/snappymail/issues/840)


## 2.25.2 – 2023-02-02

### Added
- Refresh frequency of the mailboxes
  [#486](https://github.com/the-djmaze/snappymail/issues/486)
- Temporarily save password for private key during session
  [#840](https://github.com/the-djmaze/snappymail/issues/840)
- Upgrade from Rainloop, password not migrated
  [#898](https://github.com/the-djmaze/snappymail/issues/898)
- Whitelist to show images directly
  [#201](https://github.com/the-djmaze/snappymail/issues/201)
- HTML editor paste image makes it max 1024px width/height
  [#262](https://github.com/the-djmaze/snappymail/issues/262)
- SnappyMail\TAR::extractTo support the $files and $overwrite parameters

### Changed
- Issue with themes when Chrome crashes
  [#188](https://github.com/the-djmaze/snappymail/issues/188)
- /static/.htaccess as mentioned by @dbiczo in
  [#895](https://github.com/the-djmaze/snappymail/issues/895)
- Update nb-NO language
  [#896](https://github.com/the-djmaze/snappymail/pull/896) by @master3395
- \RainLoop\Utils::SetCookie() to \SnappyMail\Cookies::set()
- Merge \MailSo\Base\Utils::RecRmDir() and \MailSo\Base\Utils::RecTimeDirRemove()

### Fixed
- Two issues with images being delivered via ProxyExternal
  [#887](https://github.com/the-djmaze/snappymail/issues/887)
- Multiple accounts conflicts when using multiple tabs
  [#892](https://github.com/the-djmaze/snappymail/issues/892)
- Spaces in attached file names are not preserved
  [#893](https://github.com/the-djmaze/snappymail/issues/893)
- Prevent empty area scroll on body

### Removed
- Floating HTML text formatting menu on mobile
  [#828](https://github.com/the-djmaze/snappymail/issues/828)
- Unused AUTH_SPEC_LOGOUT_TOKEN_KEY and AUTH_SPEC_LOGOUT_CUSTOM_MSG_KEY


## 2.25.1 – 2023-01-30

### Added
- Support RFC 8689
- Nextcloud move themes outside of app folder
  [#875](https://github.com/the-djmaze/snappymail/issues/875)
- Add check to unregister system addressbook
  [#879](https://github.com/the-djmaze/snappymail/pull/879) by @akhil1508

### Changed
- material-design checkbox use hidden input for accessibility
- Always subscribe to new folder by default
- Merge NoScript, NoCookie and BadBrowser pages in Index.html
- Cleanup translations. Also see https://snappymail.eu/translate.php

### Fixed
- PHP < 8.1 ini_set() only accepts strings when `declare(strict_types=1);` is used
- Nextcloud also fix settings on upgrade
- Nextcloud workaround upgrade OPCache issue
  [#880](https://github.com/the-djmaze/snappymail/issues/880)
- SMTP error while using PHP mail()
  [#884](https://github.com/the-djmaze/snappymail/issues/884)
- Cannot create folder
  [#885](https://github.com/the-djmaze/snappymail/issues/885)
- Image stretching when image hasd max-width
  [#869](https://github.com/the-djmaze/snappymail/issues/869)


## 2.25.0 – 2023-01-26

### Changed
- Right margin to folder search input wrapper
  [#871](https://github.com/the-djmaze/snappymail/pull/871) by @codiflow
- Almost all request params now use JavaScript camelCase instead of CamelCase
- #rl-content to use flex for better layout control
- Decode some Copernica link tracking
- Cleanup some CSS and JS code
- Better Sieve rainloop.user script handling
- Improve MailSo\Imap\BodyStructure
- Cleanup MIME part FileName handling

### Fixed
- CardDAV sync error - Request aborted
  [#866](https://github.com/the-djmaze/snappymail/issues/866)
- PDF not possible to be viewed in the browser
  [#867](https://github.com/the-djmaze/snappymail/issues/867)
- ZIP Files cannot be uploaded from Desktop to attachments (other files can be uploaded)
  [#878](https://github.com/the-djmaze/snappymail/issues/878)
- Mobile view issues with leftside menu
- Default messageListItem border left color for dark mode
- Nextcloud layout in ?admin
- Nextcloud `_htaccess` to `.htaccess` failed

### Removed
- Some unused PHP functions

## 2.24.6 – 2023-01-18

### Added
- Preparations for RFC 8689
- Add admin setting for the contacts suggestions limit
- A button to clear folder search input field
  [#847](https://github.com/the-djmaze/snappymail/pull/847) by @codiflow
- Preparations for custom SMTP credentials handling for
  [#859](https://github.com/the-djmaze/snappymail/issues/859)
  [#458](https://github.com/the-djmaze/snappymail/issues/458)
  [#431](https://github.com/the-djmaze/snappymail/issues/431)
  [#233](https://github.com/the-djmaze/snappymail/issues/233)

### Changed
- Display the time of emails, not just the size and date
  [#843](https://github.com/the-djmaze/snappymail/issues/843)
- Made thread number a bit wider
  [#844](https://github.com/the-djmaze/snappymail/issues/844)
- Improved contacts suggestions limit handling
  [#849](https://github.com/the-djmaze/snappymail/issues/849)
- 64-bit PHP was required
  [#852](https://github.com/the-djmaze/snappymail/issues/852)
- Update fr-FR translations
  [#854](https://github.com/the-djmaze/snappymail/pull/854) by @dominiquefournier
- Move createDomain & createDomainAlias buttons below table
- Move some Nextcloud SnappyMailHelper code to new InstallStep
- Cleanup messages cache handling
- Improved visibility Admin Domain Test errors

### Fixed
- LiteSpeed does not disable compression although .htaccess says so
  [#525](https://github.com/the-djmaze/snappymail/issues/525)
  [#855](https://github.com/the-djmaze/snappymail/issues/855)
- "Move to folder" functionality displays in desktop view when on mobile
  [#858](https://github.com/the-djmaze/snappymail/issues/858)
- matchAnyRule() Return value must be of type bool, none returned
- Unknown CSP directive 'strict-dynamic' in Safari 13.1.2
- Wrong timeStyle issue in Safari 13.1.2
- Language SETTINGS_LABELS got lost
- Nextcloud failed loading app data when path didn't end with /
  [#864](https://github.com/the-djmaze/snappymail/issues/864)
- Workaround Nextcloud session_start issue
  [#813](https://github.com/the-djmaze/snappymail/issues/813)

## 2.24.5 – 2023-01-12

### Added
- Support for search criterias ON, SENTON, SENTSINCE and SENTBEFORE
- New 'forward as attachment' glyph
- NC integration app metadata: add links to admin and dev docs
  [#820](https://github.com/the-djmaze/snappymail/pull/820) by @p-bo
- Clicking on messagelist grouped date/from searches on that date/from
  [#815](https://github.com/the-djmaze/snappymail/issues/815)
- Nextcloud Improved file picker layout
  [#825](https://github.com/the-djmaze/snappymail/issues/825)

### Changed
- Move release.php to cli/release.php
- Moved sort options "FROM" direct below "DATE" for better understanding
- Added DAV path error to log for
  [#822](https://github.com/the-djmaze/snappymail/issues/822)
- Resolve layout issues by changing from `fixed` to `relative`
  [#686](https://github.com/the-djmaze/snappymail/issues/686)
- Cache handling of messagelist changed due to etag issues
- Improve german and italian translation
  [#846](https://github.com/the-djmaze/snappymail/pull/846) by @cm-schl

### Fixed
- Searching on Nextcloud search
  [#787](https://github.com/the-djmaze/snappymail/issues/787)
- Workaround another Nextcloud disallowed .htaccess
  [#790](https://github.com/the-djmaze/snappymail/issues/790)
- Compact display of folders in nextcloud
  [#824](https://github.com/the-djmaze/snappymail/pull/824) by @makoehr
- Admin -> Contacts PDO test failed when using different AddressBookInterface
- KolabAddressBook errors
- Forgot debug js/css setting change in Nextcloud
- Typed property MailSo\Mail\MessageListParams::$sSearch must not be accessed before initialization
- Unable to change font/text colour when composing message using Safari
  [#826](https://github.com/the-djmaze/snappymail/issues/826)
- auth_logging failed
  [#489](https://github.com/the-djmaze/snappymail/issues/489)
- Class "RainLoop\Actions\Notifications" not found
  [#839](https://github.com/the-djmaze/snappymail/issues/839)

### Removed
- 'set-version' argument for release.php


## 2.24.4 – 2022-12-30

### Added
- Check PHP_INT_SIZE if SnappyMail runs on 64bit

### Changed
- A lot of MessageList sorting improvements
  [#796](https://github.com/the-djmaze/snappymail/issues/796)
- On upgrade also update plugins in Nextcloud due to many misunderstandings and prevent invalid open issues
- Moved application.ini labs.use_app_debug_* to debug.*

### Fixed
- Dutch translation for confusing message (threads vs grouped)
- Workaround Nextcloud disallowed .htaccess
  [#790](https://github.com/the-djmaze/snappymail/issues/790)
- Searching on Nextcloud search failed
  [#787](https://github.com/the-djmaze/snappymail/issues/787)


## 2.24.3 – 2022-12-28

### Changed
- When sorting on FROM also sort on REVERSE DATE

### Fixed
- F5 and Ctrl-F5 reload logs out of Snappymail in Chrome.
  [#800](https://github.com/the-djmaze/snappymail/issues/800)
- Switching accounts does not work anymore with 2.24.2
  [#802](https://github.com/the-djmaze/snappymail/issues/802)


## 2.24.2 – 2022-12-27

### Changed
- Disable sorting when viewing message thread
  [#445](https://github.com/the-djmaze/snappymail/issues/445)
- Update Chinese translation
  [#794](https://github.com/the-djmaze/snappymail/pull/794) by @mayswind
- No need to call IMAP EXAMINE when current folder already SELECT
- Thread view now has tree indentation

### Fixed
- Nextcloud failed on Integrity check
  [#790](https://github.com/the-djmaze/snappymail/issues/790)
- Deleting message fails with message "Cannot move message" on hMailServer
  [#793](https://github.com/the-djmaze/snappymail/issues/793)
- List messages per day feature is enabled by default and breaks sorting
  [#796](https://github.com/the-djmaze/snappymail/issues/796)
- Custom page login not working for first time due to smctoken security
  [#798](https://github.com/the-djmaze/snappymail/issues/798)
- Message list is always empty due to wrong implementation of RFC 8474
  [#799](https://github.com/the-djmaze/snappymail/issues/799)


## 2.24.1 – 2022-12-23

### Changed
- Intl.DateTimeFormat() into toLocaleString() for iOS < 14
- Cleanup locale date/time handling
- Make MessageList per day optional
  [#737](https://github.com/the-djmaze/snappymail/issues/737)

### Fixed
- Typed property MailSo\Cache\Drivers\Redis::$sKeyPrefix must not be accessed before initialization
  [#792](https://github.com/the-djmaze/snappymail/issues/792)
- Attachments in mails in 2.24 not loading in reply/forward
  [#789](https://github.com/the-djmaze/snappymail/issues/789)
- Rollback #280 due to complications
  [#280](https://github.com/the-djmaze/snappymail/issues/280)


## 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/issues/737)
- Account switcher still shown when allow_additional_accounts is set to Off
  [#280](https://github.com/the-djmaze/snappymail/issues/280)
- PHP classes use typed properties
- Speedup Contacts Suggestions handling
- Check SMTP SIZE
  [#779](https://github.com/the-djmaze/snappymail/issues/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/issues/466)
- Email HTML images rendering issue
  [#564](https://github.com/the-djmaze/snappymail/issues/564)
- "Server message: No supported SASL mechanism found, remote server wants:" in hMailServer
  [#780](https://github.com/the-djmaze/snappymail/issues/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/issues/744)
- Added manual setting for 12/24h clock
  [#760](https://github.com/the-djmaze/snappymail/issues/760)
- Add options to mark the message I'm viewing as unread and return to the inbox
  [#766](https://github.com/the-djmaze/snappymail/issues/766)

### Fixed
- Extension menu shows only some available extensions
  [#778](https://github.com/the-djmaze/snappymail/issues/778)
- New solution for [#423](https://github.com/the-djmaze/snappymail/issues/423) due to [#774](https://github.com/the-djmaze/snappymail/issues/774)
- Avatars extension error on smartphone
  [#764](https://github.com/the-djmaze/snappymail/issues/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
- Show the number of unread mails on all mail addresses/accounts
  [#437](https://github.com/the-djmaze/snappymail/issues/437)
- Show OpenSSL version in Admin => About

### Changed
- Redirect to login page instead of "invalid token" popup
  [#752](https://github.com/the-djmaze/snappymail/issues/752)
- Make all dialogs fit in mobile view
- Changed some Plugin hooks for better handling:
	* json.action-pre-call => json.before-{actionname}
	* json.action-post-call => json.after-{actionname}
- Cleaner accounts list in systemdropdown
- Multiple imapConnect handling for new import mail feature
  [#744](https://github.com/the-djmaze/snappymail/issues/744)

### Fixed
- Loosing HTML signature in account identity under settings
  [#750](https://github.com/the-djmaze/snappymail/issues/750)
- Plugin configuration did not load anymore when type was SELECTION
  [#753](https://github.com/the-djmaze/snappymail/pull/753) by @cm-schl
- Nextcloud Default theme shows gray text on gray background
  [#754](https://github.com/the-djmaze/snappymail/issues/754)
- Only run JSON hooks when $sAction is set
  [#755](https://github.com/the-djmaze/snappymail/issues/755)
- Unsupported SASL mechanism OAUTHBEARER
  [#756](https://github.com/the-djmaze/snappymail/issues/756)
  [#758](https://github.com/the-djmaze/snappymail/issues/758)
  [#759](https://github.com/the-djmaze/snappymail/issues/759)
- border-box issue with .buttonCompose

### Removed
- Deprecate \RainLoop\Account->Login() and \RainLoop\Account->Password()


## 2.22.7 – 2022-12-06

### Changed
- Scroll bar with the mobile version in "Advanced search" screen
  [#712](https://github.com/the-djmaze/snappymail/issues/712)

### Fixed
- Undefined property: MailSo\Mail\FolderCollection::$capabilities
- PHP 8.2 Creation of dynamic property is deprecated
- Attempt to solve #745 in v2.22.6 failed and resulted in errors #746 and #748
  [#745](https://github.com/the-djmaze/snappymail/issues/745)
  [#746](https://github.com/the-djmaze/snappymail/issues/746)
  [#748](https://github.com/the-djmaze/snappymail/issues/748)
- Admin domain test undefined matched domain should say email@example matched domain


## 2.22.6 – 2022-12-05

### Changed
- Narrow MessageList wraps star icon
  [#737](https://github.com/the-djmaze/snappymail/issues/737)
- Use UIDVALIDITY when HIGHESTMODSEQ not available, maybe solves
  [#745](https://github.com/the-djmaze/snappymail/issues/745)
- No need to generate 1000's of ID's for MessageListByRequestIndexOrUids()
- Update Chinese translation by @mayswind

### Fixed
- PluginProperty DefaultValue contained array while it should not
  [#741](https://github.com/the-djmaze/snappymail/issues/741)

### Removed
- IMAP SELECT/EXAMINE unset `UNSEEN` because IMAP4rev2 deprecated


## 2.22.5 – 2022-12-02

### Added
- Support plugin minified .min.js and .min.css
- ZIP Download multiple emails
  [#717](https://github.com/the-djmaze/snappymail/issues/717)

### Changed
- Replaced some data-bind="click: function(){} with object functions to prevent eval()
- Improved plugins hash when there are changes

### Fixed
- Settings Themes style due to border-box change
- "Remember me" failed due to v2.22.4 Session token change
  [#719](https://github.com/the-djmaze/snappymail/issues/719)
  [#731](https://github.com/the-djmaze/snappymail/issues/731)

### Removed
- Vacation filter: Button to add recipients (+)
  [#728](https://github.com/the-djmaze/snappymail/issues/728)


## 2.22.4 – 2022-11-28

### Changed
- Contacts dialog layout using flex
- Session token is related to the user agent string
  [#713](https://github.com/the-djmaze/snappymail/issues/713)
- Better browser cache handling for avatars plugin
  [#714](https://github.com/the-djmaze/snappymail/issues/714)
- Force HTML editor when set as default when replying to message
  [#355](https://github.com/the-djmaze/snappymail/issues/355)

### Fixed
- Contact Error - object Object
  [#716](https://github.com/the-djmaze/snappymail/issues/716)
- Unable to move messages to different folder by drag and drop
  [#710](https://github.com/the-djmaze/snappymail/issues/710)
- v2.22.3 unknown error
  [#709https://github.com/the-djmaze/snappymail/issues/709)


## 2.22.3 – 2022-11-25

### Added
- application.ini config logs.path and cache.path to improve custom data structure.

### Changed
- Improved cPanel integration
  [#697](https://github.com/the-djmaze/snappymail/issues/697)
- Update to OpenPGP.js v5.5.0

### Fixed
- drag & drop folder expansion
  [#707](https://github.com/the-djmaze/snappymail/issues/707)
- Save selected messages as .eml in Nextcloud failed
  [#704](https://github.com/the-djmaze/snappymail/issues/704)


## 2.22.2 – 2022-11-24

### Added
- Support cPanel
  [#697](https://github.com/the-djmaze/snappymail/issues/697)


## 2.22.1 – 2022-11-23

### Added
- AddressBookInterface::GetContactByEmail() to support sender image/avatar extension
  [#115](https://github.com/the-djmaze/snappymail/issues/115)

### Changed
- All the attachment zone is not clickable, even if the cursor is a hand
  [#691](https://github.com/the-djmaze/snappymail/issues/691)
- Different approach for "update button duplicated in admin panel"
  [#677](https://github.com/the-djmaze/snappymail/issues/677)
- Better drag & drop solution for leftPanel

### Fixed
- The page does not change after batch deletion
  [#684](https://github.com/the-djmaze/snappymail/issues/684)
- Prevent domain uppercase issues found in
  [#689](https://github.com/the-djmaze/snappymail/issues/689)
- Login invalid response: VXNlcm5hbWU6CG
  [#693](https://github.com/the-djmaze/snappymail/issues/693)


## 2.21.4 – 2022-11-22

### Added
- Added domain matcher test for
  [#689](https://github.com/the-djmaze/snappymail/issues/689)
- Download all Attachments of selected Emails
  [#361](https://github.com/the-djmaze/snappymail/issues/361)

### Changed
- Log current shortcuts scope for
  [#690](https://github.com/the-djmaze/snappymail/issues/690)
- CSS everything to be box-sizing: border-box;
- Make messageview a bit larger so that it is the same height as the messagelist
- Cleanup and rearrange some fontastic glyphs
- Also show From email address by default
  [#683](https://github.com/the-djmaze/snappymail/issues/683)

### Fixed
- Contact.display() returns [object Object]
- When left panel disabled and drag messages, show it
- Issue with admin domain connection type settings selectbox
  [#689](https://github.com/the-djmaze/snappymail/issues/689)
- Mobile View on cellphones: automatic scrolling not working near the visual keyboard
  [#686](https://github.com/the-djmaze/snappymail/issues/686)
- Unable to separate runtime from installation
  [#685](https://github.com/the-djmaze/snappymail/issues/685)

### Removed
- Removed inline parameter of checkbox and select components


## 2.21.3 – 2022-11-16

### Added
- Click on PGP KEY attachment opens "Import key" dialog

### Changed
- Increase visible reading area for small screens
  [#672](https://github.com/the-djmaze/snappymail/issues/672)
- Improved message spam score detailed view
- Improved DAV connection logging

### Fixed
- Handling attachments MIME type / content-type
- Message responsive resizing width/height of elements
  [#678](https://github.com/the-djmaze/snappymail/issues/678)
- Focus on textarea when creating a new plain text email
  [#501](https://github.com/the-djmaze/snappymail/issues/501)
- CardDav remove photos of my contacts when synchronizing
  [#679](https://github.com/the-djmaze/snappymail/issues/679)

### Removed
- \MailSo\Mime\Enumerations\MimeType

### Nextcloud
- Use fontastic in Nextcloud Files selector dialog
- Firefox < 98 dialogs
  [#673](https://github.com/the-djmaze/snappymail/issues/673)

## 2.21.2 – 2022-11-15

### Added
- Allow browser Spellchecker
  [#574](https://github.com/the-djmaze/snappymail/issues/574)
- Decode MIME charset of .EML attachments
  [#662](https://github.com/the-djmaze/snappymail/issues/662)

### Changed
- Increase message visible text area
  [#672](https://github.com/the-djmaze/snappymail/issues/672)
- When copy/paste image use the raw data instead of clipboard HTML
  [#654](https://github.com/the-djmaze/snappymail/issues/654)
- When application.ini debug.enable is true, also debug js and css
- JavaScript rl.setWindowTitle() renamed to rl.setTitle()

### Removed
- Message toggle fullscreen button which was only in mobile view

### Nextcloud
- Workaround Nextcloud calendar crashes
  [#622](https://github.com/the-djmaze/snappymail/issues/622)
  [#661](https://github.com/the-djmaze/snappymail/issues/661)
- Added share public/internal file link
  [#569](https://github.com/the-djmaze/snappymail/issues/569)


## 2.21.1 – 2022-11-13

### Fixed
- Crypt crashes when Sodium not installed
  [#641](https://github.com/the-djmaze/snappymail/issues/641)
  [#657](https://github.com/the-djmaze/snappymail/issues/657)
  [#663](https://github.com/the-djmaze/snappymail/issues/663)
  [#664](https://github.com/the-djmaze/snappymail/issues/664)
  [#668](https://github.com/the-djmaze/snappymail/issues/668)
  [#669](https://github.com/the-djmaze/snappymail/issues/669)
- Personalised favicon not working - default Snappymail favicon showing
  [#665](https://github.com/the-djmaze/snappymail/issues/665)

### Nextcloud
- v23 ContentSecurityPolicy versions issue
  [#666](https://github.com/the-djmaze/snappymail/issues/666)


## 2.21.0 – 2022-11-11

### Added
- Put messagelist top bar buttons also in dropdown
- Allow setting additional Sec-Fetch rules, as discussed by
  [#585](https://github.com/the-djmaze/snappymail/issues/585)
- Light/Dark favicon.svg
  [#643](https://github.com/the-djmaze/snappymail/issues/643)
- Allow an account name/label
  [#571](https://github.com/the-djmaze/snappymail/issues/571)

### Changed
- Moved ServiceRemoteAutoLogin to plugin/extension
- Moved ServiceExternalSso to plugin/extension
- Moved ServiceExternalLogin to plugin/extension
- Renamed ManageSieveClient to SieveClient
- New Net/Imap/Smtp/Sieve Settings object system which allows
  setting SSL options per domain and verify_certificate by default
- Update plugins to use new Net/Imap/Smtp/Sieve Settings object
- Removed message double-click to full screen
  [#638](https://github.com/the-djmaze/snappymail/issues/638)

### Fixed
- ldap-identities-plugin
  [#647](https://github.com/the-djmaze/snappymail/pull/647) by @cm-schl
- OpenSSL v3 ciphers issue
  [#641](https://github.com/the-djmaze/snappymail/issues/641)

### Nextcloud
- Style PopupsNextcloudFiles view
- Link to internal files in composer


## 2.20.6 – 2022-11-08

### Fixed
- ?admin login failed
  [#642](https://github.com/the-djmaze/snappymail/issues/642)
- Resolve PHP 8.2 Creation of dynamic property is deprecated


## 2.20.5 – 2022-11-08

### Nextcloud
- Improved workaround for Nextcloud Content-Security-Policy bug
  Safari [#631](https://github.com/the-djmaze/snappymail/issues/631)
  Edge [#633](https://github.com/the-djmaze/snappymail/issues/633)
  Reported [#35013](https://github.com/nextcloud/server/issues/35013)


## 2.20.4 – 2022-11-07

### Fixed
- Nextcloud no-embed use iframe mode failed

### Nextcloud
- Workaround Nextcloud Content-Security-Policy bug
  Safari [#631](https://github.com/the-djmaze/snappymail/issues/631)
  Edge [#633](https://github.com/the-djmaze/snappymail/issues/633)
  Reported [#35013](https://github.com/nextcloud/server/issues/35013)


## 2.20.3 – 2022-11-07

### Added
- Throw decrypt errors
  [#632](https://github.com/the-djmaze/snappymail/issues/632)

### Changed
- Better multiple WYSIWYG registration system (not finished)
- Better handling of admin token cookie

### Fixed
- Cookie “name” has been rejected because it is already expired.
  [#636](https://github.com/the-djmaze/snappymail/issues/636)
- Content-Security-Policy 'strict-dynamic' was missing

### Nextcloud
- Better handling of Content-Security-Policy
  [#631](https://github.com/the-djmaze/snappymail/issues/631)
  [#633](https://github.com/the-djmaze/snappymail/issues/633)
- Nextcloud 23 Error Call to undefined method useStrictDynamic()
  [#634](https://github.com/the-djmaze/snappymail/issues/634)
- Use snappymail icon as favicon-mask.svg instead default nextcloud logo
  [#635](https://github.com/the-djmaze/snappymail/issues/635)


## 2.20.2 – 2022-11-05

### Added
- Add more search operators (i.e. copy lots of Gmail ones)
  [#625](https://github.com/the-djmaze/snappymail/issues/625)

### Changed
- Some CSS borders to var(--border-color)

### Fixed
- pgpDecrypt() using MailVelope the decrypt message was not green
- Shift + F in search bar resulted in forwarding message
  [#624](https://github.com/the-djmaze/snappymail/issues/624)

### Nextcloud
- auto login mechanism not working anymore
  [#627](https://github.com/the-djmaze/snappymail/issues/627)


## 2.20.1 – 2022-11-04

### Added
- Added CSS --dialog-border-clr and --dialog-border-radius
- Show lock (lock) glyph in messagelist for encrypted messages

### Fixed
- Decrypt failed when OpenPGP.js not loaded

### Nextcloud
- Now integrate with Nextcloud by default, but keep iframe option available
- Better theme integration with Nextcloud
- Use Nextcloud 18+ IEventDispatcher
- Solve Nextcloud 25 CSS issues
  [#620](https://github.com/the-djmaze/snappymail/issues/620)
- PutinICS does is not working for all calendar events
  [#622](https://github.com/the-djmaze/snappymail/issues/622)
- Update readme
  [#617](https://github.com/the-djmaze/snappymail/pull/617) by @cm-schl


## 2.20.0 – 2022-11-03

### Added
- Strip mailchimp tracking

### Changed
- Use some PHP typed properties
- Move bootstrap @less variables to CSS var()
- Improved theme styling

### Fixed
- CSS --dropdown-menu-background-color should be --dropdown-menu-bg-color

### Nextcloud
- Disable Nextcloud Impersonate check due to login/logout complications
  [#561](https://github.com/the-djmaze/snappymail/issues/561)
- Improved theme integration and be compatible with Breeze Dark


## 2.19.7 – 2022-11-02

### Added
- Make it clear that you are on the admin panel login screen
- Force PHP opcache_invalidate due to upgrade error reports "Missing version directory"

### Fixed
- Switching user (impersonate plugin) keeps old Email logged in
  [#561](https://github.com/the-djmaze/snappymail/issues/561)
- PGP Decryption / Encryption Failures
  [#600](https://github.com/the-djmaze/snappymail/issues/600)
- Undefined constant "OCA\SnappyMail\Util\RAINLOOP_APP_LIBRARIES_PATH
  [#601](https://github.com/the-djmaze/snappymail/issues/601)
- Cannot access admin panel
  [#602](https://github.com/the-djmaze/snappymail/issues/602)
- Wont show my emails
  [#604](https://github.com/the-djmaze/snappymail/issues/604)
- Return type of MailSo\Base\StreamFilters\LineEndings::filter
  [#610](https://github.com/the-djmaze/snappymail/issues/610)
- Create .pgp directory was missing

### Security
- Logger leaked some passwords

## 2.19.6 – 2022-10-31

### Added
- Put sign and encrypt options in composer dropdown menu and simplify te two existing buttons with a glyph
- Filter scripts UI let user understand which filter is active
  [#590](https://github.com/the-djmaze/snappymail/issues/590)

### Fixed
- Method 'GetRequest' not found in \MailSo\Base\Http
  [#585](https://github.com/the-djmaze/snappymail/issues/585)

### Changed
- Base Domain setup enhancements
- Cleanup MailSo MailClient using __call()
- Domain settings handling and store as JSON instead of ini
- Some JavaScript changes
- When try to login IMAP/SMTP/SIEVE but STARTTLS is required, force STARTTLS
- Embed admin panel into Nextcloud (with autologin, no need for separate login)
- Don't set default_domain in Nextcloud when already set

### Removed
- Nextcloud dark mode, it is incomplete

### Deprecated
- nothing
## 2.21.0 – 2022-11-11

### Added
- Put messagelist top bar buttons also in dropdown
- Allow setting additional Sec-Fetch rules, as discussed by
  [#585](https://github.com/the-djmaze/snappymail/issues/585)
- Light/Dark favicon.svg
  [#643](https://github.com/the-djmaze/snappymail/issues/643)
- Allow an account name/label
  [#571](https://github.com/the-djmaze/snappymail/issues/571)

### Changed
- Moved ServiceRemoteAutoLogin to plugin/extension
- Moved ServiceExternalSso to plugin/extension
- Moved ServiceExternalLogin to plugin/extension
- Renamed ManageSieveClient to SieveClient
- New Net/Imap/Smtp/Sieve Settings object system which allows
  setting SSL options per domain and verify_certificate by default
- Update plugins to use new Net/Imap/Smtp/Sieve Settings object
- Removed message double-click to full screen
  [#638](https://github.com/the-djmaze/snappymail/issues/638)

### Fixed
- ldap-identities-plugin
  [#647](https://github.com/the-djmaze/snappymail/pull/647) by @cm-schl
- OpenSSL v3 ciphers issue
  [#641](https://github.com/the-djmaze/snappymail/issues/641)

### Nextcloud
- Style PopupsNextcloudFiles view
- Link to internal files in composer


## 2.20.6 – 2022-11-08

### Fixed
- ?admin login failed
  [#642](https://github.com/the-djmaze/snappymail/issues/642)
- Resolve PHP 8.2 Creation of dynamic property is deprecated


## 2.20.5 – 2022-11-08

### Nextcloud
- Improved workaround for Nextcloud Content-Security-Policy bug
  Safari [#631](https://github.com/the-djmaze/snappymail/issues/631)
  Edge [#633](https://github.com/the-djmaze/snappymail/issues/633)
  Reported [#35013](https://github.com/nextcloud/server/issues/35013)


## 2.20.4 – 2022-11-07

### Fixed
- Nextcloud no-embed use iframe mode failed

### Nextcloud
- Workaround Nextcloud Content-Security-Policy bug
  Safari [#631](https://github.com/the-djmaze/snappymail/issues/631)
  Edge [#633](https://github.com/the-djmaze/snappymail/issues/633)
  Reported [#35013](https://github.com/nextcloud/server/issues/35013)


## 2.20.3 – 2022-11-07

### Added
- Throw decrypt errors
  [#632](https://github.com/the-djmaze/snappymail/issues/632)

### Changed
- Better multiple WYSIWYG registration system (not finished)
- Better handling of admin token cookie

### Fixed
- Cookie “name” has been rejected because it is already expired.
  [#636](https://github.com/the-djmaze/snappymail/issues/636)
- Content-Security-Policy 'strict-dynamic' was missing

### Nextcloud
- Better handling of Content-Security-Policy
  [#631](https://github.com/the-djmaze/snappymail/issues/631)
  [#633](https://github.com/the-djmaze/snappymail/issues/633)
- Nextcloud 23 Error Call to undefined method useStrictDynamic()
  [#634](https://github.com/the-djmaze/snappymail/issues/634)
- Use snappymail icon as favicon-mask.svg instead default nextcloud logo
  [#635](https://github.com/the-djmaze/snappymail/issues/635)


## 2.20.2 – 2022-11-05

### Added
- Add more search operators (i.e. copy lots of Gmail ones)
  [#625](https://github.com/the-djmaze/snappymail/issues/625)

### Changed
- Some CSS borders to var(--border-color)

### Fixed
- pgpDecrypt() using MailVelope the decrypt message was not green
- Shift + F in search bar resulted in forwarding message
  [#624](https://github.com/the-djmaze/snappymail/issues/624)

### Nextcloud
- auto login mechanism not working anymore
  [#627](https://github.com/the-djmaze/snappymail/issues/627)


## 2.20.1 – 2022-11-04

### Added
- Added CSS --dialog-border-clr and --dialog-border-radius
- Show lock (lock) glyph in messagelist for encrypted messages

### Fixed
- Decrypt failed when OpenPGP.js not loaded

### Nextcloud
- Now integrate with Nextcloud by default, but keep iframe option available
- Better theme integration with Nextcloud
- Use Nextcloud 18+ IEventDispatcher
- Solve Nextcloud 25 CSS issues
  [#620](https://github.com/the-djmaze/snappymail/issues/620)
- PutinICS does is not working for all calendar events
  [#622](https://github.com/the-djmaze/snappymail/issues/622)
- Update readme
  [#617](https://github.com/the-djmaze/snappymail/pull/617) by @cm-schl


## 2.20.0 – 2022-11-03

### Added
- Strip mailchimp tracking

### Changed
- Use some PHP typed properties
- Move bootstrap @less variables to CSS var()
- Improved theme styling

### Fixed
- CSS --dropdown-menu-background-color should be --dropdown-menu-bg-color

### Nextcloud
- Disable Nextcloud Impersonate check due to login/logout complications
  [#561](https://github.com/the-djmaze/snappymail/issues/561)
- Improved theme integration and be compatible with Breeze Dark


## 2.19.7 – 2022-11-02

### Added
- Make it clear that you are on the admin panel login screen
- Force PHP opcache_invalidate due to upgrade error reports "Missing version directory"

### Fixed
- Switching user (impersonate plugin) keeps old Email logged in
  [#561](https://github.com/the-djmaze/snappymail/issues/561)
- PGP Decryption / Encryption Failures
  [#600](https://github.com/the-djmaze/snappymail/issues/600)
- Undefined constant "OCA\SnappyMail\Util\RAINLOOP_APP_LIBRARIES_PATH
  [#601](https://github.com/the-djmaze/snappymail/issues/601)
- Cannot access admin panel
  [#602](https://github.com/the-djmaze/snappymail/issues/602)
- Wont show my emails
  [#604](https://github.com/the-djmaze/snappymail/issues/604)
- Return type of MailSo\Base\StreamFilters\LineEndings::filter
  [#610](https://github.com/the-djmaze/snappymail/issues/610)
- Create .pgp directory was missing

### Security
- Logger leaked some passwords

## 2.19.6 – 2022-10-31

### Added
- Put sign and encrypt options in composer dropdown menu and simplify te two existing buttons with a glyph
- Filter scripts UI let user understand which filter is active
  [#590](https://github.com/the-djmaze/snappymail/issues/590)

### Fixed
- Method 'GetRequest' not found in \MailSo\Base\Http
  [#585](https://github.com/the-djmaze/snappymail/issues/585)

### Changed
- Base Domain setup enhancements
- Cleanup MailSo MailClient using __call()
- Domain settings handling and store as JSON instead of ini
- Some JavaScript changes
- When try to login IMAP/SMTP/SIEVE but STARTTLS is required, force STARTTLS
- Embed admin panel into Nextcloud (with autologin, no need for separate login)
- Don't set default_domain in Nextcloud when already set

### Removed
- Nextcloud dark mode, it is incomplete

### Deprecated
- nothing
