IMAP, POP3 and SMTP clients for Dart developers. Contains both low level as well as a high level API.
MPL-2.0 License
Bot releases are hidden (Show)
Published by robert-virkus 11 months ago
FETCH
responses.Published by robert-virkus about 1 year ago
Published by robert-virkus over 2 years ago
MailClient.deleteMessages()
/ undoDeleteMessages()
as well as the moveMessages()
and undoMoveMessages()
callsmessages
UIDs automatically, when they have been specified.multipart/alternative
message or message part by adding the option plainText
and htmlText
parametersMessageBuilder.prepareMultipartAlternativeMessage()
and addMultipartAlternative()
.Published by robert-virkus over 2 years ago
Improvements and fixes:
MimeMessage
:
MimePart? getAlternativePart(MediaSubtype subtype)
.List<MailAddress> get recipients
getter.binary
transfer-encoding for text message parts.guid
/ global unique IDs which are set automatically when using the high-level MailClient
.refresh
and onConfigChanged
callback methods when connecting to a mail service using MailClient
.MailClient
with Future<DeleteResult> deleteMessages( MessageSequence sequence, {bool expunge = false})
.MessageBuilder
: Access also text-attachments in the attachments
getter.STARTTLS
when the IMAP service supports it.Breaking changes:
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:
Published by robert-virkus over 3 years ago
MessageBuilder
. Previously semicolons were used that were not accepted by all mail providers.Published by robert-virkus over 3 years ago
bool Function(X509Certificate)? onBadCertificate
callback to handle invalid certificates #167MailClient
IDLE
requests when already in idle mode in ImapClient
Published by robert-virkus over 3 years ago
Published by robert-virkus over 3 years ago
MailAccount
with manual settings by calling MailAccount.fromManualSettings()
MailAccount.fromManualSettingsWithAuth()
. This is useful when settings cannot or should not be auto-discovered, for example.Published by robert-virkus over 3 years ago
AUTH
/LOGIN
response #159Published by robert-virkus over 3 years ago
SmtpException
s now contain the full error descriptionPublished by robert-virkus over 3 years ago
MimeMessage.isReadReceiptRequested
MessageBuilder.buildReadReceipt()
MessageBuilder.addMessagePart()
#153BODYSTRUCTURE
with MimeMessage.body.allLeafParts
fetchId
#141 #143 - Thanks to A.Zulli again!utf-8
rather than utf8
to reduce problems #144 - Thanks to gmalakov
{0}
response #145Published by robert-virkus over 3 years ago
8bit
encoding when no content-transfer-encoding
is specified in a MIME message.MessageBuilder
.1
correctly.ImapClient.idleStart()
throws an error when no mailbox is selected.MailClient.fetchMessageContents()
allows you to specify which media types you want to include with the includedInlineTypes
parameter, e.g. final mime = await mailClient.fetchMessageContents(envelopeMime, includedInlineTypes: [MediaToptype.image]);
.MailboxFlag.sent
with MailClient.selectMailboxByFlag(MailboxFlag)
method.MailAddress.hasPersonalName
getter.Published by robert-virkus over 3 years ago
FETCH
responses.Published by robert-virkus over 3 years ago
UNSELECT
IMAP command of rfc3691 is now supported with ImapClient.unselectMailbox()
.ImapClient.threadMessages()
and uidThreadMessage()
as well as the high level API MailClient.fetchThreads()
and fetchThreadData()
, the latter can set the MimeMessage.threadSequence
automatically. #44message/rfc822
messages using mimePart.decodeContentMessage()
. #138SearchQueryType.toOrFrom
to easily search for recipients or senders of a message.MailClient
API.MailAccount.fromDiscoveredSettingsWithAuth()
for easy setup. #137MessageBuilder prepareFromDraft(MimeMessage draft)
.MailClient.searchMessagesNextPage(MailSearchResult)
.MessageSequence.isEmpty
and isNotEmpty
are now getters and not methods anymore. So instead of if (sequence.isEmpty())
please now use if (sequence.isEmpty)
, etc.mimeMessage.decodeDate().toLocal()
now just call mimeMessage.decodeDate()
.MailSearchResult
has been refactored to use PagedMessageSequence
.