## 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()
- Custom SASLMechanisms fail in IMAP when the connection is secure
[#1484](https://github.com/the-djmaze/snappymail/pull/1484)
## 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 by @rezaei92
[#1286](https://github.com/the-djmaze/snappymail/pull/1286)
### 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 by @hampoelz
[#1363](https://github.com/the-djmaze/snappymail/pull/1363)
- 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 by @avinash-0007
[#1362](https://github.com/the-djmaze/snappymail/pull/1362)
- 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 by @SergeyMosin
[#1347](https://github.com/the-djmaze/snappymail/pull/1347)
- 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 `
`
[#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 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?) by @tkasch
[#1304](https://github.com/the-djmaze/snappymail/pull/1304)
## 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 by @SergeyMosin
[#1248](https://github.com/the-djmaze/snappymail/pull/1248)
- 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 by @SergeyMosin
[#1248](https://github.com/the-djmaze/snappymail/pull/1248)
- in mobile mode hide folders(left) panel when a folder is clicked by @SergeyMosin
[#1248](https://github.com/the-djmaze/snappymail/pull/1248)
- spellcheck the subject when 'allowSpellcheck' setting is true by @SergeyMosin
[#1248](https://github.com/the-djmaze/snappymail/pull/1248)
- 'collapse_blockquotes', 'allow_spellcheck' and 'mail_list_grouped' to admin settings ('defaults' section) by @SergeyMosin
[#1248](https://github.com/the-djmaze/snappymail/pull/1248)
- 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 by @SergeyMosin
[#1248](https://github.com/the-djmaze/snappymail/pull/1248)
- if applicable set '\\answered' or '$forwarded' flag after a message is sent so the proper icon is shown in the message list view by @SergeyMosin
[#1248](https://github.com/the-djmaze/snappymail/pull/1248)
### 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 by @SergeyMosin
[#1234](https://github.com/the-djmaze/snappymail/pull/1234)
- 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)
- `` tag 'style' is lost in replies by @SergeyMosin
[#1248](https://github.com/the-djmaze/snappymail/pull/1248)
- unseen indicator is not shown in thread view when 'listGrouped' settings is false by @SergeyMosin
[#1248](https://github.com/the-djmaze/snappymail/pull/1248)
- 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 by @SergeyMosin
[#1248](https://github.com/the-djmaze/snappymail/pull/1248)
- 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. by @SergeyMosin
[#1248](https://github.com/the-djmaze/snappymail/pull/1248)
- Improve UX of "Put in Calendar" option in plugin by @theronakpatel
[#1259](https://github.com/the-djmaze/snappymail/pull/1259)
## 2.28.4 – 2023-07-10
### Added
- application.ini msg_default_action by @SergeyMosin
[#1204](https://github.com/the-djmaze/snappymail/pull/1204)
- application.ini view_show_next_message by @SergeyMosin
[#1204](https://github.com/the-djmaze/snappymail/pull/1204)
- application.ini view_images by @SergeyMosin
[#1204](https://github.com/the-djmaze/snappymail/pull/1204)
- nextcloud add ability to include custom php file in InstallStep migration by @SergeyMosin
[#1197](https://github.com/the-djmaze/snappymail/pull/1197)
- 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 by @rezaei92
[#1200](https://github.com/the-djmaze/snappymail/pull/1200)
### 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 by @SergeyMosin
[#1204](https://github.com/the-djmaze/snappymail/pull/1204)
- 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 by @mayswind
[#1157](https://github.com/the-djmaze/snappymail/pull/1157)
- Update Polish translation by @tinola
[#1156](https://github.com/the-djmaze/snappymail/pull/1156)
### 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 by @ner00
[#1124](https://github.com/the-djmaze/snappymail/pull/1124)
- Update Traditional Chinese (Taiwan) by @chiyi4488
[#1107](https://github.com/the-djmaze/snappymail/pull/1107)
- Update Russian by @konkere
[#1108](https://github.com/the-djmaze/snappymail/pull/1108)
- Update Italian by @cm-schl
[#1094](https://github.com/the-djmaze/snappymail/pull/1094)
- Update French by @hguilbert
[#1102](https://github.com/the-djmaze/snappymail/pull/1102)
- Update German by @cm-schl
[#1087](https://github.com/the-djmaze/snappymail/pull/1087)
### 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 `