PackageTrack
Sign in Get early access

enough_mail

IMAP, POP3 and SMTP for email developers. Choose between a low level and a high level API for mailing. Parse and generate MIME messages. Discover email settings.

2.1.7 18K downloads/mo #2285 most downloaded on pub.dev Enough-Software/enough_mail

What this package is like to depend on

Last release 1 years ago

19 Aug 2025

Ships unpredictably

gaps range from 8 days to 1.7 years

Most releases are documented

notes for 51 of 63 stable releases

Nothing withdrawn

no release was ever pulled

7 years old

63 releases · first in 2020

0 releases in the last 12 months

see the full history below

Release timeline

63 releases · Jan 2020 to Aug 2025
2021 2022 2023 2024 2025 2026
Release Pre-release

Releases

latest 60 of 63
  1. 2.1.7 19 Aug 2025
    Release notes
    • 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!
    Open source →
  2. 2.1.6 08 Dec 2023
    Release notes
    • Fix: Fix serialization of ServerConfig - thanks to RobinJespersen!
    • Feat: allow to specify connection timeout in high level API and increase default timeout
    Open source →
  3. 2.1.5 19 Nov 2023
    Release notes
    • Fix: Ensure compatibility with Flutter 3.16 - thanks to Tzanou123!
    Open source →
  4. 2.1.4 11 Nov 2023
    Release notes
    • Fix: use refreshed OAUTH tokens when using the high level MailClient API.
    • Fix: handle edge cases in IMAP FETCH responses.
    • 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.
    Open source →
  5. 2.1.3 16 Oct 2023
    Release notes
    • Fix: Apply correct mailbox path separator - thanks nruzzu!
    • Feat: add firstWhereOrNull search method for a Tree
    • Feat: add identityFlag getter to Mailbox
    Open source →
  6. 2.1.2 05 Oct 2023
    Release notes
    • 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
    Open source →
  7. 2.1.1 12 Jun 2022
    Release notes
    • 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
    Open source →
  8. 2.1.0 27 May 2022
    Release notes
    • The MailClient.deleteMessages() / undoDeleteMessages() as well as the moveMessages() and undoMoveMessages() calls
      will now update the given messages UIDs automatically, when they have been specified.
    • Simplify building a multipart/alternative message or message part by adding the option plainText and htmlText parameters
      in MessageBuilder.prepareMultipartAlternativeMessage() and addMultipartAlternative().
    • Fixed documentation for generating a mime message with an attachment (thanks lqmminh!).
    Open source →
  9. 2.0.1 22 May 2022
    Release notes
    • Thanks to yarsort resolved various POP3 bugs.
    • Interpret mime messages with an (invalid) 2-digit year as coming from the current millennium.
    Open source →
  10. 2.0.0 09 May 2022
    Release notes

    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 recipients getter.
      • Support decoding binary transfer-encoding for text message parts.
      • Introduce guid / global unique IDs which are set automatically when using the high-level MailClient.
      • Correctly unwrap header values before decoding them.
      • Accept headers that have no space after the colon-separator.
    • Improve high level API support for OAUTH:
      • You can now define refresh and onConfigChanged callback methods when connecting to a mail service using MailClient.
    • Support expunging messages when deleting them in MailClient with Future<DeleteResult> deleteMessages( MessageSequence sequence, {bool expunge = false}).
      OauthAuthentication now contains a complete OauthToken.
      main
    • MessageBuilder: Access also text-attachments in the attachments getter.
    • Only use STARTTLS when 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/enough_mail.dart'; or one of the specializes sub-packages codecs.dart,discover.dart, highlevel.dart, imap.dart, mime.dart, pop.dart or smtp.dart.
    • Authentication.passwordCleartext is renamed to Authentication.passwordClearText
    • Mailbox API 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.
    Open source →
  11. 1.3.6 13 Jul 2021

    Nothing published for this version

  12. 1.3.5 13 Jul 2021

    Nothing published for this version

  13. 1.3.4 16 Jun 2021

    Nothing published for this version

  14. 1.3.3 13 Jun 2021

    Nothing published for this version

  15. 1.3.2 08 Jun 2021

    Nothing published for this version

  16. 1.3.1 03 Jun 2021

    Nothing published for this version

  17. 1.3.0 24 May 2021

    Nothing published for this version

  18. 1.2.2 15 Apr 2021

    Nothing published for this version

  19. 1.2.1 10 Apr 2021

    Nothing published for this version

  20. 1.2.0 09 Apr 2021

    Nothing published for this version

  21. 1.1.0 07 Apr 2021

    Nothing published for this version

  22. 1.0.0 21 Mar 2021

    Nothing published for this version

  23. 0.3.1 10 Mar 2021
    Release notes
    • Fix for handling PARTIAL IMAP responses - thanks to A.Zulli
    • Fix for handling FETCH IMAP responses that are spread across several response lines for a single message - #131
    Open source →
  24. 0.3.0 07 Mar 2021
    Release notes
    • KevinBLT contributed the following improvements and features:
      • Check out the experimental DKIM signing of messages.
      • Enjoy the improved the performance of QuotedPrintable encoding.
      • 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 specifying returnOptions on servers with ESORT.
      • ImapClient.searchMessages(...) now accepts List<ReturnOption> parameter for extending the search according to the ESEARCH standard.
      • Support PARTIAL responses according to the CONTEXT IMAP extension.
      • Use the LIST extensions:
        • rfc5258: LIST command extensions
        • rfc5819: return STATUS in extended lists
        • rfc6154: SPECIAL-USE mailboxes
    • Alexander Sotnikov fixed POP3 so that you can now use the PopClient as intended.
    • SMTP improvements:
      • You can now send messages via the SMTP BDAT command using SmtpClient.sendChunkedMessage() / sendChunkedMessageData() / sendChunkedMessageText().
      • You don't require a MimeMessage to send any more when you send messages either via SmtpClient.sendMessageData() or SmtpClient.sendMessageText().
    • 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 insert to true when calling addPart().
    • Other improvements and bugfixes:
      • Remove some dependencies and relax constraints on some so that we all get quicker through the null-safety challenge.
      • 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 GBK and GB-2312
      • Improve reconnecting when using the high level API
      • Only download the ENVELOPE information when a new mail is detected in high level API
    • Breaking changes:
      • MessageBuilder.replyToMessage is renamed to MessageBuilder.originalMessage
    Open source →
  25. 0.2.1 04 Feb 2021
    Release notes
    • Allow to specify connectionTimeout for 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 noop when resuming MailClient when server does not support IDLE
    Open source →
  26. 0.2.0 02 Feb 2021
    Release notes
    • ImapClient now processes tasks sequentially, removing the dreaded StreamSink is bound to a stream exception when accessing ImapClient from several threads.
    • Highlevel API for adding mail messages with MailClient.appendMessage(...) / .appendMessageToFlag(...) and MailClient.saveDraftMessage(...)
    • Searching for messages is now easier than ever with MailClient.search(MailSearch) and SearchQueryBuilder- #109
    • Sent messages are now appended automatically when using the high level MailClient.sentMessage(...) call unless setting the appendToSent parameter to false.
    • Create IMAP search criteria with SearchQueryBuilder and conduct common searches with MailClient.search(MailSearch)
    • Fixed detection of audio media types
    • Added CRAM-MD5 authentication support for SMTP - #108
    • Added XOAUTH2 authentication 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 with MailClient.buildMimeMessageWithRecommendedTextEncoding(MessageBuilder).
    • MessageBuilder now can recommend text encodings with MessageBuilder.setRecommendedTextEncoding(bool supports8Bit) and sets content types automatically depending on attachments.
    • Access attachment information easier using the MessageBuilder.attachments field and the AttachmentInfo class.
    • You can send a MessageBuilder instance instead of a MimeMessage with MailClient.sendMessageBuilder(...).
    • Breaking API changes:
      • SmtpClient.login() is deprecated, please use the better named SmtpClient.authenticate() instead, e.g.: await smtpClient.authenticate(userName, password, AuthMechanism.login)
      • BodyPart.id is renamed to BodyPart.cid to make the meaning clearer.
    Open source →
  27. 0.1.0 11 Jan 2021
    Release notes
    • 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 a MessageSequence instead just a list of integers
    • High level API now supports moving messages with MailClient.moveMessages(...) and MailClient.undoMoveMessages() methods
    • High level API now supports deleting messages with MailClient.deleteMessages(...) and MailClient.undoDeleteMessages() methods
    Open source →
  28. 0.0.36 20 Dec 2020
    Release notes
    • 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 \Trash folder, when possible.
    • Optionally mark a message as seen by setting markAsSeen parameter to true when fetching messages or message contents using the high level API, e.g. MailClient.fetchMessageContents(message, markAsSeen: true);
    Open source →
  29. 0.0.35 09 Dec 2020
    Release notes
    • Ignoring malformed UT8 when logging thanks to Tienisto.
    • Use enough_convert package for previously missing character encodings.
    • Add MimeMessage.parseFromText(String text) helper method.
    • Add Open PGP mime types like MediaSubtype.applicationPgpSignature to known media types.
    Open source →
  30. 0.0.34 03 Dec 2020
    Release notes
    • 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.allPartsFlat getter.
    • Fix problems with UTF8 8-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 in maxSize.
    • Improve documentation, also thanks to TheOneWithTheBraid.
    Open source →
  31. 0.0.33 20 Sep 2020
    Release notes
    • 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 fetchPreference in highlevel API when fetching messages, for example to only fetch ENVELOPEs 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 LOGIN authentication by specying the authMechanism parameter in SmtpClient.login().
    • Ease flagging of messages with MailClient.flagMessage().
    • Highlevel API now udates flags of a message correctly when they have changed remotely.
    Open source →
  32. 0.0.32 11 Aug 2020
    Release notes
    • easier to retrieve and set common message flags such as \Seen, \Answered and $Forwarded
    • use MimeMessage.isSeen, .isAnswered, .isForwarded to query the corresponding flags
    • use MimeMessage.hasAttachments() or MimeMessage.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
    Open source →
  33. 0.0.31 09 Aug 2020
    Release notes
    • 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 MailClient instance, 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.
    Open source →
  34. 0.0.30 02 Aug 2020
    Release notes
    • 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
    Open source →
  35. 0.0.29 04 Jul 2020
    Release notes
    • Add discconect() method to high level MailClient API
    • Encode and decode mailbox names using Modified UTF7 encoding
    • Add IMAP support for UTF-8
    Open source →
  36. 0.0.28 21 Jun 2020
    Release notes
    • High level MailClient API supports IMAP IDLE, POP and SMTP.
    Open source →
  37. 0.0.27 18 Jun 2020
    Release notes
    • Downgraded crypto dependency to be compatible with flutter_test ons stable flutter channel again
    Open source →
  38. 0.0.26 16 Jun 2020
    Release notes
    • Added high level MailClient API
    • Downgraded XML dependency to be compatible with flutter_test again
    • Fixed ImapClient's eventBus registration when this is specified outside of ImapClient.
    Open source →
  39. 0.0.25 10 Jun 2020
    Release notes
    • Add support to discover email settings using the Discover class.
    Open source →
  40. 0.0.24 07 Jun 2020
    Release notes
    • Improve parsing of IMAP BODYSTRUCTURE responses to FETCH commands.
    • Add message media types.
    Open source →
  41. 0.0.23 02 Jun 2020
    Release notes
    • Provide POP3 support
    Open source →
  42. 0.0.22 31 May 2020
    Release notes
    • Breaking API change: use FETCH IMAP methods now return FetchImapResult instead of List<MimeMessage>
    • Breaking API change: ImapFetchEvent now contains a full MimeMessage instead of just the sequence ID and flags
    • Added ImapVanishedEvent that is called instead of ImapExpungeEvent when QRESYNC has been enabled
    • Added support for QRESYNC extension
    • Added support for ENABLE extension
    • Fix handling STATUS responses (issue #56)
    Open source →
  43. 0.0.21 21 May 2020
    Release notes
    • Added support for ISO 8859-15 / latin9 encoding - based on UTF-8
    Open source →
  44. 0.0.20 21 May 2020
    Release notes
    • Breaking change: use MessageSequence for defining message ID or UID ranges instead of integer-based IDs
    Open source →
  45. 0.0.19 14 May 2020
    Release notes
    • Fix for fetching recent messages when the chunksize is larger than the existing messages - thanks to studiozocaro!
    Open source →
  46. 0.0.18 12 May 2020
    Release notes
    Open source →
  47. 0.0.17 07 May 2020
    Release notes
    • Supports parsing BODYSTRUCTURE responses when fetching message data
    • Also eased API for accessing BODY and BODYSTRUCTURE response data
    Open source →
  48. 0.0.16 04 May 2020
    Release notes
    • Adding 'name' parameter with quotes to 'Content-Type' header when adding a file
    Open source →
  49. 0.0.15 04 May 2020
    Release notes
    • Adding 'name' parameter to 'Content-Type' header when adding a file
    Open source →
  50. 0.0.14 03 May 2020
    Release notes
    • Save messages to the server with ImapClient.appendMessage().
    • Store message flags using the ImapClient.store() method or use one of the mark-methods like markFlagged() or markSeen().
    • 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) or authenticateWithOAuthBearer() (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.
    Open source →
  51. 0.0.13 29 Apr 2020
    Release notes
    • Forward complex messages with MessageBuilder.prepareForwardMessage(), too (issue #24)
    Open source →
  52. 0.0.12 26 Apr 2020
    Release notes
    • Forward messages with MessageBuilder.prepareForwardMessage()
    Open source →
  53. 0.0.11 23 Apr 2020
    Release notes
    • Adding simple reply generation with MessageBuilder.prepareReplyToMessage() (issue #25)
    • Improvement for adding larger files (issue #28)
    Open source →
  54. 0.0.10 15 Apr 2020
    Release notes
    • Fix for message sending via SMTP (issue #27)
    Open source →
  55. 0.0.9 12 Apr 2020
    Release notes
    • Introducing MessageBuilder for easy mime message creation
    • Adapted example
    Open source →
  56. 0.0.8 28 Mar 2020
    Release notes
    • Ease access to text contents of a mime message
    • Adapted example
    Open source →
  57. 0.0.7 28 Mar 2020
    Release notes
    • Parse MIME messages using MimeMessage.parse()
    • Handle content encodings more reliably
    Open source →
  58. 0.0.6 03 Mar 2020
    Release notes
    • Supporting ASCII character character encodings and padding BASE64 headers if required
    Open source →
  59. 0.0.5 10 Feb 2020
    Release notes
    • Addressed health and syntax recommendations
    Open source →
  60. 0.0.4 09 Feb 2020
    Release notes Open source →

Every package, every release, already written down.

The archive is open and free. Watching your own project is what we are building next.

Browse the archive