git subrepo commit (merge) mailcow/src/mailcow-dockerized

subrepo: subdir:   "mailcow/src/mailcow-dockerized"
  merged:   "02ae5285"
upstream: origin:   "https://github.com/mailcow/mailcow-dockerized.git"
  branch:   "master"
  commit:   "649a5c01"
git-subrepo: version:  "0.4.3"
  origin:   "???"
  commit:   "???"
Change-Id: I870ad468fba026cc5abf3c5699ed1e12ff28b32b
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/CHANGELOG.md b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/CHANGELOG.md
deleted file mode 100644
index 4ddae6e..0000000
--- a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/CHANGELOG.md
+++ /dev/null
@@ -1,678 +0,0 @@
-# Changelog
-
-## [1.11.0](https://github.com/ddeboer/imap/tree/1.11.0) (2020-11-30)
-
-[Full Changelog](https://github.com/ddeboer/imap/compare/1.10.1...1.11.0)
-
-**Implemented enhancements:**
-
-- PHP 8 Compatibility [\#481](https://github.com/ddeboer/imap/issues/481)
-- \[GA\] PHP 8 compatibility fix [\#483](https://github.com/ddeboer/imap/pull/483) ([Slamdunk](https://github.com/Slamdunk))
-- Support PHP 8.0, require PHP 7.3 [\#482](https://github.com/ddeboer/imap/pull/482) ([Slamdunk](https://github.com/Slamdunk))
-
-**Fixed bugs:**
-
-- Fix: Outlook date format [\#480](https://github.com/ddeboer/imap/pull/480) ([gajosadrian](https://github.com/gajosadrian))
-
-**Closed issues:**
-
-- Closing Connection [\#479](https://github.com/ddeboer/imap/issues/479)
-- Problem with charset of message part / DataPartInfo [\#475](https://github.com/ddeboer/imap/issues/475)
-- Unsupported charset "X-UNKNOWN" [\#425](https://github.com/ddeboer/imap/issues/425)
-
-## [1.10.1](https://github.com/ddeboer/imap/tree/1.10.1) (2020-08-26)
-
-[Full Changelog](https://github.com/ddeboer/imap/compare/1.10.0...1.10.1)
-
-**Fixed bugs:**
-
-- getThread and getMessageSequence not using with the same id [\#469](https://github.com/ddeboer/imap/issues/469)
-- imap\_thread: use absolude ids [\#474](https://github.com/ddeboer/imap/pull/474) ([Slamdunk](https://github.com/Slamdunk))
-
-**Closed issues:**
-
-- How to get a message by Message-ID [\#472](https://github.com/ddeboer/imap/issues/472)
-- Mail with e-sign [\#467](https://github.com/ddeboer/imap/issues/467)
-- Duplicate method definition in MessageInterface [\#455](https://github.com/ddeboer/imap/issues/455)
-- Missed errors in search method [\#444](https://github.com/ddeboer/imap/issues/444)
-
-**Merged pull requests:**
-
-- Subtype not always present [\#473](https://github.com/ddeboer/imap/pull/473) ([Piskvor](https://github.com/Piskvor))
-- Improved error handling for message search method [\#445](https://github.com/ddeboer/imap/pull/445) ([ikarol](https://github.com/ikarol))
-
-## [1.10.0](https://github.com/ddeboer/imap/tree/1.10.0) (2020-01-24)
-
-[Full Changelog](https://github.com/ddeboer/imap/compare/1.9.0...1.10.0)
-
-**Implemented enhancements:**
-
-- Handle comments \(CFWS\) in Date header + not-valid formats [\#439](https://github.com/ddeboer/imap/pull/439) ([pupaxxo](https://github.com/pupaxxo))
-- Support PHP 7.4, require PHP 7.2 [\#433](https://github.com/ddeboer/imap/pull/433) ([Slamdunk](https://github.com/Slamdunk))
-
-**Closed issues:**
-
-- Invalid Date header when trying to fetching date on not RFC compliant emails [\#438](https://github.com/ddeboer/imap/issues/438)
-
-**Merged pull requests:**
-
-- Clear the last used mailbox cache when closing a connection [\#447](https://github.com/ddeboer/imap/pull/447) ([dhzavann](https://github.com/dhzavann))
-- README: update PHP version to match composer.json [\#441](https://github.com/ddeboer/imap/pull/441) ([Slamdunk](https://github.com/Slamdunk))
-- Typo [\#440](https://github.com/ddeboer/imap/pull/440) ([OskarStark](https://github.com/OskarStark))
-
-## [1.9.0](https://github.com/ddeboer/imap/tree/1.9.0) (2019-11-25)
-
-[Full Changelog](https://github.com/ddeboer/imap/compare/1.8.0...1.9.0)
-
-**Implemented enhancements:**
-
-- Quota: let's also test the numbers [\#431](https://github.com/ddeboer/imap/pull/431) ([Slamdunk](https://github.com/Slamdunk))
-- Add getQuota method using imap\_get\_quotaroot to Connection class [\#430](https://github.com/ddeboer/imap/pull/430) ([arkadiusjonczek](https://github.com/arkadiusjonczek))
-
-**Closed issues:**
-
-- markAsSeen\(\)  not work [\#415](https://github.com/ddeboer/imap/issues/415)
-
-**Merged pull requests:**
-
-- CS Fix: strip redundant php docs [\#428](https://github.com/ddeboer/imap/pull/428) ([Slamdunk](https://github.com/Slamdunk))
-- Fix: Variable name [\#412](https://github.com/ddeboer/imap/pull/412) ([localheinz](https://github.com/localheinz))
-
-## [1.8.0](https://github.com/ddeboer/imap/tree/1.8.0) (2019-04-15)
-
-[Full Changelog](https://github.com/ddeboer/imap/compare/1.7.2...1.8.0)
-
-**Implemented enhancements:**
-
-- Add phpstan-strict-rules, expose PartiInterface::getDescription\(\) [\#409](https://github.com/ddeboer/imap/pull/409) ([Slamdunk](https://github.com/Slamdunk))
-
-## [1.7.2](https://github.com/ddeboer/imap/tree/1.7.2) (2019-04-12)
-
-[Full Changelog](https://github.com/ddeboer/imap/compare/1.7.1...1.7.2)
-
-**Fixed bugs:**
-
-- Handle message/rfc822 when content-disposition is missing [\#410](https://github.com/ddeboer/imap/pull/410) ([Daredzik](https://github.com/Daredzik))
-
-## [1.7.1](https://github.com/ddeboer/imap/tree/1.7.1) (2019-03-18)
-
-[Full Changelog](https://github.com/ddeboer/imap/compare/1.7.0...1.7.1)
-
-**Fixed bugs:**
-
-- Encoding problem with 1.7 [\#405](https://github.com/ddeboer/imap/issues/405)
-- imap\_search/imap\_sort: default params must not be passed if unspecified [\#406](https://github.com/ddeboer/imap/pull/406) ([Slamdunk](https://github.com/Slamdunk))
-
-## [1.7.0](https://github.com/ddeboer/imap/tree/1.7.0) (2019-03-04)
-
-[Full Changelog](https://github.com/ddeboer/imap/compare/1.6.0...1.7.0)
-
-**Implemented enhancements:**
-
-- Docker and Travis differs in handling new message eols [\#404](https://github.com/ddeboer/imap/pull/404) ([Slamdunk](https://github.com/Slamdunk))
-- Update PHP-CS-Fixer rules [\#403](https://github.com/ddeboer/imap/pull/403) ([Slamdunk](https://github.com/Slamdunk))
-- Add charset for imap\_search or imap\_sort [\#402](https://github.com/ddeboer/imap/pull/402) ([Slamdunk](https://github.com/Slamdunk))
-- PHPStan clean ups [\#400](https://github.com/ddeboer/imap/pull/400) ([Slamdunk](https://github.com/Slamdunk))
-- Adding an undelete\(\) message method [\#386](https://github.com/ddeboer/imap/pull/386) ([C-Duv](https://github.com/C-Duv))
-
-**Closed issues:**
-
-- Convert from GBK \(X-GBK\) to UTF-8 Issue [\#395](https://github.com/ddeboer/imap/issues/395)
-
-**Merged pull requests:**
-
-- Add new ResourceCheckFailureException to handle imap\_check\(\) false [\#399](https://github.com/ddeboer/imap/pull/399) ([pyatnitsev](https://github.com/pyatnitsev))
-- Remove GBK -\> X-GBK Alias and add X-GBK -\> GBK [\#396](https://github.com/ddeboer/imap/pull/396) ([pyatnitsev](https://github.com/pyatnitsev))
-- Add Feature Requests to README.md [\#394](https://github.com/ddeboer/imap/pull/394) ([Slamdunk](https://github.com/Slamdunk))
-
-## [1.6.0](https://github.com/ddeboer/imap/tree/1.6.0) (2018-12-04)
-
-[Full Changelog](https://github.com/ddeboer/imap/compare/1.5.5...1.6.0)
-
-**Implemented enhancements:**
-
-- Require PHP ^7.1 [\#257](https://github.com/ddeboer/imap/issues/257)
-- Require PHP ^7.1 [\#383](https://github.com/ddeboer/imap/pull/383) ([Slamdunk](https://github.com/Slamdunk))
-- Add ability to pass options and retries to imap\_open [\#382](https://github.com/ddeboer/imap/pull/382) ([Slamdunk](https://github.com/Slamdunk))
-- Docker setup for running tests [\#374](https://github.com/ddeboer/imap/pull/374) ([LeadTechVisas](https://github.com/LeadTechVisas))
-- Get messages by UID sequence [\#373](https://github.com/ddeboer/imap/pull/373) ([LeadTechVisas](https://github.com/LeadTechVisas))
-
-**Fixed bugs:**
-
-- Undeliverable mail: attachment parsing error [\#334](https://github.com/ddeboer/imap/issues/334)
-- imap\_getmailboxes returns false; [\#134](https://github.com/ddeboer/imap/issues/134)
-- Fix mailbox name as only numbers [\#381](https://github.com/ddeboer/imap/pull/381) ([Slamdunk](https://github.com/Slamdunk))
-- Gracefully handle possible non-array return value of imap\_getmailboxes [\#372](https://github.com/ddeboer/imap/pull/372) ([Slamdunk](https://github.com/Slamdunk))
-
-**Closed issues:**
-
-- \[AUTHENTICATIONFAILED\] Authentication failed - Too many login failures [\#368](https://github.com/ddeboer/imap/issues/368)
-- last folder in list [\#353](https://github.com/ddeboer/imap/issues/353)
-- Caching IMAP server connections [\#88](https://github.com/ddeboer/imap/issues/88)
-
-## [1.5.5](https://github.com/ddeboer/imap/tree/1.5.5) (2018-08-21)
-
-[Full Changelog](https://github.com/ddeboer/imap/compare/1.5.4...1.5.5)
-
-**Fixed bugs:**
-
-- Plain text attachments are not identified as Attachment parts [\#341](https://github.com/ddeboer/imap/issues/341)
-- Handle plain/text attachments without Content-Type header [\#367](https://github.com/ddeboer/imap/pull/367) ([Slamdunk](https://github.com/Slamdunk))
-
-## [1.5.4](https://github.com/ddeboer/imap/tree/1.5.4) (2018-08-19)
-
-[Full Changelog](https://github.com/ddeboer/imap/compare/1.5.3...1.5.4)
-
-**Fixed bugs:**
-
-- Very long filename, result of getFilename\(\) = NULL? [\#365](https://github.com/ddeboer/imap/issues/365)
-- Support RFC2231 attachment filenames [\#366](https://github.com/ddeboer/imap/pull/366) ([Slamdunk](https://github.com/Slamdunk))
-
-## [1.5.3](https://github.com/ddeboer/imap/tree/1.5.3) (2018-07-20)
-
-[Full Changelog](https://github.com/ddeboer/imap/compare/1.5.2...1.5.3)
-
-**Fixed bugs:**
-
-- Dates: handle UT timezone [\#361](https://github.com/ddeboer/imap/pull/361) ([Slamdunk](https://github.com/Slamdunk))
-
-## [1.5.2](https://github.com/ddeboer/imap/tree/1.5.2) (2018-07-10)
-
-[Full Changelog](https://github.com/ddeboer/imap/compare/1.5.1...1.5.2)
-
-**Fixed bugs:**
-
-- Fails to load Message Headers [\#358](https://github.com/ddeboer/imap/issues/358)
-- Handle invalid headers [\#359](https://github.com/ddeboer/imap/pull/359) ([Slamdunk](https://github.com/Slamdunk))
-
-## [1.5.1](https://github.com/ddeboer/imap/tree/1.5.1) (2018-05-04)
-
-[Full Changelog](https://github.com/ddeboer/imap/compare/1.5.0...1.5.1)
-
-**Fixed bugs:**
-
-- getContent\(\) method returns wrong content part [\#342](https://github.com/ddeboer/imap/issues/342)
-- Fix handle of attachment messages with attachments [\#343](https://github.com/ddeboer/imap/pull/343) ([Slamdunk](https://github.com/Slamdunk))
-
-## [1.5.0](https://github.com/ddeboer/imap/tree/1.5.0) (2018-03-26)
-
-[Full Changelog](https://github.com/ddeboer/imap/compare/1.4.1...1.5.0)
-
-**Implemented enhancements:**
-
-- ImapResource: cache last opened mailbox [\#328](https://github.com/ddeboer/imap/pull/328) ([Slamdunk](https://github.com/Slamdunk))
-
-**Fixed bugs:**
-
-- AbstractPart::isAttachment\(\) handle unknown part type [\#302](https://github.com/ddeboer/imap/pull/302) ([Slamdunk](https://github.com/Slamdunk))
-
-## [1.4.1](https://github.com/ddeboer/imap/tree/1.4.1) (2018-03-22)
-
-[Full Changelog](https://github.com/ddeboer/imap/compare/1.4.0...1.4.1)
-
-**Fixed bugs:**
-
-- Return value of Ddeboer\\Imap\\Message\\AbstractPart::getDecodedContent\(\) must be of the type string, boolean returned [\#284](https://github.com/ddeboer/imap/issues/284)
-- base64\_decode may return false in PHP \< 7.1 [\#324](https://github.com/ddeboer/imap/pull/324) ([Slamdunk](https://github.com/Slamdunk))
-
-**Merged pull requests:**
-
-- Add entry in README about Mailbox::addMessage [\#325](https://github.com/ddeboer/imap/pull/325) ([soywod](https://github.com/soywod))
-
-## [1.4.0](https://github.com/ddeboer/imap/tree/1.4.0) (2018-03-19)
-
-[Full Changelog](https://github.com/ddeboer/imap/compare/1.3.1...1.4.0)
-
-**Implemented enhancements:**
-
-- Lazy load Message [\#320](https://github.com/ddeboer/imap/pull/320) ([Slamdunk](https://github.com/Slamdunk))
-
-**Fixed bugs:**
-
-- Invalid argument supplied for foreach\(\) in Parameters.php line 52 [\#317](https://github.com/ddeboer/imap/issues/317)
-- Message "11964" does not exist: imap\_fetchstructure\(\): Bad message number [\#310](https://github.com/ddeboer/imap/issues/310)
-- imap\_mime\_header\_decode may return false [\#322](https://github.com/ddeboer/imap/pull/322) ([Slamdunk](https://github.com/Slamdunk))
-
-## [1.3.1](https://github.com/ddeboer/imap/tree/1.3.1) (2018-03-09)
-
-[Full Changelog](https://github.com/ddeboer/imap/compare/1.3.0...1.3.1)
-
-**Implemented enhancements:**
-
-- Allow empty port [\#312](https://github.com/ddeboer/imap/pull/312) ([Slamdunk](https://github.com/Slamdunk))
-
-**Closed issues:**
-
-- getServerString\(\) with no port [\#311](https://github.com/ddeboer/imap/issues/311)
-
-## [1.3.0](https://github.com/ddeboer/imap/tree/1.3.0) (2018-02-28)
-
-[Full Changelog](https://github.com/ddeboer/imap/compare/1.2.3...1.3.0)
-
-**Implemented enhancements:**
-
-- Implement bulk-move [\#306](https://github.com/ddeboer/imap/pull/306) ([particleflux](https://github.com/particleflux))
-
-**Closed issues:**
-
-- feature: Bulk move [\#305](https://github.com/ddeboer/imap/issues/305)
-
-**Merged pull requests:**
-
-- README.md: add `Unknown search criterion: OR` note [\#304](https://github.com/ddeboer/imap/pull/304) ([Slamdunk](https://github.com/Slamdunk))
-
-## [1.2.3](https://github.com/ddeboer/imap/tree/1.2.3) (2018-02-09)
-
-[Full Changelog](https://github.com/ddeboer/imap/compare/1.2.2...1.2.3)
-
-**Fixed bugs:**
-
-- $part-\>type can be 9 [\#301](https://github.com/ddeboer/imap/issues/301)
-
-**Merged pull requests:**
-
-- README.md: code-coverage has higher priority than Scrutinizer [\#300](https://github.com/ddeboer/imap/pull/300) ([Slamdunk](https://github.com/Slamdunk))
-
-## [1.2.2](https://github.com/ddeboer/imap/tree/1.2.2) (2018-02-05)
-
-[Full Changelog](https://github.com/ddeboer/imap/compare/1.2.1...1.2.2)
-
-**Implemented enhancements:**
-
-- Allow PHPUnit ^7.0 [\#296](https://github.com/ddeboer/imap/pull/296) ([Slamdunk](https://github.com/Slamdunk))
-
-**Fixed bugs:**
-
-- Attachment-\>getFilename return null [\#297](https://github.com/ddeboer/imap/issues/297)
-- Don't handle multiplart as an attachment [\#298](https://github.com/ddeboer/imap/pull/298) ([Slamdunk](https://github.com/Slamdunk))
-
-## [1.2.1](https://github.com/ddeboer/imap/tree/1.2.1) (2018-01-29)
-
-[Full Changelog](https://github.com/ddeboer/imap/compare/1.2.0...1.2.1)
-
-**Implemented enhancements:**
-
-- Introduce strict comparison [\#289](https://github.com/ddeboer/imap/pull/289) ([Slamdunk](https://github.com/Slamdunk))
-
-**Fixed bugs:**
-
-- Invalid Date header found: "Thur, 04 Jan 2018 06:44:23 +0400" [\#293](https://github.com/ddeboer/imap/issues/293)
-- MessageIterator::current\(\) fails when there are no messages [\#288](https://github.com/ddeboer/imap/issues/288)
-- Remove weekday while parsing date header [\#294](https://github.com/ddeboer/imap/pull/294) ([Slamdunk](https://github.com/Slamdunk))
-- MessageIterator: forbid raw calls [\#290](https://github.com/ddeboer/imap/pull/290) ([Slamdunk](https://github.com/Slamdunk))
-
-## [1.2.0](https://github.com/ddeboer/imap/tree/1.2.0) (2018-01-15)
-
-[Full Changelog](https://github.com/ddeboer/imap/compare/1.1.2...1.2.0)
-
-**Implemented enhancements:**
-
-- Make imap\_append\(\) optional arguments reachable [\#280](https://github.com/ddeboer/imap/pull/280) ([Slamdunk](https://github.com/Slamdunk))
-- PHPStan: introduce static analysis [\#276](https://github.com/ddeboer/imap/pull/276) ([Slamdunk](https://github.com/Slamdunk))
-
-**Fixed bugs:**
-
-- getAttachments\(\) problem when mixin inline and attachment [\#281](https://github.com/ddeboer/imap/issues/281)
-- UnexpectedEncodingException: Cannot decode "5" [\#278](https://github.com/ddeboer/imap/issues/278)
-- Handle correctly multiple nested attachments [\#283](https://github.com/ddeboer/imap/pull/283) ([Slamdunk](https://github.com/Slamdunk))
-- Manageable UnexpectedEncodingException [\#282](https://github.com/ddeboer/imap/pull/282) ([Slamdunk](https://github.com/Slamdunk))
-
-**Closed issues:**
-
-- Appending mail with options [\#279](https://github.com/ddeboer/imap/issues/279)
-
-## [1.1.2](https://github.com/ddeboer/imap/tree/1.1.2) (2017-12-12)
-
-[Full Changelog](https://github.com/ddeboer/imap/compare/1.1.1...1.1.2)
-
-**Fixed bugs:**
-
-- Unsupported charset "134": mb\_convert\_encoding\(\): Illegal character encoding specified [\#270](https://github.com/ddeboer/imap/issues/270)
-- Support Microsoft charset values [\#271](https://github.com/ddeboer/imap/pull/271) ([Slamdunk](https://github.com/Slamdunk))
-
-## [1.1.1](https://github.com/ddeboer/imap/tree/1.1.1) (2017-11-10)
-
-[Full Changelog](https://github.com/ddeboer/imap/compare/1.1.0...1.1.1)
-
-**Implemented enhancements:**
-
-- Transcoder: expand charset aliases list [\#267](https://github.com/ddeboer/imap/pull/267) ([Slamdunk](https://github.com/Slamdunk))
-
-**Fixed bugs:**
-
-- Charset aliases: fix to lowercase search [\#266](https://github.com/ddeboer/imap/pull/266) ([Slamdunk](https://github.com/Slamdunk))
-
-**Merged pull requests:**
-
-- README.md: add timeout note [\#263](https://github.com/ddeboer/imap/pull/263) ([Slamdunk](https://github.com/Slamdunk))
-
-## [1.1.0](https://github.com/ddeboer/imap/tree/1.1.0) (2017-11-06)
-
-[Full Changelog](https://github.com/ddeboer/imap/compare/1.0.8...1.1.0)
-
-**Implemented enhancements:**
-
-- Deprecate MessageInterface::maskAsSeen\(\) in favour of MessageInterface::markAsSeen\(\) [\#255](https://github.com/ddeboer/imap/pull/255) ([Slamdunk](https://github.com/Slamdunk))
-- Lazy load structured Headers [\#250](https://github.com/ddeboer/imap/pull/250) ([Slamdunk](https://github.com/Slamdunk))
-- Implement imap\_thread [\#249](https://github.com/ddeboer/imap/pull/249) ([Slamdunk](https://github.com/Slamdunk))
-- Require ext-iconv [\#248](https://github.com/ddeboer/imap/pull/248) ([Slamdunk](https://github.com/Slamdunk))
-- Message Part: expose $partNumber [\#244](https://github.com/ddeboer/imap/pull/244) ([wujku](https://github.com/wujku))
-- Add Mockability helpers and documentation [\#236](https://github.com/ddeboer/imap/pull/236) ([Slamdunk](https://github.com/Slamdunk))
-- Add missing interface change for \#225 [\#233](https://github.com/ddeboer/imap/pull/233) ([Slamdunk](https://github.com/Slamdunk))
-- Connection: check if the connection is still active with `imap\_ping` [\#232](https://github.com/ddeboer/imap/pull/232) ([wujku](https://github.com/wujku))
-- Message: add `References` and `In-Reply-To` headers shortcuts [\#230](https://github.com/ddeboer/imap/pull/230) ([wujku](https://github.com/wujku))
-- Added bulk set / clear flags functionality for mailbox messages [\#225](https://github.com/ddeboer/imap/pull/225) ([wujku](https://github.com/wujku))
-
-**Merged pull requests:**
-
-- make docs more obvious [\#252](https://github.com/ddeboer/imap/pull/252) ([lgg](https://github.com/lgg))
-- README.md: add Table of Contents with Travis checker [\#234](https://github.com/ddeboer/imap/pull/234) ([Slamdunk](https://github.com/Slamdunk))
-
-## [1.0.8](https://github.com/ddeboer/imap/tree/1.0.8) (2017-10-27)
-
-[Full Changelog](https://github.com/ddeboer/imap/compare/1.0.7...1.0.8)
-
-**Implemented enhancements:**
-
-- Headers: no catchable exception [\#246](https://github.com/ddeboer/imap/issues/246)
-- imap\_thread [\#113](https://github.com/ddeboer/imap/issues/113)
-
-**Fixed bugs:**
-
-- \[TypeError\] Return value of Ddeboer\Imap\Message\AbstractMessage::getId\(\) must be of the type string, null returned [\#253](https://github.com/ddeboer/imap/issues/253)
-- BasicMessageInterface::getId\(\) can be null [\#254](https://github.com/ddeboer/imap/pull/254) ([Slamdunk](https://github.com/Slamdunk))
-
-## [1.0.7](https://github.com/ddeboer/imap/tree/1.0.7) (2017-10-16)
-
-[Full Changelog](https://github.com/ddeboer/imap/compare/1.0.6...1.0.7)
-
-**Fixed bugs:**
-
-- Problem with a IMAP resource stream [\#245](https://github.com/ddeboer/imap/issues/245)
-- IMAP resource must be checked at every call for mailbox context [\#247](https://github.com/ddeboer/imap/pull/247) ([Slamdunk](https://github.com/Slamdunk))
-
-## [1.0.6](https://github.com/ddeboer/imap/tree/1.0.6) (2017-10-12)
-
-[Full Changelog](https://github.com/ddeboer/imap/compare/1.0.5...1.0.6)
-
-**Fixed bugs:**
-
-- \[TypeError\] Return value of AbstractMessage::getFrom\(\) must be an instance of EmailAddress, null returned [\#241](https://github.com/ddeboer/imap/issues/241)
-- Message: Date header can be absent [\#243](https://github.com/ddeboer/imap/pull/243) ([Slamdunk](https://github.com/Slamdunk))
-- Message: From header can be absent [\#242](https://github.com/ddeboer/imap/pull/242) ([Slamdunk](https://github.com/Slamdunk))
-
-## [1.0.5](https://github.com/ddeboer/imap/tree/1.0.5) (2017-10-12)
-
-[Full Changelog](https://github.com/ddeboer/imap/compare/1.0.4...1.0.5)
-
-**Fixed bugs:**
-
-- Use set\_error\_handler with late exception [\#240](https://github.com/ddeboer/imap/pull/240) ([Slamdunk](https://github.com/Slamdunk))
-
-## [1.0.4](https://github.com/ddeboer/imap/tree/1.0.4) (2017-10-11)
-
-[Full Changelog](https://github.com/ddeboer/imap/compare/1.0.3...1.0.4)
-
-**Implemented enhancements:**
-
-- Avoid \(set|restor\)\_error\_handler [\#239](https://github.com/ddeboer/imap/pull/239) ([Slamdunk](https://github.com/Slamdunk))
-
-**Fixed bugs:**
-
-- Current Transcoder class does not support all charsets.  [\#237](https://github.com/ddeboer/imap/issues/237)
-- Relay also iconv during decoding [\#238](https://github.com/ddeboer/imap/pull/238) ([Slamdunk](https://github.com/Slamdunk))
-
-## [1.0.3](https://github.com/ddeboer/imap/tree/1.0.3) (2017-10-11)
-
-[Full Changelog](https://github.com/ddeboer/imap/compare/1.0.2...1.0.3)
-
-**Fixed bugs:**
-
-- Attachment::getFilename\(\) may be null on inline-att, widen return type [\#235](https://github.com/ddeboer/imap/pull/235) ([wujku](https://github.com/wujku))
-
-## [1.0.2](https://github.com/ddeboer/imap/tree/1.0.2) (2017-10-06)
-
-[Full Changelog](https://github.com/ddeboer/imap/compare/1.0.1...1.0.2)
-
-**Fixed bugs:**
-
-- Issue with saving XML attachments [\#228](https://github.com/ddeboer/imap/issues/228)
-- Do not charset-decode attachments [\#231](https://github.com/ddeboer/imap/pull/231) ([Slamdunk](https://github.com/Slamdunk))
-
-## [1.0.1](https://github.com/ddeboer/imap/tree/1.0.1) (2017-10-05)
-
-[Full Changelog](https://github.com/ddeboer/imap/compare/1.0.0...1.0.1)
-
-**Fixed bugs:**
-
-- Error with attachment charset [\#226](https://github.com/ddeboer/imap/issues/226)
-- If charset is not specified defaults to "us-ascii" [\#227](https://github.com/ddeboer/imap/pull/227) ([Slamdunk](https://github.com/Slamdunk))
-
-## [1.0.0](https://github.com/ddeboer/imap/tree/1.0.0) (2017-10-04)
-
-[Full Changelog](https://github.com/ddeboer/imap/compare/0.5.2...1.0.0)
-
-**Implemented enhancements:**
-
-- Need getAll for headers [\#200](https://github.com/ddeboer/imap/issues/200)
-- Tests: implement @covers to avoid false positive on code-coverage [\#188](https://github.com/ddeboer/imap/issues/188)
-- Remove commented code [\#174](https://github.com/ddeboer/imap/issues/174)
-- Regex in SearchExpressions [\#157](https://github.com/ddeboer/imap/issues/157)
-- How do I get unread messages count? [\#98](https://github.com/ddeboer/imap/issues/98)
-- Add mocking ability through Interfaces [\#221](https://github.com/ddeboer/imap/pull/221) ([Slamdunk](https://github.com/Slamdunk))
-- Wrap imap resource to periodically check its status [\#220](https://github.com/ddeboer/imap/pull/220) ([Slamdunk](https://github.com/Slamdunk))
-- Add more coding-standard rules [\#218](https://github.com/ddeboer/imap/pull/218) ([Slamdunk](https://github.com/Slamdunk))
-- Always keep unseen: remove keepUnseen, add markAsSeen [\#217](https://github.com/ddeboer/imap/pull/217) ([Slamdunk](https://github.com/Slamdunk))
-- Embedded messages: refactor \#106 [\#216](https://github.com/ddeboer/imap/pull/216) ([Slamdunk](https://github.com/Slamdunk))
-- Headers now extends \ArrayIterator [\#215](https://github.com/ddeboer/imap/pull/215) ([Slamdunk](https://github.com/Slamdunk))
-- Implement imap\_mail\_copy [\#214](https://github.com/ddeboer/imap/pull/214) ([Slamdunk](https://github.com/Slamdunk))
-- Imap sort [\#213](https://github.com/ddeboer/imap/pull/213) ([Slamdunk](https://github.com/Slamdunk))
-- Increased code-coverage [\#211](https://github.com/ddeboer/imap/pull/211) ([Slamdunk](https://github.com/Slamdunk))
-- Update to PHPUnit ^6.2 [\#209](https://github.com/ddeboer/imap/pull/209) ([Slamdunk](https://github.com/Slamdunk))
-- Use specific exceptions to ease user catches [\#208](https://github.com/ddeboer/imap/pull/208) ([Slamdunk](https://github.com/Slamdunk))
-- Wrap Exception on invalid Date header [\#205](https://github.com/ddeboer/imap/pull/205) ([Slamdunk](https://github.com/Slamdunk))
-- Add tests for \#144 set flags functionalities [\#203](https://github.com/ddeboer/imap/pull/203) ([Slamdunk](https://github.com/Slamdunk))
-- Add imap\_fetchheader\(\) functionality to get raw headers [\#202](https://github.com/ddeboer/imap/pull/202) ([Slamdunk](https://github.com/Slamdunk))
-- Parse all email type headers [\#199](https://github.com/ddeboer/imap/pull/199) ([Slamdunk](https://github.com/Slamdunk))
-- Test search conditions [\#198](https://github.com/ddeboer/imap/pull/198) ([Slamdunk](https://github.com/Slamdunk))
-- Mailbox: get status [\#192](https://github.com/ddeboer/imap/pull/192) ([Slamdunk](https://github.com/Slamdunk))
-- SearchExpression is a Search\ConditionInterface [\#191](https://github.com/ddeboer/imap/pull/191) ([Slamdunk](https://github.com/Slamdunk))
-- SearchCondition: \_\_toString\(\) -\> toString\(\) [\#187](https://github.com/ddeboer/imap/pull/187) ([Slamdunk](https://github.com/Slamdunk))
-- Retain imap\_getmailboxes\(\) results [\#184](https://github.com/ddeboer/imap/pull/184) ([Slamdunk](https://github.com/Slamdunk))
-- Add type hints and return types [\#183](https://github.com/ddeboer/imap/pull/183) ([Slamdunk](https://github.com/Slamdunk))
-- Exception: increase verbosity with imap\_alerts\(\) and imap\_errors\(\) [\#182](https://github.com/ddeboer/imap/pull/182) ([Slamdunk](https://github.com/Slamdunk))
-- Add coding-standards [\#181](https://github.com/ddeboer/imap/pull/181) ([Slamdunk](https://github.com/Slamdunk))
-- Travis: re-enable code-coverage on scrutinizer [\#177](https://github.com/ddeboer/imap/pull/177) ([Slamdunk](https://github.com/Slamdunk))
-- Add .gitattributes to remove from releases unneded files [\#173](https://github.com/ddeboer/imap/pull/173) ([Slamdunk](https://github.com/Slamdunk))
-- Travis: use local Dovecot installation [\#170](https://github.com/ddeboer/imap/pull/170) ([Slamdunk](https://github.com/Slamdunk))
-- Need all Headers in string format [\#149](https://github.com/ddeboer/imap/pull/149) ([FlashWS](https://github.com/FlashWS))
-- Get raw mail [\#146](https://github.com/ddeboer/imap/pull/146) ([styxit](https://github.com/styxit))
-- add getBcc\(\), Set, Clear Flag\(\Seen, \Answered, \Flagged, \Deleted, and \Draft\), getHeadersRaw\(\) [\#144](https://github.com/ddeboer/imap/pull/144) ([trungpv93](https://github.com/trungpv93))
-
-**Fixed bugs:**
-
-- Search\Condition needs charset escaping/indication [\#190](https://github.com/ddeboer/imap/issues/190)
-- imap\_utf7\_\(encode|decode\) -\> mb\_convert\_encoding [\#185](https://github.com/ddeboer/imap/issues/185)
-- España [\#176](https://github.com/ddeboer/imap/issues/176)
-- getHeaders\(\) decode broke information [\#171](https://github.com/ddeboer/imap/issues/171)
-- Date format for date search condition [\#168](https://github.com/ddeboer/imap/issues/168)
-- Error when trying fetch messages from container [\#167](https://github.com/ddeboer/imap/issues/167)
-- Attachment encoding error [\#158](https://github.com/ddeboer/imap/issues/158)
-- getFilename\(\) is empty and no attachment, even when there is an attachment. [\#142](https://github.com/ddeboer/imap/issues/142)
-- Encoding issues [\#136](https://github.com/ddeboer/imap/issues/136)
-- URGENT: The timezone could not be found in the database [\#135](https://github.com/ddeboer/imap/issues/135)
-- Incorrect transcoding of text attachments [\#132](https://github.com/ddeboer/imap/issues/132)
-- Undefined offset  [\#123](https://github.com/ddeboer/imap/issues/123)
-- ICS file not supported as attachment [\#120](https://github.com/ddeboer/imap/issues/120)
-- Should iconv be a requirement? [\#115](https://github.com/ddeboer/imap/issues/115)
-- KeepUnseen doen't work [\#92](https://github.com/ddeboer/imap/issues/92)
-- PHP Fatal error Failed to parse time string in ddeboer/imap/src/Message.php [\#89](https://github.com/ddeboer/imap/issues/89)
-- encoding issue [\#85](https://github.com/ddeboer/imap/issues/85)
-- keepUnseen not working correctly with Hotmail [\#84](https://github.com/ddeboer/imap/issues/84)
-- Iconv Exception [\#78](https://github.com/ddeboer/imap/issues/78)
-- $message-\>getAttachments\(\) doesn't recognize some attachments [\#74](https://github.com/ddeboer/imap/issues/74)
-- Message::move\(\) doesn't work. [\#73](https://github.com/ddeboer/imap/issues/73)
-- Message\Part: part number must distinguish original message [\#223](https://github.com/ddeboer/imap/pull/223) ([Slamdunk](https://github.com/Slamdunk))
-- Recursive Embedded email body bug [\#222](https://github.com/ddeboer/imap/pull/222) ([Slamdunk](https://github.com/Slamdunk))
-- Exclude HTML from allowed attachment subtype [\#212](https://github.com/ddeboer/imap/pull/212) ([Slamdunk](https://github.com/Slamdunk))
-- Fix imap\_mail\_move behaviour and test it [\#207](https://github.com/ddeboer/imap/pull/207) ([Slamdunk](https://github.com/Slamdunk))
-- Undefined encoding: throw exception [\#197](https://github.com/ddeboer/imap/pull/197) ([Slamdunk](https://github.com/Slamdunk))
-- Message charset: mb\_convert\_encoding + aliases [\#196](https://github.com/ddeboer/imap/pull/196) ([Slamdunk](https://github.com/Slamdunk))
-- Mailbox: only UTF-8 names [\#193](https://github.com/ddeboer/imap/pull/193) ([Slamdunk](https://github.com/Slamdunk))
-- Search\Date\AbstractDate: fix format to RFC-3501 [\#189](https://github.com/ddeboer/imap/pull/189) ([Slamdunk](https://github.com/Slamdunk))
-- Travis: fix failing tests [\#172](https://github.com/ddeboer/imap/pull/172) ([Slamdunk](https://github.com/Slamdunk))
-- Return body of single-part HTML message as HTML, not text [\#101](https://github.com/ddeboer/imap/pull/101) ([joker806](https://github.com/joker806))
-- Implement "undisclosed recipients" addresses [\#86](https://github.com/ddeboer/imap/pull/86) ([darit](https://github.com/darit))
-
-**Closed issues:**
-
-- Potential memory issue with attachments [\#195](https://github.com/ddeboer/imap/issues/195)
-- Explain Message::delete [\#175](https://github.com/ddeboer/imap/issues/175)
-- Get raw message [\#161](https://github.com/ddeboer/imap/issues/161)
-- Composer install problem [\#160](https://github.com/ddeboer/imap/issues/160)
-- Transcoder not exist [\#154](https://github.com/ddeboer/imap/issues/154)
-- The library doesn't support using sort by [\#151](https://github.com/ddeboer/imap/issues/151)
-- Office 365 - Array to string conversion error [\#131](https://github.com/ddeboer/imap/issues/131)
-- Is there a method to turn a seen message into an "unseen" one ? [\#130](https://github.com/ddeboer/imap/issues/130)
-- Create mailbox [\#126](https://github.com/ddeboer/imap/issues/126)
-- Move and Delete Message not working [\#112](https://github.com/ddeboer/imap/issues/112)
-- Problem on production server [\#111](https://github.com/ddeboer/imap/issues/111)
-- Authentication failed for a Gmail account [\#109](https://github.com/ddeboer/imap/issues/109)
-- A method to run IMAP commands? [\#83](https://github.com/ddeboer/imap/issues/83)
-
-**Merged pull requests:**
-
-- Update README.md to latest develop changes [\#224](https://github.com/ddeboer/imap/pull/224) ([Slamdunk](https://github.com/Slamdunk))
-- Add Filippo Tessarotto as an author of the package [\#219](https://github.com/ddeboer/imap/pull/219) ([Slamdunk](https://github.com/Slamdunk))
-- README.md: call Connection::expunge after move and delete [\#210](https://github.com/ddeboer/imap/pull/210) ([Slamdunk](https://github.com/Slamdunk))
-- Remove misleading Mailbox::expunge\(\) [\#206](https://github.com/ddeboer/imap/pull/206) ([Slamdunk](https://github.com/Slamdunk))
-- Add CHANGELOG.md [\#194](https://github.com/ddeboer/imap/pull/194) ([Slamdunk](https://github.com/Slamdunk))
-- README.md updates [\#178](https://github.com/ddeboer/imap/pull/178) ([Slamdunk](https://github.com/Slamdunk))
-
-## [0.5.2](https://github.com/ddeboer/imap/tree/0.5.2) (2015-12-03)
-
-[Full Changelog](https://github.com/ddeboer/imap/compare/0.5.1...0.5.2)
-
-**Closed issues:**
-
-- $message-\>getAttachments\(\) returns null if message has no attachments [\#80](https://github.com/ddeboer/imap/issues/80)
-- Email objects visibility [\#76](https://github.com/ddeboer/imap/issues/76)
-
-**Merged pull requests:**
-
-- Fixed the keepUnseen method [\#95](https://github.com/ddeboer/imap/pull/95) ([aeyoll](https://github.com/aeyoll))
-- Mark Mailbox as countable, fix doc comments [\#91](https://github.com/ddeboer/imap/pull/91) ([krzysiekpiasecki](https://github.com/krzysiekpiasecki))
-- Message::getAttachments confirm to signature [\#82](https://github.com/ddeboer/imap/pull/82) ([boekkooi](https://github.com/boekkooi))
-- Added hasMailbox to Connection [\#81](https://github.com/ddeboer/imap/pull/81) ([boekkooi](https://github.com/boekkooi))
-- Make sure imap connection are reopened [\#79](https://github.com/ddeboer/imap/pull/79) ([joserobleda](https://github.com/joserobleda))
-
-## [0.5.1](https://github.com/ddeboer/imap/tree/0.5.1) (2015-02-01)
-
-[Full Changelog](https://github.com/ddeboer/imap/compare/0.5.0...0.5.1)
-
-**Closed issues:**
-
-- imap\_open error  [\#72](https://github.com/ddeboer/imap/issues/72)
-- $message-\>getAttachments\(\) does not return anything, even though a message has at least one attachment [\#71](https://github.com/ddeboer/imap/issues/71)
-- Prepare docs for 1.0 [\#69](https://github.com/ddeboer/imap/issues/69)
-- "date" header is not reliable [\#63](https://github.com/ddeboer/imap/issues/63)
-- File Attachments don't show up [\#55](https://github.com/ddeboer/imap/issues/55)
-
-**Merged pull requests:**
-
-- Add support for attachments without content disposition [\#70](https://github.com/ddeboer/imap/pull/70) ([ddeboer](https://github.com/ddeboer))
-
-## [0.5.0](https://github.com/ddeboer/imap/tree/0.5.0) (2015-01-24)
-
-[Full Changelog](https://github.com/ddeboer/imap/compare/0.4.0...0.5.0)
-
-**Closed issues:**
-
-- Use utf8\_encode\(\) function to encode content [\#66](https://github.com/ddeboer/imap/issues/66)
-- Please add function order by date [\#59](https://github.com/ddeboer/imap/issues/59)
-- mb\_convert\_encoding breaks code [\#57](https://github.com/ddeboer/imap/issues/57)
-- How get I getMessages but newest first ... [\#11](https://github.com/ddeboer/imap/issues/11)
-
-## [0.4.0](https://github.com/ddeboer/imap/tree/0.4.0) (2015-01-04)
-
-[Full Changelog](https://github.com/ddeboer/imap/compare/0.3.1...0.4.0)
-
-**Closed issues:**
-
-- Please add 6th parameter to imap\_open call [\#62](https://github.com/ddeboer/imap/issues/62)
-- Should Message::delete\(\) use the Message UID? [\#46](https://github.com/ddeboer/imap/issues/46)
-- mb\_convert\_encoding\(\): Illegal character encoding specified [\#35](https://github.com/ddeboer/imap/issues/35)
-- Deleting a message isn't working [\#30](https://github.com/ddeboer/imap/issues/30)
-- imap\_header doesn't work with message uid [\#26](https://github.com/ddeboer/imap/issues/26)
-
-**Merged pull requests:**
-
-- Added basic requirement [\#61](https://github.com/ddeboer/imap/pull/61) ([nikoskip](https://github.com/nikoskip))
-- FIX: PHP error: "Cannot declare class Ddeboer\Imap\Search\Text\Text ..." [\#58](https://github.com/ddeboer/imap/pull/58) ([racztiborzoltan](https://github.com/racztiborzoltan))
-- Message::delete sets the FT\_UID flag.  Fixes \#30 Fixes \#46 [\#54](https://github.com/ddeboer/imap/pull/54) ([ctalbot](https://github.com/ctalbot))
-- Allow binary-encoded part content [\#48](https://github.com/ddeboer/imap/pull/48) ([joker806](https://github.com/joker806))
-- Fix CS [\#47](https://github.com/ddeboer/imap/pull/47) ([xelan](https://github.com/xelan))
-- fixed typo [\#45](https://github.com/ddeboer/imap/pull/45) ([xelan](https://github.com/xelan))
-
-## [0.3.1](https://github.com/ddeboer/imap/tree/0.3.1) (2014-08-11)
-
-[Full Changelog](https://github.com/ddeboer/imap/compare/0.3.0...0.3.1)
-
-**Merged pull requests:**
-
-- \imap\_header dosen't work with UID [\#44](https://github.com/ddeboer/imap/pull/44) ([ysramirez](https://github.com/ysramirez))
-
-## [0.3.0](https://github.com/ddeboer/imap/tree/0.3.0) (2014-08-10)
-
-[Full Changelog](https://github.com/ddeboer/imap/compare/0.2...0.3.0)
-
-**Closed issues:**
-
-- please remove useless wiki [\#42](https://github.com/ddeboer/imap/issues/42)
-- Travis tests allways fail? [\#40](https://github.com/ddeboer/imap/issues/40)
-- Garbled e-mail body encoding [\#27](https://github.com/ddeboer/imap/issues/27)
-- Improve docs [\#25](https://github.com/ddeboer/imap/issues/25)
-- "undisclosed-recipients" throws error [\#23](https://github.com/ddeboer/imap/issues/23)
-
-**Merged pull requests:**
-
-- correct minor typo [\#43](https://github.com/ddeboer/imap/pull/43) ([cordoval](https://github.com/cordoval))
-- Utf-8 encode body content. [\#39](https://github.com/ddeboer/imap/pull/39) ([cmoralesweb](https://github.com/cmoralesweb))
-- Fix regex parsing the date header \(allowing multiple brackets\) [\#38](https://github.com/ddeboer/imap/pull/38) ([joker806](https://github.com/joker806))
-- Allow empty connection flags [\#34](https://github.com/ddeboer/imap/pull/34) ([joker806](https://github.com/joker806))
-- Fixed typo [\#32](https://github.com/ddeboer/imap/pull/32) ([abhinavkumar940](https://github.com/abhinavkumar940))
-
-## [0.2](https://github.com/ddeboer/imap/tree/0.2) (2013-11-24)
-
-[Full Changelog](https://github.com/ddeboer/imap/compare/0.1...0.2)
-
-## [0.1](https://github.com/ddeboer/imap/tree/0.1) (2013-11-22)
-
-[Full Changelog](https://github.com/ddeboer/imap/compare/c02d49cdb9246901bb00d211a0f2aba208f6fab6...0.1)
-
-**Closed issues:**
-
-- Prevent setting SEEN flag [\#20](https://github.com/ddeboer/imap/issues/20)
-- Add tests [\#18](https://github.com/ddeboer/imap/issues/18)
-- delete messages [\#9](https://github.com/ddeboer/imap/issues/9)
-- README is missing basic usage [\#7](https://github.com/ddeboer/imap/issues/7)
-- Subject and other texts are decoded incorrectly  [\#3](https://github.com/ddeboer/imap/issues/3)
-
-**Merged pull requests:**
-
-- also fetch inline attachments [\#24](https://github.com/ddeboer/imap/pull/24) ([kaiserlos](https://github.com/kaiserlos))
-- since leading slash is always needed [\#22](https://github.com/ddeboer/imap/pull/22) ([huglester](https://github.com/huglester))
-- Added missed createMailbox\($name\) function [\#19](https://github.com/ddeboer/imap/pull/19) ([burci](https://github.com/burci))
-- Added move and delete function to message + expunge function [\#17](https://github.com/ddeboer/imap/pull/17) ([burci](https://github.com/burci))
-- Clean up some unused variable [\#16](https://github.com/ddeboer/imap/pull/16) ([burci](https://github.com/burci))
-- Fixed mailbox encoding [\#15](https://github.com/ddeboer/imap/pull/15) ([burci](https://github.com/burci))
-- Create new mailbox [\#14](https://github.com/ddeboer/imap/pull/14) ([burci](https://github.com/burci))
-- Fixed bug in getDecodedContent with 'format=flowed' email [\#13](https://github.com/ddeboer/imap/pull/13) ([burci](https://github.com/burci))
-- Fixed date parsing for some imap servers [\#12](https://github.com/ddeboer/imap/pull/12) ([thelfensdrfer](https://github.com/thelfensdrfer))
-- Add support for more complex search expressions. [\#10](https://github.com/ddeboer/imap/pull/10) ([jamesiarmes](https://github.com/jamesiarmes))
-- Allow user to change server connection flags [\#6](https://github.com/ddeboer/imap/pull/6) ([mvar](https://github.com/mvar))
-- Improvements in EmailAddress class [\#4](https://github.com/ddeboer/imap/pull/4) ([mvar](https://github.com/mvar))
-
-
-
-\* *This Changelog was automatically generated by [github_changelog_generator](https://github.com/github-changelog-generator/github-changelog-generator)*
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/README.md b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/README.md
index 6b16183..c57ab01 100644
--- a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/README.md
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/README.md
@@ -1,37 +1,15 @@
-# IMAP library
+# PHP IMAP library
 
 [![Latest Stable Version](https://img.shields.io/packagist/v/ddeboer/imap.svg)](https://packagist.org/packages/ddeboer/imap)
 [![Downloads](https://img.shields.io/packagist/dt/ddeboer/imap.svg)](https://packagist.org/packages/ddeboer/imap)
 [![Integrate](https://github.com/ddeboer/imap/workflows/Integrate/badge.svg?branch=master)](https://github.com/ddeboer/imap/actions)
 [![Code Coverage](https://codecov.io/gh/ddeboer/imap/coverage.svg?branch=master)](https://codecov.io/gh/ddeboer/imap?branch=master)
 
-A PHP 7.3+ library to read and process e-mails over IMAP.
+A PHP IMAP library to read and process e-mails over IMAP protocol, built with robust Object-Oriented architecture.
 
-This library requires [IMAP](https://secure.php.net/manual/en/book.imap.php),
-[iconv](https://secure.php.net/manual/en/book.iconv.php) and
-[Multibyte String](https://secure.php.net/manual/en/book.mbstring.php) extensions installed.
-
-## Table of Contents
-
-1. [Feature Requests](#feature-requests)
-1. [Installation](#installation)
-1. [Usage](#usage)
-    1. [Connect and Authenticate](#connect-and-authenticate)
-    1. [Mailboxes](#mailboxes)
-    1. [Messages](#messages)
-        1. [Searching for Messages](#searching-for-messages)
-        1. [Unknown search criterion: OR](#unknown-search-criterion-or)
-        1. [Message Properties and Operations](#message-properties-and-operations)
-    1. [Message Attachments](#message-attachments)
-    1. [Embedded Messages](#embedded-messages)
-    1. [Timeouts](#timeouts)
-1. [Mock the library](#mock-the-library)
-1. [Running the Tests](#running-the-tests)
-    1. [Running Tests using Docker](#running-tests-using-docker)
-
-## Feature Requests
-
-[![Feature Requests](https://feathub.com/ddeboer/imap?format=svg)](https://feathub.com/ddeboer/imap)
+This library requires PHP >= 7.4 with [IMAP](https://www.php.net/manual/en/book.imap.php),
+[iconv](https://www.php.net/manual/en/book.iconv.php) and
+[Multibyte String](https://www.php.net/manual/en/book.mbstring.php) extensions installed.
 
 ## Installation
 
@@ -236,7 +214,6 @@
 ```php
 $mailbox = $connection->getMailbox('another-mailbox');
 $message->move($mailbox);
-$connection->expunge();
 ```
 
 Deleting messages:
@@ -321,40 +298,10 @@
 ```
 
 You can also copy `phpunit.xml.dist` file to a custom `phpunit.xml` and put
-these environment variables in it:
-
-```xml
-<?xml version="1.0" encoding="UTF-8"?>
-<phpunit
-    bootstrap="./vendor/autoload.php"
-    colors="true"
-    verbose="true"
->
-    <testsuites>
-        <testsuite name="ddeboer/imap">
-            <directory>./tests/</directory>
-        </testsuite>
-    </testsuites>
-    <filter>
-        <whitelist>
-            <directory suffix=".php">./src</directory>
-        </whitelist>
-    </filter>
-    <php>
-        <env name="IMAP_SERVER_NAME" value="my.imap.server.com" />
-        <env name="IMAP_SERVER_PORT" value="60993" />
-        <env name="IMAP_USERNAME" value="johndoe" />
-        <env name="IMAP_PASSWORD" value="p4ssword" />
-    </php>
-</phpunit>
-```
+these environment variables in it.
 
 **WARNING** Tests create new mailboxes without removing them.
 
-### Running Tests using Docker
-
-If you have Docker installed you can run the tests locally with the following command:
-
 ```
 $ docker-compose run tests
 ```
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/composer.json b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/composer.json
index d56ea38..92b4a07 100644
--- a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/composer.json
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/composer.json
@@ -22,23 +22,18 @@
         }
     ],
     "require": {
-        "php": "^7.3 || ^8.0",
+        "php": "^7.4 || ^8.0",
         "ext-iconv": "*",
         "ext-imap": "*",
         "ext-mbstring": "*"
     },
     "require-dev": {
-        "friendsofphp/php-cs-fixer": "^2.16.7",
-        "laminas/laminas-mail": "^2.12.3",
-        "phpstan/phpstan": "^0.12.57",
-        "phpstan/phpstan-phpunit": "^0.12.16",
-        "phpstan/phpstan-strict-rules": "^0.12.5",
-        "phpunit/phpunit": "^9.4.3"
-    },
-    "config": {
-        "platform": {
-            "php": "7.3"
-        }
+        "friendsofphp/php-cs-fixer": "^2.18.6",
+        "laminas/laminas-mail": "^2.14.0",
+        "phpstan/phpstan": "^0.12.84",
+        "phpstan/phpstan-phpunit": "^0.12.18",
+        "phpstan/phpstan-strict-rules": "^0.12.9",
+        "phpunit/phpunit": "^9.5.4"
     },
     "autoload": {
         "psr-4": {
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Connection.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Connection.php
index 4f9f405..d9f2bb6 100644
--- a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Connection.php
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Connection.php
@@ -9,7 +9,6 @@
 use Ddeboer\Imap\Exception\ImapGetmailboxesException;
 use Ddeboer\Imap\Exception\ImapNumMsgException;
 use Ddeboer\Imap\Exception\ImapQuotaException;
-use Ddeboer\Imap\Exception\InvalidResourceException;
 use Ddeboer\Imap\Exception\MailboxDoesNotExistException;
 
 /**
@@ -17,25 +16,16 @@
  */
 final class Connection implements ConnectionInterface
 {
+    private ImapResourceInterface $resource;
+    private string $server;
     /**
-     * @var ImapResourceInterface
+     * @var null|MailboxInterface[]
      */
-    private $resource;
-
+    private ?array $mailboxes = null;
     /**
-     * @var string
+     * @var null|array<int|string, \stdClass>
      */
-    private $server;
-
-    /**
-     * @var null|array
-     */
-    private $mailboxes;
-
-    /**
-     * @var null|array
-     */
-    private $mailboxNames;
+    private ?array $mailboxNames = null;
 
     /**
      * Constructor.
@@ -48,25 +38,16 @@
         $this->server   = $server;
     }
 
-    /**
-     * Get IMAP resource.
-     */
     public function getResource(): ImapResourceInterface
     {
         return $this->resource;
     }
 
-    /**
-     * Delete all messages marked for deletion.
-     */
     public function expunge(): bool
     {
         return \imap_expunge($this->resource->getStream());
     }
 
-    /**
-     * Close connection.
-     */
     public function close(int $flag = 0): bool
     {
         $this->resource->clearLastMailboxUsedCache();
@@ -74,9 +55,6 @@
         return \imap_close($this->resource->getStream(), $flag);
     }
 
-    /**
-     * Get Mailbox quota.
-     */
     public function getQuota(string $root = 'INBOX'): array
     {
         $errorMessage = null;
@@ -106,14 +84,10 @@
         return $return;
     }
 
-    /**
-     * Get a list of mailboxes (also known as folders).
-     *
-     * @return MailboxInterface[]
-     */
     public function getMailboxes(): array
     {
         $this->initMailboxNames();
+        \assert(null !== $this->mailboxNames);
 
         if (null === $this->mailboxes) {
             $this->mailboxes = [];
@@ -125,39 +99,24 @@
         return $this->mailboxes;
     }
 
-    /**
-     * Check that a mailbox with the given name exists.
-     *
-     * @param string $name Mailbox name
-     */
     public function hasMailbox(string $name): bool
     {
         $this->initMailboxNames();
+        \assert(null !== $this->mailboxNames);
 
         return isset($this->mailboxNames[$name]);
     }
 
-    /**
-     * Get a mailbox by its name.
-     *
-     * @param string $name Mailbox name
-     *
-     * @throws MailboxDoesNotExistException If mailbox does not exist
-     */
     public function getMailbox(string $name): MailboxInterface
     {
         if (false === $this->hasMailbox($name)) {
             throw new MailboxDoesNotExistException(\sprintf('Mailbox name "%s" does not exist', $name));
         }
+        \assert(isset($this->mailboxNames[$name]));
 
         return new Mailbox($this->resource, $name, $this->mailboxNames[$name]);
     }
 
-    /**
-     * Count number of messages not in any mailbox.
-     *
-     * @return int
-     */
     public function count()
     {
         $return = \imap_num_msg($this->resource->getStream());
@@ -169,21 +128,11 @@
         return $return;
     }
 
-    /**
-     * Check if the connection is still active.
-     *
-     * @throws InvalidResourceException If connection was closed
-     */
     public function ping(): bool
     {
         return \imap_ping($this->resource->getStream());
     }
 
-    /**
-     * Create mailbox.
-     *
-     * @throws CreateMailboxException
-     */
     public function createMailbox(string $name): MailboxInterface
     {
         if (false === \imap_createmailbox($this->resource->getStream(), $this->server . \mb_convert_encoding($name, 'UTF7-IMAP', 'UTF-8'))) {
@@ -196,11 +145,6 @@
         return $this->getMailbox($name);
     }
 
-    /**
-     * Create mailbox.
-     *
-     * @throws DeleteMailboxException
-     */
     public function deleteMailbox(MailboxInterface $mailbox): void
     {
         if (false === \imap_deletemailbox($this->resource->getStream(), $mailbox->getFullEncodedName())) {
@@ -211,9 +155,6 @@
         $this->resource->clearLastMailboxUsedCache();
     }
 
-    /**
-     * Get mailbox names.
-     */
     private function initMailboxNames(): void
     {
         if (null !== $this->mailboxNames) {
@@ -227,8 +168,9 @@
         }
 
         foreach ($mailboxesInfo as $mailboxInfo) {
-            $name                      = \mb_convert_encoding(\str_replace($this->server, '', $mailboxInfo->name), 'UTF-8', 'UTF7-IMAP');
+            $name = \mb_convert_encoding(\str_replace($this->server, '', $mailboxInfo->name), 'UTF-8', 'UTF7-IMAP');
             \assert(\is_string($name));
+
             $this->mailboxNames[$name] = $mailboxInfo;
         }
     }
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/ConnectionInterface.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/ConnectionInterface.php
index e76077f..6289339 100644
--- a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/ConnectionInterface.php
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/ConnectionInterface.php
@@ -4,6 +4,11 @@
 
 namespace Ddeboer\Imap;
 
+use Ddeboer\Imap\Exception\CreateMailboxException;
+use Ddeboer\Imap\Exception\DeleteMailboxException;
+use Ddeboer\Imap\Exception\InvalidResourceException;
+use Ddeboer\Imap\Exception\MailboxDoesNotExistException;
+
 /**
  * A connection to an IMAP server that is authenticated for a user.
  */
@@ -26,11 +31,15 @@
 
     /**
      * Check if the connection is still active.
+     *
+     * @throws InvalidResourceException If connection was closed
      */
     public function ping(): bool;
 
     /**
      * Get Mailbox quota.
+     *
+     * @return array<string, int>
      */
     public function getQuota(string $root = 'INBOX'): array;
 
@@ -52,16 +61,22 @@
      * Get a mailbox by its name.
      *
      * @param string $name Mailbox name
+     *
+     * @throws MailboxDoesNotExistException If mailbox does not exist
      */
     public function getMailbox(string $name): MailboxInterface;
 
     /**
      * Create mailbox.
+     *
+     * @throws CreateMailboxException
      */
     public function createMailbox(string $name): MailboxInterface;
 
     /**
      * Delete mailbox.
+     *
+     * @throws DeleteMailboxException
      */
     public function deleteMailbox(MailboxInterface $mailbox): void;
 }
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Exception/AbstractException.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Exception/AbstractException.php
index 26c1e58..6537a05 100644
--- a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Exception/AbstractException.php
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Exception/AbstractException.php
@@ -6,10 +6,7 @@
 
 abstract class AbstractException extends \RuntimeException
 {
-    /**
-     * @var array
-     */
-    private static $errorLabels = [
+    private const ERROR_LABELS = [
         \E_ERROR                => 'E_ERROR',
         \E_WARNING              => 'E_WARNING',
         \E_PARSE                => 'E_PARSE',
@@ -27,16 +24,11 @@
         \E_USER_DEPRECATED      => 'E_USER_DEPRECATED',
     ];
 
-    /**
-     * @param string     $message  The exception message
-     * @param int        $code     The exception code
-     * @param \Throwable $previous The previous exception
-     */
     final public function __construct(string $message, int $code = 0, \Throwable $previous = null)
     {
         $errorType = '';
-        if (isset(self::$errorLabels[$code])) {
-            $errorType = \sprintf('[%s] ', self::$errorLabels[$code]);
+        if (isset(self::ERROR_LABELS[$code])) {
+            $errorType = \sprintf('[%s] ', self::ERROR_LABELS[$code]);
         }
 
         $joinString      = "\n- ";
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/ImapResource.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/ImapResource.php
index 60c1617..123ea23 100644
--- a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/ImapResource.php
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/ImapResource.php
@@ -13,19 +13,11 @@
 final class ImapResource implements ImapResourceInterface
 {
     /**
-     * @var mixed
+     * @var resource
      */
     private $resource;
-
-    /**
-     * @var null|MailboxInterface
-     */
-    private $mailbox;
-
-    /**
-     * @var null|string
-     */
-    private static $lastMailboxUsedCache;
+    private ?MailboxInterface $mailbox           = null;
+    private static ?string $lastMailboxUsedCache = null;
 
     /**
      * Constructor.
@@ -38,13 +30,6 @@
         $this->mailbox  = $mailbox;
     }
 
-    /**
-     * Get IMAP resource stream.
-     *
-     * @throws InvalidResourceException
-     *
-     * @return resource
-     */
     public function getStream()
     {
         if (false === \is_resource($this->resource) || 'imap' !== \get_resource_type($this->resource)) {
@@ -56,9 +41,6 @@
         return $this->resource;
     }
 
-    /**
-     * Clear last mailbox used cache.
-     */
     public function clearLastMailboxUsedCache(): void
     {
         self::$lastMailboxUsedCache = null;
@@ -85,7 +67,7 @@
     /**
      * Check whether the current mailbox is open.
      *
-     * @param mixed $resource
+     * @param resource $resource
      */
     private static function isMailboxOpen(MailboxInterface $mailbox, $resource): bool
     {
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/ImapResourceInterface.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/ImapResourceInterface.php
index 03c16f7..cf49f6b 100644
--- a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/ImapResourceInterface.php
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/ImapResourceInterface.php
@@ -4,11 +4,15 @@
 
 namespace Ddeboer\Imap;
 
+use Ddeboer\Imap\Exception\InvalidResourceException;
+
 interface ImapResourceInterface
 {
     /**
      * Get IMAP resource stream.
      *
+     * @throws InvalidResourceException
+     *
      * @return resource
      */
     public function getStream();
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Mailbox.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Mailbox.php
index 1544aff..2f77799 100644
--- a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Mailbox.php
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Mailbox.php
@@ -18,20 +18,9 @@
  */
 final class Mailbox implements MailboxInterface
 {
-    /**
-     * @var ImapResourceInterface
-     */
-    private $resource;
-
-    /**
-     * @var string
-     */
-    private $name;
-
-    /**
-     * @var \stdClass
-     */
-    private $info;
+    private ImapResourceInterface $resource;
+    private string $name;
+    private \stdClass $info;
 
     /**
      * Constructor.
@@ -47,17 +36,11 @@
         $this->info     = $info;
     }
 
-    /**
-     * Get mailbox decoded name.
-     */
     public function getName(): string
     {
         return $this->name;
     }
 
-    /**
-     * Get mailbox encoded path.
-     */
     public function getEncodedName(): string
     {
         /** @var string $name */
@@ -66,35 +49,21 @@
         return (string) \preg_replace('/^{.+}/', '', $name);
     }
 
-    /**
-     * Get mailbox encoded full name.
-     */
     public function getFullEncodedName(): string
     {
         return $this->info->name;
     }
 
-    /**
-     * Get mailbox attributes.
-     */
     public function getAttributes(): int
     {
         return $this->info->attributes;
     }
 
-    /**
-     * Get mailbox delimiter.
-     */
     public function getDelimiter(): string
     {
         return $this->info->delimiter;
     }
 
-    /**
-     * Get number of messages in this mailbox.
-     *
-     * @return int
-     */
     public function count()
     {
         $return = \imap_num_msg($this->resource->getStream());
@@ -106,9 +75,6 @@
         return $return;
     }
 
-    /**
-     * Get Mailbox status.
-     */
     public function getStatus(int $flags = null): \stdClass
     {
         $return = \imap_status($this->resource->getStream(), $this->getFullEncodedName(), $flags ?? \SA_ALL);
@@ -120,33 +86,16 @@
         return $return;
     }
 
-    /**
-     * Bulk Set Flag for Messages.
-     *
-     * @param string                       $flag    \Seen, \Answered, \Flagged, \Deleted, and \Draft
-     * @param array|MessageIterator|string $numbers Message numbers
-     */
     public function setFlag(string $flag, $numbers): bool
     {
         return \imap_setflag_full($this->resource->getStream(), $this->prepareMessageIds($numbers), $flag, \ST_UID);
     }
 
-    /**
-     * Bulk Clear Flag for Messages.
-     *
-     * @param string                       $flag    \Seen, \Answered, \Flagged, \Deleted, and \Draft
-     * @param array|MessageIterator|string $numbers Message numbers
-     */
     public function clearFlag(string $flag, $numbers): bool
     {
         return \imap_clearflag_full($this->resource->getStream(), $this->prepareMessageIds($numbers), $flag, \ST_UID);
     }
 
-    /**
-     * Get message ids.
-     *
-     * @param ConditionInterface $search Search expression (optional)
-     */
     public function getMessages(ConditionInterface $search = null, int $sortCriteria = null, bool $descending = false, string $charset = null): MessageIteratorInterface
     {
         if (null === $search) {
@@ -199,11 +148,6 @@
         return new MessageIterator($this->resource, $messageNumbers);
     }
 
-    /**
-     * Get message iterator for a sequence.
-     *
-     * @param string $sequence Message numbers
-     */
     public function getMessageSequence(string $sequence): MessageIteratorInterface
     {
         \imap_errors();
@@ -223,54 +167,38 @@
         return new MessageIterator($this->resource, $messageNumbers);
     }
 
-    /**
-     * Get a message by message number.
-     *
-     * @param int $number Message number
-     */
     public function getMessage(int $number): MessageInterface
     {
         return new Message($this->resource, $number);
     }
 
-    /**
-     * Get messages in this mailbox.
-     */
     public function getIterator(): MessageIteratorInterface
     {
         return $this->getMessages();
     }
 
-    /**
-     * Add a message to the mailbox.
-     */
     public function addMessage(string $message, string $options = null, DateTimeInterface $internalDate = null): bool
     {
         $arguments = [
             $this->resource->getStream(),
             $this->getFullEncodedName(),
             $message,
+            $options ?? '',
         ];
-        if (null !== $options) {
-            $arguments[] = $options;
-            if (null !== $internalDate) {
-                $arguments[] = $internalDate->format('d-M-Y H:i:s O');
-            }
+        if (null !== $internalDate) {
+            $arguments[] = $internalDate->format('d-M-Y H:i:s O');
         }
 
         return \imap_append(...$arguments);
     }
 
-    /**
-     * Returns a tree of threaded message for the current Mailbox.
-     */
     public function getThread(): array
     {
         \set_error_handler(static function (): bool {
             return true;
         });
 
-        /** @var array|false $tree */
+        /** @var array<string, int>|false $tree */
         $tree = \imap_thread($this->resource->getStream(), \SE_UID);
 
         \restore_error_handler();
@@ -278,29 +206,13 @@
         return false !== $tree ? $tree : [];
     }
 
-    /**
-     * Bulk move messages.
-     *
-     * @param array|MessageIterator|string $numbers Message numbers
-     * @param MailboxInterface             $mailbox Destination Mailbox to move the messages to
-     *
-     * @throws \Ddeboer\Imap\Exception\MessageMoveException
-     */
     public function move($numbers, MailboxInterface $mailbox): void
     {
-        if (!\imap_mail_move($this->resource->getStream(), $this->prepareMessageIds($numbers), $mailbox->getEncodedName(), \CP_UID)) {
+        if (!\imap_mail_copy($this->resource->getStream(), $this->prepareMessageIds($numbers), $mailbox->getEncodedName(), \CP_UID | \CP_MOVE)) {
             throw new MessageMoveException(\sprintf('Messages cannot be moved to "%s"', $mailbox->getName()));
         }
     }
 
-    /**
-     * Bulk copy messages.
-     *
-     * @param array|MessageIterator|string $numbers Message numbers
-     * @param MailboxInterface             $mailbox Destination Mailbox to copy the messages to
-     *
-     * @throws \Ddeboer\Imap\Exception\MessageCopyException
-     */
     public function copy($numbers, MailboxInterface $mailbox): void
     {
         if (!\imap_mail_copy($this->resource->getStream(), $this->prepareMessageIds($numbers), $mailbox->getEncodedName(), \CP_UID)) {
@@ -311,7 +223,7 @@
     /**
      * Prepare message ids for the use with bulk functions.
      *
-     * @param array|MessageIterator|string $messageIds Message numbers
+     * @param array<int, int|string>|MessageIterator|string $messageIds Message numbers
      */
     private function prepareMessageIds($messageIds): string
     {
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/MailboxInterface.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/MailboxInterface.php
index efe432d..067bdc2 100644
--- a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/MailboxInterface.php
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/MailboxInterface.php
@@ -5,10 +5,13 @@
 namespace Ddeboer\Imap;
 
 use DateTimeInterface;
+use Ddeboer\Imap\Message\PartInterface;
 use Ddeboer\Imap\Search\ConditionInterface;
 
 /**
  * An IMAP mailbox (commonly referred to as a 'folder').
+ *
+ * @extends \IteratorAggregate<int, MessageInterface>
  */
 interface MailboxInterface extends \Countable, \IteratorAggregate
 {
@@ -45,16 +48,16 @@
     /**
      * Bulk Set Flag for Messages.
      *
-     * @param string                       $flag    \Seen, \Answered, \Flagged, \Deleted, and \Draft
-     * @param array|MessageIterator|string $numbers Message numbers
+     * @param string                                        $flag    \Seen, \Answered, \Flagged, \Deleted, and \Draft
+     * @param array<int, int|string>|MessageIterator|string $numbers Message numbers
      */
     public function setFlag(string $flag, $numbers): bool;
 
     /**
      * Bulk Clear Flag for Messages.
      *
-     * @param string                       $flag    \Seen, \Answered, \Flagged, \Deleted, and \Draft
-     * @param array|MessageIterator|string $numbers Message numbers
+     * @param string                                        $flag    \Seen, \Answered, \Flagged, \Deleted, and \Draft
+     * @param array<int, int|string>|MessageIterator|string $numbers Message numbers
      */
     public function clearFlag(string $flag, $numbers): bool;
 
@@ -76,6 +79,8 @@
      * Get a message by message number.
      *
      * @param int $number Message number
+     *
+     * @return MessageInterface<PartInterface>
      */
     public function getMessage(int $number): MessageInterface;
 
@@ -91,14 +96,16 @@
 
     /**
      * Returns a tree of threaded message for the current Mailbox.
+     *
+     * @return array<string, int>
      */
     public function getThread(): array;
 
     /**
      * Bulk move messages.
      *
-     * @param array|MessageIterator|string $numbers Message numbers
-     * @param MailboxInterface             $mailbox Destination Mailbox to move the messages to
+     * @param array<int, int|string>|MessageIterator|string $numbers Message numbers
+     * @param MailboxInterface                              $mailbox Destination Mailbox to move the messages to
      *
      * @throws \Ddeboer\Imap\Exception\MessageMoveException
      */
@@ -107,8 +114,8 @@
     /**
      * Bulk copy messages.
      *
-     * @param array|MessageIterator|string $numbers Message numbers
-     * @param MailboxInterface             $mailbox Destination Mailbox to copy the messages to
+     * @param array<int, int|string>|MessageIterator|string $numbers Message numbers
+     * @param MailboxInterface                              $mailbox Destination Mailbox to copy the messages to
      *
      * @throws \Ddeboer\Imap\Exception\MessageCopyException
      */
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Message.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Message.php
index 843ce61..1a9d16e 100644
--- a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Message.php
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Message.php
@@ -18,35 +18,12 @@
  */
 final class Message extends Message\AbstractMessage implements MessageInterface
 {
-    /**
-     * @var bool
-     */
-    private $messageNumberVerified = false;
-
-    /**
-     * @var int
-     */
-    private $imapMsgNo = 0;
-
-    /**
-     * @var bool
-     */
-    private $structureLoaded = false;
-
-    /**
-     * @var null|Message\Headers
-     */
-    private $headers;
-
-    /**
-     * @var null|string
-     */
-    private $rawHeaders;
-
-    /**
-     * @var null|string
-     */
-    private $rawMessage;
+    private bool $messageNumberVerified = false;
+    private int $imapMsgNo              = 0;
+    private bool $structureLoaded       = false;
+    private ?Message\Headers $headers   = null;
+    private ?string $rawHeaders         = null;
+    private ?string $rawMessage         = null;
 
     /**
      * Constructor.
@@ -59,9 +36,6 @@
         parent::__construct($resource, $messageNumber, '1', new \stdClass());
     }
 
-    /**
-     * Lazy load structure.
-     */
     protected function lazyLoadStructure(): void
     {
         if (true === $this->structureLoaded) {
@@ -99,9 +73,6 @@
         $this->setStructure($structure);
     }
 
-    /**
-     * Ensure message exists.
-     */
     protected function assertMessageExists(int $messageNumber): void
     {
         if (true === $this->messageNumberVerified) {
@@ -138,9 +109,6 @@
         return $this->imapMsgNo;
     }
 
-    /**
-     * Get raw message headers.
-     */
     public function getRawHeaders(): string
     {
         if (null === $this->rawHeaders) {
@@ -156,11 +124,6 @@
         return $this->rawHeaders;
     }
 
-    /**
-     * Get the raw message, including all headers, parts, etc. unencoded and unparsed.
-     *
-     * @return string the raw message
-     */
     public function getRawMessage(): string
     {
         if (null === $this->rawMessage) {
@@ -170,9 +133,6 @@
         return $this->rawMessage;
     }
 
-    /**
-     * Get message headers.
-     */
     public function getHeaders(): Message\Headers
     {
         if (null === $this->headers) {
@@ -198,67 +158,44 @@
         $this->headers = null;
     }
 
-    /**
-     * Get message recent flag value (from headers).
-     */
     public function isRecent(): ?string
     {
-        return $this->getHeaders()->get('recent');
+        $recent = $this->getHeaders()->get('recent');
+        \assert(null === $recent || \is_string($recent));
+
+        return $recent;
     }
 
-    /**
-     * Get message unseen flag value (from headers).
-     */
     public function isUnseen(): bool
     {
         return 'U' === $this->getHeaders()->get('unseen');
     }
 
-    /**
-     * Get message flagged flag value (from headers).
-     */
     public function isFlagged(): bool
     {
         return 'F' === $this->getHeaders()->get('flagged');
     }
 
-    /**
-     * Get message answered flag value (from headers).
-     */
     public function isAnswered(): bool
     {
         return 'A' === $this->getHeaders()->get('answered');
     }
 
-    /**
-     * Get message deleted flag value (from headers).
-     */
     public function isDeleted(): bool
     {
         return 'D' === $this->getHeaders()->get('deleted');
     }
 
-    /**
-     * Get message draft flag value (from headers).
-     */
     public function isDraft(): bool
     {
         return 'X' === $this->getHeaders()->get('draft');
     }
 
-    /**
-     * Has the message been marked as read?
-     */
     public function isSeen(): bool
     {
         return 'N' !== $this->getHeaders()->get('recent') && 'U' !== $this->getHeaders()->get('unseen');
     }
 
-    /**
-     * Mark message as seen.
-     *
-     * @deprecated since version 1.1, to be removed in 2.0
-     */
     public function maskAsSeen(): bool
     {
         \trigger_error(\sprintf('%s is deprecated and will be removed in 2.0. Use %s::markAsSeen instead.', __METHOD__, __CLASS__), \E_USER_DEPRECATED);
@@ -266,19 +203,11 @@
         return $this->markAsSeen();
     }
 
-    /**
-     * Mark message as seen.
-     */
     public function markAsSeen(): bool
     {
         return $this->setFlag('\\Seen');
     }
 
-    /**
-     * Move message to another mailbox.
-     *
-     * @throws MessageCopyException
-     */
     public function copy(MailboxInterface $mailbox): void
     {
         // 'deleted' header changed, force to reload headers, would be better to set deleted flag to true on header
@@ -289,11 +218,6 @@
         }
     }
 
-    /**
-     * Move message to another mailbox.
-     *
-     * @throws MessageMoveException
-     */
     public function move(MailboxInterface $mailbox): void
     {
         // 'deleted' header changed, force to reload headers, would be better to set deleted flag to true on header
@@ -304,11 +228,6 @@
         }
     }
 
-    /**
-     * Delete message.
-     *
-     * @throws MessageDeleteException
-     */
     public function delete(): void
     {
         // 'deleted' header changed, force to reload headers, would be better to set deleted flag to true on header
@@ -319,11 +238,6 @@
         }
     }
 
-    /**
-     * Undelete message.
-     *
-     * @throws MessageUndeleteException
-     */
     public function undelete(): void
     {
         // 'deleted' header changed, force to reload headers, would be better to set deleted flag to false on header
@@ -333,11 +247,6 @@
         }
     }
 
-    /**
-     * Set Flag Message.
-     *
-     * @param string $flag \Seen, \Answered, \Flagged, \Deleted, and \Draft
-     */
     public function setFlag(string $flag): bool
     {
         $result = \imap_setflag_full($this->resource->getStream(), (string) $this->getNumber(), $flag, \ST_UID);
@@ -347,11 +256,6 @@
         return $result;
     }
 
-    /**
-     * Clear Flag Message.
-     *
-     * @param string $flag \Seen, \Answered, \Flagged, \Deleted, and \Draft
-     */
     public function clearFlag(string $flag): bool
     {
         $result = \imap_clearflag_full($this->resource->getStream(), (string) $this->getNumber(), $flag, \ST_UID);
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Message/AbstractMessage.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Message/AbstractMessage.php
index 5d67e90..0f022cc 100644
--- a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Message/AbstractMessage.php
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Message/AbstractMessage.php
@@ -9,9 +9,9 @@
 abstract class AbstractMessage extends AbstractPart
 {
     /**
-     * @var null|array
+     * @var null|Attachment[]
      */
-    private $attachments;
+    private ?array $attachments = null;
 
     /**
      * Get message headers.
@@ -25,7 +25,10 @@
      */
     final public function getId(): ?string
     {
-        return $this->getHeaders()->get('message_id');
+        $messageId = $this->getHeaders()->get('message_id');
+        \assert(null === $messageId || \is_string($messageId));
+
+        return $messageId;
     }
 
     /**
@@ -34,6 +37,7 @@
     final public function getFrom(): ?EmailAddress
     {
         $from = $this->getHeaders()->get('from');
+        \assert(null === $from || \is_array($from));
 
         return null !== $from ? $this->decodeEmailAddress($from[0]) : null;
     }
@@ -45,7 +49,10 @@
      */
     final public function getTo(): array
     {
-        return $this->decodeEmailAddresses($this->getHeaders()->get('to') ?: []);
+        $emails = $this->getHeaders()->get('to');
+        \assert(null === $emails || \is_array($emails));
+
+        return $this->decodeEmailAddresses($emails ?? []);
     }
 
     /**
@@ -55,7 +62,10 @@
      */
     final public function getCc(): array
     {
-        return $this->decodeEmailAddresses($this->getHeaders()->get('cc') ?: []);
+        $emails = $this->getHeaders()->get('cc');
+        \assert(null === $emails || \is_array($emails));
+
+        return $this->decodeEmailAddresses($emails ?? []);
     }
 
     /**
@@ -65,7 +75,10 @@
      */
     final public function getBcc(): array
     {
-        return $this->decodeEmailAddresses($this->getHeaders()->get('bcc') ?: []);
+        $emails = $this->getHeaders()->get('bcc');
+        \assert(null === $emails || \is_array($emails));
+
+        return $this->decodeEmailAddresses($emails ?? []);
     }
 
     /**
@@ -75,7 +88,10 @@
      */
     final public function getReplyTo(): array
     {
-        return $this->decodeEmailAddresses($this->getHeaders()->get('reply_to') ?: []);
+        $emails = $this->getHeaders()->get('reply_to');
+        \assert(null === $emails || \is_array($emails));
+
+        return $this->decodeEmailAddresses($emails ?? []);
     }
 
     /**
@@ -85,7 +101,10 @@
      */
     final public function getSender(): array
     {
-        return $this->decodeEmailAddresses($this->getHeaders()->get('sender') ?: []);
+        $emails = $this->getHeaders()->get('sender');
+        \assert(null === $emails || \is_array($emails));
+
+        return $this->decodeEmailAddresses($emails ?? []);
     }
 
     /**
@@ -95,7 +114,10 @@
      */
     final public function getReturnPath(): array
     {
-        return $this->decodeEmailAddresses($this->getHeaders()->get('return_path') ?: []);
+        $emails = $this->getHeaders()->get('return_path');
+        \assert(null === $emails || \is_array($emails));
+
+        return $this->decodeEmailAddresses($emails ?? []);
     }
 
     /**
@@ -137,7 +159,10 @@
      */
     final public function getSize()
     {
-        return $this->getHeaders()->get('size');
+        $size = $this->getHeaders()->get('size');
+        \assert(null === $size || \is_int($size) || \is_string($size));
+
+        return $size;
     }
 
     /**
@@ -145,25 +170,34 @@
      */
     final public function getSubject(): ?string
     {
-        return $this->getHeaders()->get('subject');
+        $subject = $this->getHeaders()->get('subject');
+        \assert(null === $subject || \is_string($subject));
+
+        return $subject;
     }
 
     /**
      * Get message In-Reply-To (from headers).
+     *
+     * @return string[]
      */
     final public function getInReplyTo(): array
     {
         $inReplyTo = $this->getHeaders()->get('in_reply_to');
+        \assert(null === $inReplyTo || \is_string($inReplyTo));
 
         return null !== $inReplyTo ? \explode(' ', $inReplyTo) : [];
     }
 
     /**
      * Get message References (from headers).
+     *
+     * @return string[]
      */
     final public function getReferences(): array
     {
         $references = $this->getHeaders()->get('references');
+        \assert(null === $references || \is_string($references));
 
         return null !== $references ? \explode(' ', $references) : [];
     }
@@ -222,6 +256,11 @@
         return $this->attachments;
     }
 
+    /**
+     * @param PartInterface<PartInterface> $part
+     *
+     * @return Attachment[]
+     */
     private static function gatherAttachments(PartInterface $part): array
     {
         $attachments = [];
@@ -247,6 +286,8 @@
 
     /**
      * @param \stdClass[] $addresses
+     *
+     * @return EmailAddress[]
      */
     private function decodeEmailAddresses(array $addresses): array
     {
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Message/AbstractPart.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Message/AbstractPart.php
index ab13eb0..0ab0ca5 100644
--- a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Message/AbstractPart.php
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Message/AbstractPart.php
@@ -14,95 +14,7 @@
  */
 abstract class AbstractPart implements PartInterface
 {
-    /**
-     * @var ImapResourceInterface
-     */
-    protected $resource;
-
-    /**
-     * @var bool
-     */
-    private $structureParsed = false;
-
-    /**
-     * @var array
-     */
-    private $parts = [];
-
-    /**
-     * @var string
-     */
-    private $partNumber;
-
-    /**
-     * @var int
-     */
-    private $messageNumber;
-
-    /**
-     * @var \stdClass
-     */
-    private $structure;
-
-    /**
-     * @var Parameters
-     */
-    private $parameters;
-
-    /**
-     * @var null|string
-     */
-    private $type;
-
-    /**
-     * @var null|string
-     */
-    private $subtype;
-
-    /**
-     * @var null|string
-     */
-    private $encoding;
-
-    /**
-     * @var null|string
-     */
-    private $disposition;
-
-    /**
-     * @var null|string
-     */
-    private $description;
-
-    /**
-     * @var null|string
-     */
-    private $bytes;
-
-    /**
-     * @var null|string
-     */
-    private $lines;
-
-    /**
-     * @var null|string
-     */
-    private $content;
-
-    /**
-     * @var null|string
-     */
-    private $decodedContent;
-
-    /**
-     * @var int
-     */
-    private $key = 0;
-
-    /**
-     * @var array
-     */
-    private static $typesMap = [
+    private const TYPES_MAP = [
         \TYPETEXT        => self::TYPE_TEXT,
         \TYPEMULTIPART   => self::TYPE_MULTIPART,
         \TYPEMESSAGE     => self::TYPE_MESSAGE,
@@ -114,10 +26,7 @@
         \TYPEOTHER       => self::TYPE_OTHER,
     ];
 
-    /**
-     * @var array
-     */
-    private static $encodingsMap = [
+    private const ENCODINGS_MAP = [
         \ENC7BIT            => self::ENCODING_7BIT,
         \ENC8BIT            => self::ENCODING_8BIT,
         \ENCBINARY          => self::ENCODING_BINARY,
@@ -125,16 +34,35 @@
         \ENCQUOTEDPRINTABLE => self::ENCODING_QUOTED_PRINTABLE,
     ];
 
-    /**
-     * @var array
-     */
-    private static $attachmentKeys = [
+    private const ATTACHMENT_KEYS = [
         'name'      => true,
         'filename'  => true,
         'name*'     => true,
         'filename*' => true,
     ];
 
+    protected ImapResourceInterface $resource;
+    private bool $structureParsed = false;
+    /**
+     * @var AbstractPart[]
+     */
+    private array $parts = [];
+    private string $partNumber;
+    private int $messageNumber;
+    private \stdClass $structure;
+    private Parameters $parameters;
+    private ?string $type        = null;
+    private ?string $subtype     = null;
+    private ?string $encoding    = null;
+    private ?string $disposition = null;
+    private ?string $description = null;
+    /** @var null|int|string */
+    private $bytes;
+    private ?string $lines          = null;
+    private ?string $content        = null;
+    private ?string $decodedContent = null;
+    private int $key                = 0;
+
     /**
      * Constructor.
      *
@@ -155,9 +83,6 @@
         $this->setStructure($structure);
     }
 
-    /**
-     * Get message number (from headers).
-     */
     final public function getNumber(): int
     {
         $this->assertMessageExists($this->messageNumber);
@@ -180,9 +105,6 @@
         $this->structure = $structure;
     }
 
-    /**
-     * Part structure.
-     */
     final public function getStructure(): \stdClass
     {
         $this->lazyLoadStructure();
@@ -197,9 +119,6 @@
     {
     }
 
-    /**
-     * Part parameters.
-     */
     final public function getParameters(): Parameters
     {
         $this->lazyParseStructure();
@@ -207,19 +126,16 @@
         return $this->parameters;
     }
 
-    /**
-     * Part charset.
-     */
     final public function getCharset(): ?string
     {
         $this->lazyParseStructure();
 
-        return $this->parameters->get('charset') ?: null;
+        $charset = $this->parameters->get('charset');
+        \assert(null === $charset || \is_string($charset));
+
+        return '' !== $charset ? $charset : null;
     }
 
-    /**
-     * Part type.
-     */
     final public function getType(): ?string
     {
         $this->lazyParseStructure();
@@ -227,9 +143,6 @@
         return $this->type;
     }
 
-    /**
-     * Part subtype.
-     */
     final public function getSubtype(): ?string
     {
         $this->lazyParseStructure();
@@ -237,9 +150,6 @@
         return $this->subtype;
     }
 
-    /**
-     * Part encoding.
-     */
     final public function getEncoding(): ?string
     {
         $this->lazyParseStructure();
@@ -247,9 +157,6 @@
         return $this->encoding;
     }
 
-    /**
-     * Part disposition.
-     */
     final public function getDisposition(): ?string
     {
         $this->lazyParseStructure();
@@ -257,9 +164,6 @@
         return $this->disposition;
     }
 
-    /**
-     * Part description.
-     */
     final public function getDescription(): ?string
     {
         $this->lazyParseStructure();
@@ -267,11 +171,6 @@
         return $this->description;
     }
 
-    /**
-     * Part bytes.
-     *
-     * @return null|int|string
-     */
     final public function getBytes()
     {
         $this->lazyParseStructure();
@@ -279,9 +178,6 @@
         return $this->bytes;
     }
 
-    /**
-     * Part lines.
-     */
     final public function getLines(): ?string
     {
         $this->lazyParseStructure();
@@ -289,9 +185,6 @@
         return $this->lines;
     }
 
-    /**
-     * Get raw part content.
-     */
     final public function getContent(): string
     {
         if (null === $this->content) {
@@ -309,17 +202,11 @@
         return $this->partNumber;
     }
 
-    /**
-     * Get part number.
-     */
     final public function getPartNumber(): string
     {
         return $this->partNumber;
     }
 
-    /**
-     * Get decoded part content.
-     */
     final public function getDecodedContent(): string
     {
         if (null === $this->decodedContent) {
@@ -369,11 +256,6 @@
         return $return;
     }
 
-    /**
-     * Get an array of all parts for this message.
-     *
-     * @return PartInterface[]
-     */
     final public function getParts(): array
     {
         $this->lazyParseStructure();
@@ -393,21 +275,11 @@
         return $this->parts[$this->key];
     }
 
-    /**
-     * Get current child part.
-     *
-     * @return \RecursiveIterator
-     */
     final public function getChildren()
     {
         return $this->current();
     }
 
-    /**
-     * Get current child part.
-     *
-     * @return bool
-     */
     final public function hasChildren()
     {
         $this->lazyParseStructure();
@@ -416,8 +288,6 @@
     }
 
     /**
-     * Get current part key.
-     *
      * @return int
      */
     final public function key()
@@ -425,31 +295,16 @@
         return $this->key;
     }
 
-    /**
-     * Move to next part.
-     *
-     * @return void
-     */
     final public function next()
     {
         ++$this->key;
     }
 
-    /**
-     * Reset part key.
-     *
-     * @return void
-     */
     final public function rewind()
     {
         $this->key = 0;
     }
 
-    /**
-     * Check if current part is a valid one.
-     *
-     * @return bool
-     */
     final public function valid()
     {
         $this->lazyParseStructure();
@@ -469,10 +324,10 @@
 
         $this->lazyLoadStructure();
 
-        $this->type = self::$typesMap[$this->structure->type] ?? self::TYPE_UNKNOWN;
+        $this->type = self::TYPES_MAP[$this->structure->type] ?? self::TYPE_UNKNOWN;
 
         // In our context, \ENCOTHER is as useful as an unknown encoding
-        $this->encoding = self::$encodingsMap[$this->structure->encoding] ?? self::ENCODING_UNKNOWN;
+        $this->encoding = self::ENCODINGS_MAP[$this->structure->encoding] ?? self::ENCODING_UNKNOWN;
         if (isset($this->structure->subtype)) {
             $this->subtype = $this->structure->subtype;
         }
@@ -527,7 +382,7 @@
      */
     private static function isAttachment(\stdClass $part): bool
     {
-        if (isset(self::$typesMap[$part->type]) && self::TYPE_MULTIPART === self::$typesMap[$part->type]) {
+        if (isset(self::TYPES_MAP[$part->type]) && self::TYPE_MULTIPART === self::TYPES_MAP[$part->type]) {
             return false;
         }
 
@@ -549,7 +404,7 @@
         // Attachment without Content-Disposition header
         if ($part->ifparameters) {
             foreach ($part->parameters as $parameter) {
-                if (isset(self::$attachmentKeys[\strtolower($parameter->attribute)])) {
+                if (isset(self::ATTACHMENT_KEYS[\strtolower($parameter->attribute)])) {
                     return true;
                 }
             }
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Message/Attachment.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Message/Attachment.php
index bd76769..b134b8d 100644
--- a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Message/Attachment.php
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Message/Attachment.php
@@ -11,43 +11,33 @@
  */
 final class Attachment extends AbstractPart implements AttachmentInterface
 {
-    /**
-     * Get attachment filename.
-     */
     public function getFilename(): ?string
     {
-        return $this->getParameters()->get('filename')
-            ?: $this->getParameters()->get('name');
+        $filename = $this->getParameters()->get('filename');
+        if (null === $filename || '' === $filename) {
+            $filename = $this->getParameters()->get('name');
+        }
+        \assert(null === $filename || \is_string($filename));
+
+        return $filename;
     }
 
-    /**
-     * Get attachment file size.
-     *
-     * @return null|int Number of bytes
-     */
     public function getSize()
     {
         $size = $this->getParameters()->get('size');
         if (\is_numeric($size)) {
             $size = (int) $size;
         }
+        \assert(null === $size || \is_int($size));
 
         return $size;
     }
 
-    /**
-     * Is this attachment also an Embedded Message?
-     */
     public function isEmbeddedMessage(): bool
     {
         return self::TYPE_MESSAGE === $this->getType();
     }
 
-    /**
-     * Return embedded message.
-     *
-     * @throws NotEmbeddedMessageException
-     */
     public function getEmbeddedMessage(): EmbeddedMessageInterface
     {
         if (!$this->isEmbeddedMessage()) {
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Message/AttachmentInterface.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Message/AttachmentInterface.php
index 0d20f44..286e188 100644
--- a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Message/AttachmentInterface.php
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Message/AttachmentInterface.php
@@ -4,6 +4,8 @@
 
 namespace Ddeboer\Imap\Message;
 
+use Ddeboer\Imap\Exception\NotEmbeddedMessageException;
+
 /**
  * An e-mail attachment.
  */
@@ -28,6 +30,10 @@
 
     /**
      * Return embedded message.
+     *
+     * @throws NotEmbeddedMessageException
+     *
+     * @return EmbeddedMessageInterface<PartInterface>
      */
     public function getEmbeddedMessage(): EmbeddedMessageInterface;
 }
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Message/BasicMessageInterface.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Message/BasicMessageInterface.php
index 20e6b1a..83dbd17 100644
--- a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Message/BasicMessageInterface.php
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Message/BasicMessageInterface.php
@@ -96,11 +96,15 @@
 
     /**
      * Get message In-Reply-To (from headers).
+     *
+     * @return string[]
      */
     public function getInReplyTo(): array;
 
     /**
      * Get message References (from headers).
+     *
+     * @return string[]
      */
     public function getReferences(): array;
 
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Message/EmailAddress.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Message/EmailAddress.php
index b88e0f9..9f60fb1 100644
--- a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Message/EmailAddress.php
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Message/EmailAddress.php
@@ -9,25 +9,10 @@
  */
 final class EmailAddress
 {
-    /**
-     * @var string
-     */
-    private $mailbox;
-
-    /**
-     * @var null|string
-     */
-    private $hostname;
-
-    /**
-     * @var null|string
-     */
-    private $name;
-
-    /**
-     * @var null|string
-     */
-    private $address;
+    private string $mailbox;
+    private ?string $hostname;
+    private ?string $name;
+    private ?string $address;
 
     public function __construct(string $mailbox, string $hostname = null, string $name = null)
     {
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Message/EmbeddedMessage.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Message/EmbeddedMessage.php
index 243cff6..20d9715 100644
--- a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Message/EmbeddedMessage.php
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Message/EmbeddedMessage.php
@@ -6,24 +6,10 @@
 
 final class EmbeddedMessage extends AbstractMessage implements EmbeddedMessageInterface
 {
-    /**
-     * @var null|Headers
-     */
-    private $headers;
+    private ?Headers $headers   = null;
+    private ?string $rawHeaders = null;
+    private ?string $rawMessage = null;
 
-    /**
-     * @var null|string
-     */
-    private $rawHeaders;
-
-    /**
-     * @var null|string
-     */
-    private $rawMessage;
-
-    /**
-     * Get message headers.
-     */
     public function getHeaders(): Headers
     {
         if (null === $this->headers) {
@@ -33,9 +19,6 @@
         return $this->headers;
     }
 
-    /**
-     * Get raw message headers.
-     */
     public function getRawHeaders(): string
     {
         if (null === $this->rawHeaders) {
@@ -46,11 +29,6 @@
         return $this->rawHeaders;
     }
 
-    /**
-     * Get the raw message, including all headers, parts, etc. unencoded and unparsed.
-     *
-     * @return string the raw message
-     */
     public function getRawMessage(): string
     {
         if (null === $this->rawMessage) {
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Message/Headers.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Message/Headers.php
index f76fec3..0dc6352 100644
--- a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Message/Headers.php
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Message/Headers.php
@@ -4,14 +4,8 @@
 
 namespace Ddeboer\Imap\Message;
 
-/**
- * Collection of message headers.
- */
 final class Headers extends Parameters
 {
-    /**
-     * Constructor.
-     */
     public function __construct(\stdClass $headers)
     {
         parent::__construct();
@@ -27,7 +21,7 @@
     /**
      * Get header.
      *
-     * @return mixed
+     * @return null|int|\stdClass[]|string
      */
     public function get(string $key)
     {
@@ -37,14 +31,16 @@
     /**
      * Parse header.
      *
-     * @param mixed $value
+     * @param int|\stdClass[]|string $value
      *
-     * @return mixed
+     * @return int|\stdClass[]|string
      */
     private function parseHeader(string $key, $value)
     {
         switch ($key) {
             case 'msgno':
+                \assert(\is_string($value));
+
                 return (int) $value;
             case 'from':
             case 'to':
@@ -53,6 +49,7 @@
             case 'reply_to':
             case 'sender':
             case 'return_path':
+                \assert(\is_array($value));
                 /** @var \stdClass $address */
                 foreach ($value as $address) {
                     if (isset($address->mailbox)) {
@@ -64,6 +61,8 @@
                 return $value;
             case 'date':
             case 'subject':
+                \assert(\is_string($value));
+
                 return $this->decode($value);
         }
 
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Message/Parameters.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Message/Parameters.php
index 2f7d8a1..37ed816 100644
--- a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Message/Parameters.php
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Message/Parameters.php
@@ -4,23 +4,22 @@
 
 namespace Ddeboer\Imap\Message;
 
+/**
+ * @extends \ArrayIterator<int|string, int|string|\stdClass[]>
+ */
 class Parameters extends \ArrayIterator
 {
     /**
-     * @var array
+     * @var array<string, string>
      */
-    private static $attachmentCustomKeys = [
+    private static array $attachmentCustomKeys = [
         'name*'     => 'name',
         'filename*' => 'filename',
     ];
 
-    public function __construct(array $parameters = [])
-    {
-        parent::__construct();
-
-        $this->add($parameters);
-    }
-
+    /**
+     * @param \stdClass[] $parameters
+     */
     public function add(array $parameters = []): void
     {
         foreach ($parameters as $parameter) {
@@ -34,16 +33,13 @@
     }
 
     /**
-     * @return mixed
+     * @return null|int|\stdClass[]|string
      */
     public function get(string $key)
     {
         return $this[$key] ?? null;
     }
 
-    /**
-     * Decode value.
-     */
     final protected function decode(string $value): string
     {
         $parts = \imap_mime_header_decode($value);
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Message/Transcoder.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Message/Transcoder.php
index ee02a15..bd439e0 100644
--- a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Message/Transcoder.php
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Message/Transcoder.php
@@ -9,14 +9,12 @@
 final class Transcoder
 {
     /**
-     * @var array
-     *
      * @see https://encoding.spec.whatwg.org/#encodings
      * @see https://dxr.mozilla.org/mozilla-central/source/dom/encoding/labelsencodings.properties
      * @see https://dxr.mozilla.org/mozilla1.9.1/source/intl/uconv/src/charsetalias.properties
      * @see https://msdn.microsoft.com/en-us/library/cc194829.aspx
      */
-    private static $charsetAliases = [
+    private const CHARSET_ALIASES = [
         '128'                       => 'Shift_JIS',
         '129'                       => 'EUC-KR',
         '134'                       => 'GB2312',
@@ -252,6 +250,7 @@
         'x-iso-10646-ucs-2-le'      => 'UTF-16LE',
         'x-iso-10646-ucs-4-be'      => 'UTF-32BE',
         'x-iso-10646-ucs-4-le'      => 'UTF-32LE',
+        'x-mac-ce'                  => 'windows-1250',
         'x-sjis'                    => 'Shift_JIS',
         'x-unicode-2-0-utf-7'       => 'UTF-7',
         'x-x-big5'                  => 'Big5',
@@ -282,8 +281,8 @@
 
         $originalFromCharset  = $fromCharset;
         $lowercaseFromCharset = \strtolower($fromCharset);
-        if (isset(self::$charsetAliases[$lowercaseFromCharset])) {
-            $fromCharset = self::$charsetAliases[$lowercaseFromCharset];
+        if (isset(self::CHARSET_ALIASES[$lowercaseFromCharset])) {
+            $fromCharset = self::CHARSET_ALIASES[$lowercaseFromCharset];
         }
 
         \set_error_handler(static function (): bool {
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/MessageInterface.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/MessageInterface.php
index eda8ab6..e8fe5f7 100644
--- a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/MessageInterface.php
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/MessageInterface.php
@@ -4,6 +4,11 @@
 
 namespace Ddeboer\Imap;
 
+use Ddeboer\Imap\Exception\MessageCopyException;
+use Ddeboer\Imap\Exception\MessageDeleteException;
+use Ddeboer\Imap\Exception\MessageMoveException;
+use Ddeboer\Imap\Exception\MessageUndeleteException;
+
 /**
  * An IMAP message (e-mail).
  */
@@ -63,21 +68,29 @@
 
     /**
      * Move message to another mailbox.
+     *
+     * @throws MessageCopyException
      */
     public function copy(MailboxInterface $mailbox): void;
 
     /**
      * Move message to another mailbox.
+     *
+     * @throws MessageMoveException
      */
     public function move(MailboxInterface $mailbox): void;
 
     /**
      * Delete message.
+     *
+     * @throws MessageDeleteException
      */
     public function delete(): void;
 
     /**
      * Undelete message.
+     *
+     * @throws MessageUndeleteException
      */
     public function undelete(): void;
 
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/MessageIterator.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/MessageIterator.php
index c617478..48d87ee 100644
--- a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/MessageIterator.php
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/MessageIterator.php
@@ -4,18 +4,20 @@
 
 namespace Ddeboer\Imap;
 
+use Ddeboer\Imap\Message\PartInterface;
+
+/**
+ * @extends \ArrayIterator<int, MessageInterface>
+ */
 final class MessageIterator extends \ArrayIterator implements MessageIteratorInterface
 {
-    /**
-     * @var ImapResourceInterface
-     */
-    private $resource;
+    private ImapResourceInterface $resource;
 
     /**
      * Constructor.
      *
      * @param ImapResourceInterface $resource       IMAP resource
-     * @param array                 $messageNumbers Array of message numbers
+     * @param int[]                 $messageNumbers Array of message numbers
      */
     public function __construct(ImapResourceInterface $resource, array $messageNumbers)
     {
@@ -26,6 +28,8 @@
 
     /**
      * Get current message.
+     *
+     * @return MessageInterface<PartInterface>
      */
     public function current(): MessageInterface
     {
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/MessageIteratorInterface.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/MessageIteratorInterface.php
index a9d7988..36a7943 100644
--- a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/MessageIteratorInterface.php
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/MessageIteratorInterface.php
@@ -4,10 +4,17 @@
 
 namespace Ddeboer\Imap;
 
+use Ddeboer\Imap\Message\PartInterface;
+
+/**
+ * @extends \Iterator<MessageInterface>
+ */
 interface MessageIteratorInterface extends \Iterator
 {
     /**
      * Get current message.
+     *
+     * @return MessageInterface<PartInterface>
      */
     public function current(): MessageInterface;
 }
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/AbstractDate.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/AbstractDate.php
index cdd7312..61bd05e 100644
--- a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/AbstractDate.php
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/AbstractDate.php
@@ -13,17 +13,13 @@
 {
     /**
      * Format for dates to be sent to the IMAP server.
-     *
-     * @var string
      */
-    private $dateFormat;
+    private string $dateFormat;
 
     /**
      * The date to be used for the condition.
-     *
-     * @var DateTimeInterface
      */
-    private $date;
+    private DateTimeInterface $date;
 
     /**
      * Constructor.
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/AbstractText.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/AbstractText.php
index 69b2516..8b605ce 100644
--- a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/AbstractText.php
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/AbstractText.php
@@ -12,10 +12,8 @@
 {
     /**
      * Text to be used for the condition.
-     *
-     * @var string
      */
-    private $text;
+    private string $text;
 
     /**
      * Constructor.
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/LogicalOperator/OrConditions.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/LogicalOperator/OrConditions.php
index bfebddd..01e7d86 100644
--- a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/LogicalOperator/OrConditions.php
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/LogicalOperator/OrConditions.php
@@ -15,10 +15,13 @@
     /**
      * The conditions that together represent the expression.
      *
-     * @var array
+     * @var ConditionInterface[]
      */
-    private $conditions = [];
+    private array $conditions = [];
 
+    /**
+     * @param ConditionInterface[] $conditions
+     */
     public function __construct(array $conditions)
     {
         foreach ($conditions as $condition) {
@@ -30,6 +33,8 @@
      * Adds a new condition to the expression.
      *
      * @param ConditionInterface $condition the condition to be added
+     *
+     * @return void
      */
     private function addCondition(ConditionInterface $condition)
     {
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/RawExpression.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/RawExpression.php
index cc6a465..deda65d 100644
--- a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/RawExpression.php
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/RawExpression.php
@@ -11,10 +11,8 @@
 {
     /**
      * Text to be used for the condition.
-     *
-     * @var string
      */
-    private $expression;
+    private string $expression;
 
     /**
      * @param string $expression text for the condition
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/SearchExpression.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/SearchExpression.php
index e89d49e..db95531 100644
--- a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/SearchExpression.php
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/SearchExpression.php
@@ -14,9 +14,9 @@
     /**
      * The conditions that together represent the expression.
      *
-     * @var array
+     * @var ConditionInterface[]
      */
-    private $conditions = [];
+    private array $conditions = [];
 
     /**
      * Adds a new condition to the expression.
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Server.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Server.php
index 7412f00..41a953d 100644
--- a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Server.php
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Server.php
@@ -12,46 +12,26 @@
  */
 final class Server implements ServerInterface
 {
+    private string $hostname;
+    private string $port;
+    private string $flags;
     /**
-     * @var string Internet domain name or bracketed IP address of server
+     * @var mixed[]
      */
-    private $hostname;
-
-    /**
-     * @var string TCP port number
-     */
-    private $port;
-
-    /**
-     * @var string Optional flags
-     */
-    private $flags;
-
-    /**
-     * @var array
-     */
-    private $parameters;
-
-    /**
-     * @var int Connection options
-     */
-    private $options;
-
-    /**
-     * @var int Retries number
-     */
-    private $retries;
+    private array $parameters;
+    private int $options;
+    private int $retries;
 
     /**
      * Constructor.
      *
-     * @param string $hostname   Internet domain name or bracketed IP address
-     *                           of server
-     * @param string $port       TCP port number
-     * @param string $flags      Optional flags
-     * @param array  $parameters Connection parameters
-     * @param int    $options    Connection options
-     * @param int    $retries    Retries number
+     * @param string  $hostname   Internet domain name or bracketed IP address
+     *                            of server
+     * @param string  $port       TCP port number
+     * @param string  $flags      Optional flags
+     * @param mixed[] $parameters Connection parameters
+     * @param int     $options    Connection options
+     * @param int     $retries    Retries number
      */
     public function __construct(
         string $hostname,
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Test/RawMessageIterator.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Test/RawMessageIterator.php
index 08500b6..b895f8a 100644
--- a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Test/RawMessageIterator.php
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Test/RawMessageIterator.php
@@ -4,14 +4,20 @@
 
 namespace Ddeboer\Imap\Test;
 
+use Ddeboer\Imap\Message\PartInterface;
 use Ddeboer\Imap\MessageInterface;
 use Ddeboer\Imap\MessageIteratorInterface;
 
 /**
  * A MessageIterator to be used in a mocked environment.
+ *
+ * @extends \ArrayIterator<int, MessageInterface>
  */
 final class RawMessageIterator extends \ArrayIterator implements MessageIteratorInterface
 {
+    /**
+     * @return MessageInterface<PartInterface>
+     */
     public function current(): MessageInterface
     {
         return parent::current();