- EmailAddress full is property now, parse_email_addresses fixed
- Added MailBoxTls into __init__
- Fixed tls.py example, rename examples, added basic.py example
- [Breaking] BaseMailBox.box client instance renamed to BaseMailBox.client
- Fixed BaseMailBox.xoauth2 consistency with BaseMailBox.login
- BaseMailBox.folder/idle managers now instantiates in __init__
- [Breaking] STARTTLS logic moved to MailBoxTls
- Fix IdleManager
- Added idle manager for work with IDLE: mailbox.idle.<[start,poll,stop,wait]>
- Added BaseMailBox.consume_until_tagged_response method: waiting for tagged response
- Added new exception: MailboxTaggedResponseError
- Removed unused stuff: BaseMailBox.with_headers_only_allowed_errors
- query.ParamConverter._gen_values minor improvement
- utils.clean_uids minor improvement
- Added test for utils.clean_uids
- Fix ParamConverter.convert order search keys with values list
- Added tox config for test all supported versions
- Fix MailboxLoginError was never raise
- ParamConverter.convert now order search keys by alphabet - guarantees a repeatable result for query builder
- Fix support for python 3.5
- Fixed message.MailAttachment.size wrong size bug
- query.LogicOperator (and subclasses AND, OR, NOT) now have type annotated named search keys
- Fix type annotations
- [Breaking] MailMessage.<*>_values methods now returns EmailAddress instead dict
- [Breaking] MailBoxFolderManager.list new returns FolderInfo instead dict
- Dropped support for python 3.3, 3.4
- Added type annotations
- [Breaking] utils.clean_uids - removed special case for Generator with "fetch" name for implicitly gets all uids. Use BaseMailBox.uids method instead.
- Removed BaseMailBox deprecated stuff: fetch miss_defect arg, seen method, search method
- MailBoxFolderManager.status folder argument now may by equal to None - status of current folder
- utils.clean_uids now accept uid strings with uid sequence ranges, example: *:4,5:7,10
- query.UidRange end argument now may be None, equal to None by default
- Renamed BaseMailBox.search -> BaseMailBox.numbers, search are deprecated now
- Renamed MailboxSearchError -> MailboxNumbersError
- Added BaseMailBox.uids, MailboxUidsError
- Fixed BaseMailBox.append bug on flag_set=None
- Added MailBoxFolderManager.set readonly argument
- Added MailBoxFolderManager.subscribe method
- Deprecation: BaseMailBox.seen method are deprecated now, use flag method
- Fixed MessageFlags values - all system flags begin with ""
- Fixed BaseMailBox.flag, BaseMailBox.append, MailMessage.flags - now works with system/custom flags correctly, -upper
- Added utils.clean_flags
- Moved message.MessageFlags -> consts.MailMessageFlags
- Moved folder.MailBoxFolderStatusOptions -> consts.MailBoxFolderStatusOptions
- Moved utils.SHORT_MONTH_NAMES -> consts.SHORT_MONTH_NAMES
- Renamed utils.cleaned_uid_set -> utils.clean_uids
- Fixed multiple encodings case bug at MailMessage.subject
- Fixed MailMessage.from_bytes - MailMessage.uid/flags parse errors
- Fixed utils.parse_email_date - parse bug on bad dates
- [Breaking] BaseMailBox.fetch miss_defect argument now is False by default, it will be removed soon
- Increased the email collection for tests
- Fixed MailAttachment.attachments - message/rfc822 forwarded messages not missing now
- Fixed bug at utils.parse_email_addresses - quoted with newlines
- Fixed bug at BaseMailBox.search - empty elements on split result with trailing spaces
- [Breaking] MailMessage.headers - now all keys in lower-case (*email headers are not case-sensitive)
- Path with tests excluded from distribution archive
- Fixed MailMessage.text/html parse on case: text/html with Content-ID
- Added BaseMailBox.append method
- Renamed message.Attachment -> message.MailAttachment
- Fixed bug at utils.encode_folder for bytes
- Fixed bug at mailbox.folder.status on encoded names
- Improved MailMessage.text/html on case: no text/html and has text/html attachment
- MailMessage.attachments - fixed miss some attachments
- Fixed bug at BaseMailBox.copy - folder name was not encoded
- MailMessage.uid - fixed bug - UID cannot be parsed if stored with empty flags list
- MailMessage.uid - used one regexp instead two
- MailBox, MailBoxUnencrypted - add timeout argument (supports since python 3.9)
- Added query.UidRange, for search by uid range, UID *:123
- Deprecated query.Q was removed
- BaseMailBox.fetch - fixed wrong responses for combinations of: slice, bulk, reverse
- BaseMailBox._fetch_in_bulk - add python versions compatibility - used return instead raise StopIteration
- MailMessage.attachments - improved parsing - case with Content-ID only
- Renamed MailMessage.size -> MailMessage.size_rfc822, returned type now always int
- Added MailMessage.size attribute
- Added Attachment.size attribute
- BaseMailBox.login initial_folder argument now can be None to skip folder.set
- Fixed MailBoxFolderManager.list bug on delim = NIL
- Added MailMessage.size attribute
- Added MailBox.__init__ starttls argument for using STARTTLS
- Fixed MailBox._fetch_in_bulk bug for empty self.search result
- Added BaseMailBox.search method
- Added BaseMailBox.fetch bulk argument
- Removed BaseMailBox._criteria_encoder
- Removed BaseMailBox.last_search_ids
- Added utils.grouper
- Added Attachment.content_id
- Added Attachment.content_disposition
- Attachment._part -> Attachment.part
- email.utils.parsedate_to_datetime used in utils.parse_email_addresses
- BaseMailBox.fetch limit argument now can receive slice object
- BaseMailBox instance now has attribute mailbox.last_search_ids, it fills after each fetch - msg ids from search command
- __init__.py refined
- Added MailBox.xoauth2 - authentication using OAuth 2.0 mechanism
- MailMessage (to, cc, bcc, reply_to) now works for fields specified multiple times (e.g. twice Cc: Cc:)
- BaseMailBox.fetch headers_only arg fixed
- Importing all from utils module removed from the default package imports
- Support international characters in email addresses
- Add deprecated Q to default import, *forgot
- Added 14 new custom lib exceptions (errors.py): MailboxCopyError, MailboxDeleteError, MailboxExpungeError, MailboxFetchError, MailboxFlagError, MailboxFolderCreateError, MailboxFolderDeleteError, MailboxFolderRenameError, MailboxFolderSelectError, MailboxFolderStatusError, MailboxFolderStatusValueError, MailboxLoginError, MailboxLogoutError, MailboxSearchError
- UnexpectedCommandStatusError now not used directly.
- Added folder.MailBoxFolderStatusOptions class instead MailBoxFolderManager.folder_status_options
- utils.MessageFlags -> message.MailMessageFlags
- query.py: ValueError replaced to TypeError in many places
- utils.short_month_names renamed to utils.SHORT_MONTH_NAMES
- utils.cleaned_uid_set - parsing optimized, raise TypeError instead ValueError, not ignore empty uid from generator
- utils.check_command_status - new logic
- BaseMailBox.fetch headers_only arg is disabled until fix
- Query builder: removed Q alias for AND
- Query builder: added new aliases: A for AND, O for OR, N for NOT
- Added X-GM-LABELS support to query builder (gmail_label)
- added BaseMailBox.fetch headers_only argument - get only email headers
- BaseMailBox.attachments now can returns nameless attachments (inline/forwarded)
- MailBoxFolderManager.list result changed: item['flags'] now are tuple(str)
- mailbox.MailBox splitted to: BaseMailBox, MailBox, MailBoxUnencrypted
- MailBox ssl argument deleted
- mailbox.MessageFlags class moved to utils.MessageFlags
- Add PySocks proxy examples
- Fixed multiple encodings case for attachment name
- Fixed bug in folder.MailBoxFolderManager.exists/list on folder names with " and chars
- Fixed bug on folders names with space in folder.MailBoxFolderManager.exists/list
- Improved parse logic for message.MailMessage.flags
- Improve utils.parse_email_addresses - full values for bad emails
- New parse logic for email addresses - utils.parse_email_addresses, using email.utils.getaddresses
- Added message.MailMessage.reply_to, message.MailMessage.reply_to_values
- Removed message.MailMessage._parse_addresses
- MailBox.fetch - added "reverse" parameter
- in utils.parse_email_address used email.utils.parseaddr
- added tests for message attributes
- message.Attachment.payload - removed probability of return None
- message.MailMessage.attachments now return list of message.Attachment objects
- utils.cleaned_uid_set now not raise ValueError('uid_set should not be empty')
- mailbox.MailBox delete,copy,move,flag,seen methods changed: Do nothing on empty uid_list - return None
- mailbox.StandardMessageFlags renamed to mailbox.MessageFlags
- MailMessage.from_bytes - Alternative constructor
- change license: MIT -> Apache License, Version 2.0
- improve utils.decode_value
- improve MailMessage.attachment decoding
- MailBoxFolderManager.status now returns int values in result
- fix query builder bugs - imap prefix notation rules
- query builder: The key types are marked with * can accepts a sequence of values like list, tuple, set or generator.
- add new examples
- improved MailMessage._parse_addresses
- improved utils.parse_email_address
- improved utils.parse_email_date
- fixed utils.short_month_names +Dec
- fixed MailMessage.text and MailMessage.html encoding bug on invalid headers
- fix README.rst encoding in setup.py
- Added query builder - implemented the search logic described in rfc3501
- MailBox.fetch - added "charset" parameter. If the "charset" argument is specified in MailBox.fetch, the search string will be encoded to this encoding.
- MailBox.fetch "search_criteria" parameter renamed to "criteria"
- MailMessage.date now returns datetime.date
- MailMessage.date_str attribute added
- MailMessage.headers attribute added
- MailMessage.id removed
- ImapToolsError base exception class removed
- MailBoxWrongFlagError exception class removed
- functions: (cleaned_uid_set,check_command_status,decode_value,parse_email_address,parse_email_date,quote,pairs_to_dict) moved to utils module
- readme text improved
- fixed folder.set encoding dug
- Add context manager
- MailBox._uid_str - get uid attrs for MailBox.fetch generator only
- Less strict regexp for parse uid
- decode MailMessage text and html using encoding, specified in email
- decomposition to modules
- remove typing dependency
- add MailMessage.cc, MailMessage.bcc attrs
- specify custom classes email_message_class directly
- MailBox._uid_str change type check logic
- Change MailMessage attr return types: lists -> tuples
- MailBox.fetch add mark_seen param
- fix MailMessage.from_ bug when empty
- new MailMessage.uid parse logic
- functools.lru_cache for MailMessage properties
- MailMessage.get_attachments() -> MailMessage.attachments
- fix setuptools
- fix _decode_value for unknown encoding
- fix _parse_email_address
- install_requires
- fix manifest
- add typing lib
- _uid_str works with generator
- first version: 31 May 2017