enough_mail_plus 2.2.3
enough_mail_plus: ^2.2.3 copied to clipboard
enough_mail fork - IMAP, POP3, SMTP email library with high/low-level APIs and MIME parsing
2.2.3 #
- Chore: Shorten package description to 60-180 characters for pub.dev score
- Docs: Add example file (example/example.dart)
- Fix: Resolve dangling library doc comments in all library files
- Fix: Replace angle brackets with placeholders in documentation comments
- Chore: Format all Dart files with dart format
2.2.2 #
- Fix:
removeHeader()now correctly removes headers from rendered messages. Previously, headers modified viaremoveHeader(),setHeader(), oraddHeader()were not reflected inrenderMessage()output because the render method used original mimeData instead of modified headers.
2.2.1 #
- Fix: Tolerate bare LF (
\n) line endings in MIME parsing. RFC 5322 mandates CRLF but some generators (e.g. Node.js mimetext on Linux) produce bare LF. This caused missing subjects and headers when parsing such MIME.
2.2.0 #
- Maintenance fork of
enough_mail - Fix: Prevent header folding immediately after opening angle bracket
<inFromand other headers to avoid SpamAssassin errors.
2.1.7 #
- chore: Update plugin and dependencies versions - thanks to Dr-Usman!
- chore: pub upgrade to bring in intl 0.20.2 - thanks to jpohhhh!
- Fix: FetchImapResult.replaceMatchingMessages - thanks to scribetw!
- Fix: trim lines read after decoding - thanks to vware!
- Fix: Remove extra double quotes for search query dates - thanks to ig-garcia!
2.1.6 #
- Fix: Fix serialization of ServerConfig - thanks to RobinJespersen!
- Feat: allow to specify connection timeout in high level API and increase default timeout
2.1.4 #
- Fix: use refreshed OAUTH tokens when using the high level MailClient API.
- Fix: handle edge cases in IMAP
FETCHresponses. - Feat: Add details for low level IMAP errors when using the high level MailCLient API.
- Feat: Refresh OAUTH tokens 15 minutes in advance before they expire to reduce the risk of a token expiring during a long running operation.
- Feat: show error details when SMTP XOAuth2 authentication fails.
- Feat: synchronize access to low level clients when using the high level MailClient API.
2.1.3 #
- Fix: Apply correct mailbox path separator - thanks nruzzu!
- Feat: add firstWhereOrNull search method for a Tree
- Feat: add identityFlag getter to Mailbox
2.1.2 #
- Fix: RangeError when a Mailbox name contains a parentheses - thanks nruzzu
- Fix: base64 decoding of headers with a lowercase b
- Feat: support more name variations for ISO codecs
- Feat: update dependencies - thanks hatch01
- Feat: use standard serialization based on json_serializable
- Feat: Improve high level API fetch message support
2.1.1 #
- Loosened dependency restrictions a bit upon suggestion from hpoul
- Added support for Big5, KOI8-r and KOI8-u character encodings
- Load encodings only when required
2.1.0 #
- The
MailClient.deleteMessages()/undoDeleteMessages()as well as themoveMessages()andundoMoveMessages()calls will now update the givenmessagesUIDs automatically, when they have been specified. - Simplify building a
multipart/alternativemessage or message part by adding the optionplainTextandhtmlTextparameters inMessageBuilder.prepareMultipartAlternativeMessage()andaddMultipartAlternative(). - Fixed documentation for generating a mime message with an attachment (thanks lqmminh!).
2.0.1 #
- Thanks to yarsort resolved various POP3 bugs.
- Interpret mime messages with an (invalid) 2-digit year as coming from the current millennium.
2.0.0 #
Improvements and fixes:
- Thanks to matthiasn the date parsing/generation on west of greenwich timezones now works properly.
- Improve automatic re-connecting when using the high-level MailClient API.
- Support timeouts for IMAP, SMTP and POP calls.
MimeMessage:- Get an alternative mime part easier with
MimePart? getAlternativePart(MediaSubtype subtype). - Retrieve all recipients via the
List<MailAddress> get recipientsgetter. - Support decoding
binarytransfer-encoding for text message parts. - Introduce
guid/ global unique IDs which are set automatically when using the high-levelMailClient. - Correctly unwrap header values before decoding them.
- Accept headers that have no space after the colon-separator.
- Get an alternative mime part easier with
- Improve high level API support for OAUTH:
- You can now define
refreshandonConfigChangedcallback methods when connecting to a mail service usingMailClient.
- You can now define
- Support expunging messages when deleting them in
MailClientwithFuture<DeleteResult> deleteMessages( MessageSequence sequence, {bool expunge = false}). OauthAuthentication now contains a complete OauthToken. main MessageBuilder: Access also text-attachments in theattachmentsgetter.- Only use
STARTTLSwhen the IMAP service supports it. - Simplify search API.
Breaking changes:
- Package structure is simplified, so that imports of specific classes are not possible anymore. Instead either
import 'package:enough_mail_plus/enough_mail.dart';or one of the specializes sub-packagescodecs.dart,discover.dart,highlevel.dart,imap.dart,mime.dart,pop.dartorsmtp.dart. Authentication.passwordCleartextis renamed toAuthentication.passwordClearTextMailboxAPI has changed specifically when creating mailboxes yourself.
Other:
- Improved code style, enforcing linting rules.
- Improve API documentation.
- Improve package structure
- Many further small-scale improvements.
1.3.6 #
- Fix generating messages with several recipients in
MessageBuilder. Previously semicolons were used that were not accepted by all mail providers.
1.3.5 #
- Add
bool Function(X509Certificate)? onBadCertificatecallback to handle invalid certificates #167 - Stop polling when disconnecting high level
MailClient - Ignore subsequent
IDLErequests when already in idle mode inImapClient - Improve documentation
1.3.4 #
- Fix some IMAP mailbox commands when there is no mailbox selected: #160 #164 #165
1.3.3 #
- Add easier method to setup a
MailAccountwith manual settings by callingMailAccount.fromManualSettings()orMailAccount.fromManualSettingsWithAuth(). This is useful when settings cannot or should not be auto-discovered, for example.
1.3.2 #
- Fix login for IMAP servers that do not define capabilities in their
AUTH/LOGINresponse #159
1.3.1 #
- Always quote user name and password in IMAP login, #158
- Thanks to fttx2020 we have these great improvements:
- Fix for POP3 UID LIST command
- Fix parsing of POP3 responses
- Handle more Chinese character encodings
- Handle some base64 text variations better
SmtpExceptions now contain the full error description
1.3.0 #
- Support read receipts #149
- Check if a message contains a read receipt request with
MimeMessage.isReadReceiptRequested - Generate a read request response with
MessageBuilder.buildReadReceipt()
- Check if a message contains a read receipt request with
- Support Windows-1256 encoding
- Add another message as an attachment with
MessageBuilder.addMessagePart()#153 - Easily retrieve all leaf parts after loading
BODYSTRUCTUREwithMimeMessage.body.allLeafParts - Fix for responses with a line break spread around 2 chunks #140
- Improve identification of message parts with their
fetchId#141 #143 - Thanks to A.Zulli again! - Messages are now send with
utf-8rather thanutf8to reduce problems #144 - Thanks to gmalakov - Fix for responses with a literal
{0}response #145 - Better detection of plain text messages thanks to castaway
1.2.2 #
- Assume
8bitencoding when nocontent-transfer-encodingis specified in a MIME message. - Exclude empty address-lists when building a message with
MessageBuilder. - Retrieve a MIME part wit the fetchId
1correctly. ImapClient.idleStart()throws an error when no mailbox is selected.MailClient.fetchMessageContents()allows you to specify which media types you want to include with theincludedInlineTypesparameter, e.g.final mime = await mailClient.fetchMessageContents(envelopeMime, includedInlineTypes: [MediaToptype.image]);.- Convenience improvements:
- Select a mailbox just by it's flag like
MailboxFlag.sentwithMailClient.selectMailboxByFlag(MailboxFlag)method. - Check if an email address contains a personal name with
MailAddress.hasPersonalNamegetter.
- Select a mailbox just by it's flag like
1.2.1 #
- Handle raw data in parameter values of IMAP
FETCHresponses.
1.2.0 #
- Thanks to KevinBLT mime messages will now always have a valid date header.
- The high level search API has been extended and access simplified
- The high level thread API has been simplified
1.1.0 #
- Thanks to A.Zulli the
UNSELECTIMAP command of rfc3691 is now supported withImapClient.unselectMailbox(). - Support THREAD IMAP Extension with
ImapClient.threadMessages()anduidThreadMessage()as well as the high level APIMailClient.fetchThreads()andfetchThreadData(), the latter can set theMimeMessage.threadSequenceautomatically. #44 - Access embedded
message/rfc822messages usingmimePart.decodeContentMessage(). #138 - Added
SearchQueryType.toOrFromto easily search for recipients or senders of a message. - All Mailbox commands now return the mailbox in question, not the currently selected mailbox.
- Improve automatic reconnects in high level
MailClientAPI. - Added high level OAuth login option and
MailAccount.fromDiscoveredSettingsWithAuth()for easy setup. #137 - Appending a message will now return the new UID of that message.
- Continue editing a draft easily by calling
MessageBuilder prepareFromDraft(MimeMessage draft). - You now easier load the next page of of search using
MailClient.searchMessagesNextPage(MailSearchResult). - Improve null-safety.
- Breaking API changes:
- To align with Dart APIs,
MessageSequence.isEmptyandisNotEmptyare now getters and not methods anymore. So instead ofif (sequence.isEmpty())please now useif (sequence.isEmpty), etc. - Date headers are always decoded to local time. Instead of
mimeMessage.decodeDate().toLocal()now just callmimeMessage.decodeDate(). - High level API
MailSearchResulthas been refactored to usePagedMessageSequence.
- To align with Dart APIs,
1.0.0 #
enough_mailis now null safe #127- Support
zulutimezone in date decoding #132 - When the
MailClientloses a connection or reconnects, it will now fire correspondingMailConnectionLostandMailConnectionReEstablishedevents. - When the
MailClientreconnects, it will fetch new messages automatically and notify about them usingMailLoadEvent. - Breaking changes to
v0.3:MessageBuilder.encodingis renamed toMessageBuilder.transferEncodingand theenumpreviously calledMessageEncodingis now calledTransferEncoding. All optional parameters previously calledencodingare now also namedtransferEncoding.MetaDataEntry.entryhas been renamed toMetaDataEntry.name.ImapClient.setQuota()andgetQuota()methods use named parameters.- Due to null safety, a lots of functions that previously (wrongly) accepted
nullparameters do not acceptnullas input anymore. - Some fields changed to
finalto ensure consistency.
0.3.1 #
- Fix for handling
PARTIALIMAP responses - thanks to A.Zulli - Fix for handling
FETCHIMAP responses that are spread across several response lines for a single message - #131
0.3.0 #
- KevinBLT contributed the following improvements and features:
- Check out the experimental DKIM signing of messages.
- Enjoy the improved the performance of
QuotedPrintableencoding. - BCC header is now stripped from messages before sending them via SMTP
- A.Zulli contributed major IMAP features in this release:
- Sort messages with
ImapClient.sortMessages(...)SORT - and also use the extended sort mechanism with specifyingreturnOptionson servers with ESORT. ImapClient.searchMessages(...)now acceptsList<ReturnOption>parameter for extending the search according to the ESEARCH standard.- Support
PARTIALresponses according to the CONTEXT IMAP extension. - Use the LIST extensions:
- Sort messages with
- Alexander Sotnikov fixed
POP3so that you can now use thePopClientas intended. - SMTP improvements:
- You can now send messages via the SMTP
BDATcommand usingSmtpClient.sendChunkedMessage()/sendChunkedMessageData()/sendChunkedMessageText(). - You don't require a
MimeMessageto send any more when you send messages either viaSmtpClient.sendMessageData()orSmtpClient.sendMessageText().
- You can now send messages via the SMTP
- MessageBuilder / MIME generation improvements:
- Attachments are now also added when forrwarding a message without quoting in
MessageBuilder.prepareForwardMessage(). - You can now also prepend parts by setting
inserttotruewhen callingaddPart().
- Attachments are now also added when forrwarding a message without quoting in
- Other improvements and bugfixes:
- Remove some dependencies and relax constraints on some so that we all get quicker through the
null-safetychallenge. - Fixed decoding of 8bit messages that use a different charset than UTF8
- Fixed header decoding in some edge cases
- Some fixes in parsing personal names in email addresses
- Support Chinese encodings
GBKandGB-2312 - Improve reconnecting when using the high level API
- Only download the
ENVELOPEinformation when a new mail is detected in high level API
- Remove some dependencies and relax constraints on some so that we all get quicker through the
- Breaking changes:
MessageBuilder.replyToMessageis renamed toMessageBuilder.originalMessage
0.2.1 #
- Allow to specify
connectionTimeoutfor all low level clients - Support non-ASCII IMAP searches when supported by server
- Fix reconnection issue for
ImapClient - Fix decoding of sequentiell encoded words in edge cases
- Do a
noopwhen resumingMailClientwhen server does not supportIDLE
0.2.0 #
- ImapClient now processes tasks sequentially, removing the dreaded
StreamSink is bound to a streamexception when accessing ImapClient from several threads. - Highlevel API for adding mail messages with
MailClient.appendMessage(...)/.appendMessageToFlag(...)andMailClient.saveDraftMessage(...) - Searching for messages is now easier than ever with
MailClient.search(MailSearch)andSearchQueryBuilder- #109 - Sent messages are now appended automatically when using the high level
MailClient.sentMessage(...)call unless setting theappendToSentparameter tofalse. - Create IMAP search criteria with
SearchQueryBuilderand conduct common searches withMailClient.search(MailSearch) - Fixed detection of audio media types
- Added
CRAM-MD5authentication support for SMTP - #108 - Added
XOAUTH2authentication support for SMTP - #107 - Create MessageSequence from list of mime messages with
MessageSequence.fromMessages(List<MimeMessage>) - You can now check with the highlevel API if you can send 8bit messages with
MailClient.supports8BitEncoding()and set the preferred encoding withMailClient.buildMimeMessageWithRecommendedTextEncoding(MessageBuilder). MessageBuildernow can recommend text encodings withMessageBuilder.setRecommendedTextEncoding(bool supports8Bit)and sets content types automatically depending on attachments.- Access attachment information easier using the
MessageBuilder.attachmentsfield and theAttachmentInfoclass. - You can send a
MessageBuilderinstance instead of aMimeMessagewithMailClient.sendMessageBuilder(...). - Breaking API changes:
SmtpClient.login()is deprecated, please use the better namedSmtpClient.authenticate()instead, e.g.:await smtpClient.authenticate(userName, password, AuthMechanism.login)BodyPart.idis renamed toBodyPart.cidto make the meaning clearer.
0.1.0 #
- Moving from response based to exceptions, compare the migration guide for details compare the migration guide in Readme.md and #101 for details - specicial thanks to Tienisto
- Improved performance when downloading large data significantly
- High Level API now checks for SMTP START TLS support before switching to a secure connection when connected via plan sockets
- Low level SMTP API now exposes all found server capabilities
- Fix decoding bug for UTF8 8 bit encoded text
ImapClient.search(...)now returns aMessageSequenceinstead just a list of integers- High level API now supports moving messages with
MailClient.moveMessages(...)andMailClient.undoMoveMessages()methods - High level API now supports deleting messages with
MailClient.deleteMessages(...)andMailClient.undoDeleteMessages()methods
0.0.36 #
- Remove spaces between two encoded words in headers
- High level API support for deleting messages and undoing it:
Future<MailResponse<DeleteResult>> deleteMessages(MessageSequence sequence, Mailbox trashMailbox)Future<MailResponse<DeleteResult>> deleteAllMessages(Mailbox mailbox,{bool expunge})
- Deleted messages are now preferably moved to
\Trashfolder, when possible. - Optionally mark a message as seen by setting
markAsSeenparameter totruewhen fetching messages or message contents using the high level API, e.g.MailClient.fetchMessageContents(message, markAsSeen: true);
0.0.35 #
- Ignoring malformed UT8 when logging thanks to Tienisto.
- Use
enough_convertpackage for previously missing character encodings. - Add
MimeMessage.parseFromText(String text)helper method. - Add Open PGP mime types like
MediaSubtype.applicationPgpSignatureto known media types.
0.0.34 #
- Fix handling of
VANISHED (EARLIER)responses in edge cases thanks to Andrea. - Find a mime message part by its content-ID with the
MimeMessage.getPartWithContentId(String cid)helper method. - List all parts of a mime message sequentially using the
MimeMessage.allPartsFlatgetter. - Fix problems with
UTF88-bit decoded answers. - Use the enough_serialization for JSON (de)serialization support.
- Improve discovery of mail settings.
- Allow to limit the download size of messages:
MailClient.fetchMessageContents(MimeMessage message, {int maxSize})fetches all parts apart from attachments when the message size is bigger than the one specified in bytes inmaxSize. - Improve documentation, also thanks to TheOneWithTheBraid.
0.0.33 #
- Support IMAP QUOTA Extension thanks to azulli.
- Throw exceptions that might occur while sending a message thanks to hpoul.
- Retrieve currently selected mailbox in highlevel API with
MailClient.selectedMailbox. - Specify
fetchPreferencein highlevel API when fetching messages, for example to only fetchENVELOPEs first. - Create a message builder based on a mailto link with
MessageBuilder.prepareMailtoBasedMessage(). - Mail events now contain the originating ImapClient, SmtpClient or MailClient instance to match the event when having several active accounts at the same time.
- Support the SMTP
AUTH LOGINauthentication by specying theauthMechanismparameter inSmtpClient.login(). - Ease flagging of messages with
MailClient.flagMessage(). - Highlevel API now udates flags of a message correctly when they have changed remotely.
0.0.32 #
- easier to retrieve and set common message flags such as
\Seen,\Answeredand$Forwarded - use
MimeMessage.isSeen,.isAnswered,.isForwardedto query the corresponding flags - use
MimeMessage.hasAttachments()orMimeMessage.hasAttachmentsOrInlineNonTextualParts()to determine if the message contains attachment parts. - Q-Encoding is used for encoding/decoding corresponding MIME message headers now, compare #77 for details
0.0.31 #
- Mime: List all message parts with a specfic Content-Disposition with
MimeMessage.findContentInfo(ContenDisposition disposition). - Mime: Retrieve an individual message part with
MimeMessage.getPart(String fetchId) - Bugfix: fetch individual message parts via IMAP with
BODY[1.2]now works. - MailClient: Download individual message parts with
MailClient.fetchMessagePart(MimeMessage message, String fetchId). - MailClient: events now provide reference to used
MailClientinstance, so that apps can differentiate between accounts. - MessageBuilder: allow to specify user aliases and to handle + aliases and to differentiate between reply and reply-all in
MessageBuilder.prepareReplyToMessage() - ImapClient: Ensure that every Inbox has a
MailboxFlag.inbox.
0.0.30 #
- Thanks to hpoul the XML library now works with both beta and stable flutter channels.
- Thanks to hydeparkk encoded mailbox paths are now used in copy, move, status and append/
- Fix decoding bug for UTF8 8 bit encoded text
- Fix handling mailboxes with a space in their path
- Allow to easly serialize and deserialize MailAccount to/from JSON.
- Extended high level MailClient API:
- Allow to select mailbox by path
- Disconnect to close connections
- Include fetching message flags when fetching messages
- Allow to store message flags, e.g. mark as read
- Provide access to low level API from within the high level API
0.0.29 #
- Add
discconect()method to high levelMailClientAPI - Encode and decode mailbox names using Modified UTF7 encoding
- Add IMAP support for UTF-8
0.0.28 #
- High level
MailClientAPI supports IMAP IDLE, POP and SMTP.
0.0.27 #
- Downgraded crypto dependency to be compatible with flutter_test ons stable flutter channel again
0.0.26 #
- Added high level
MailClientAPI - Downgraded XML dependency to be compatible with flutter_test again
- Fixed
ImapClient'seventBusregistration when this is specified outside of ImapClient.
0.0.25 #
- Add support to discover email settings using the
Discoverclass.
0.0.24 #
- Improve parsing of IMAP
BODYSTRUCTUREresponses to FETCH commands. - Add message media types.
0.0.22 #
- Breaking API change: use FETCH IMAP methods now return
FetchImapResultinstead ofList<MimeMessage> - Breaking API change:
ImapFetchEventnow contains a fullMimeMessageinstead of just the sequence ID and flags - Added
ImapVanishedEventthat is called instead ofImapExpungeEventwhen QRESYNC has been enabled - Added support for QRESYNC extension
- Added support for ENABLE extension
- Fix handling STATUS responses (issue #56)
0.0.21 #
- Added support for ISO 8859-15 / latin9 encoding - based on UTF-8
0.0.20 #
- Breaking change: use
MessageSequencefor defining message ID or UID ranges instead of integer-based IDs
0.0.19 #
- Fix for fetching recent messages when the chunksize is larger than the existing messages - thanks to studiozocaro!
0.0.18 #
- Breaking API changes:
MimeMessage.bodyAPI, get and set text/plain and text/html parts in MimeMessage - Support nested BODY and BODYSTRUCTURE responeses when fetching message data
- Support CONDSTORE IMAP extension
- Support MOVE IMAP extension
- Support UIDPLUS IMAP extension
0.0.17 #
- Supports parsing BODYSTRUCTURE responses when fetching message data
- Also eased API for accessing BODY and BODYSTRUCTURE response data
0.0.16 #
- Adding 'name' parameter with quotes to 'Content-Type' header when adding a file
0.0.15 #
- Adding 'name' parameter to 'Content-Type' header when adding a file
0.0.14 #
- Save messages to the server with
ImapClient.appendMessage(). - Store message flags using the
ImapClient.store()method or use one of the mark-methods likemarkFlagged()ormarkSeen(). - Copy message(s) using
ImapClient.copy(). - Copy, fetch, store or search message with UIDs using
ImapClient.uidCopy(),uidStore(), etc. - Remove messages marked with the \Deleted flag using
ImapClient.expunge() - Authenticate via OAUTH 2.0 using
ImapClient.authenticateWithOAuth2()(AUTH=XOAUTH2) orauthenticateWithOAuthBearer()(AUTH=OAUTHBEARER). - You can now switch to TLS using
ImapClient.startTls(). - Query the capabilities using the
ImapClient.capability()call. - Let the server do some housekeeping using the
ImapClient.check()method.
0.0.13 #
- Forward complex messages with
MessageBuilder.prepareForwardMessage(), too (issue #24)
0.0.12 #
- Forward messages with
MessageBuilder.prepareForwardMessage()
0.0.11 #
- Adding simple reply generation with
MessageBuilder.prepareReplyToMessage()(issue #25) - Improvement for adding larger files (issue #28)
0.0.10 #
- Fix for message sending via SMTP (issue #27)
0.0.9 #
- Introducing MessageBuilder for easy mime message creation
- Adapted example
0.0.8 #
- Ease access to text contents of a mime message
- Adapted example
0.0.7 #
- Parse MIME messages using MimeMessage.parse()
- Handle content encodings more reliably
0.0.6 #
- Supporting ASCII character character encodings and padding BASE64 headers if required
0.0.5 #
- Addressed health and syntax recommendations
0.0.4 #
- Support IMAP METADATA Extension
0.0.3 #
- Always end lines with
\r\nwhen communicating either with SMTP or IMAP server, parse iso-8859-1 encoded headers
0.0.2 #
- Cleaning architecture, adding support for
BODY[HEADER.FIELDS]messages
0.0.1 #
- Initial alpha version