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 over 3 years ago
enough_mail
is now null safe #127zulu
timezone in date decoding #132MailClient
loses a connection or reconnects, it will now fire corresponding MailConnectionLost
and MailConnectionReEstablished
events.MailClient
reconnects, it will fetch new messages automatically and notify about them using MailLoadEvent
.v0.3
:
MessageBuilder.encoding
is renamed to MessageBuilder.transferEncoding
and the enum
previously called MessageEncoding
is now called TransferEncoding
. All optional parameters previously called encoding
are now also named transferEncoding
.MetaDataEntry.entry
has been renamed to MetaDataEntry.name
.ImapClient.setQuota()
and getQuota()
methods use named parameters.null
parameters do not accept null
as input anymore.final
to ensure consistency.Published by robert-virkus over 3 years ago
QuotedPrintable
encoding.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.PARTIAL
responses according to the CONTEXT IMAP extension.POP3
so that you can now use the PopClient
as intended.BDAT
command using SmtpClient.sendChunkedMessage()
/ sendChunkedMessageData()
/ sendChunkedMessageText()
.MimeMessage
to send any more when you send messages either via SmtpClient.sendMessageData()
or SmtpClient.sendMessageText()
.MessageBuilder.prepareForwardMessage()
.insert
to true
when calling addPart()
.null-safety
challenge.GBK
and GB-2312
ENVELOPE
information when a new mail is detected in high level APIMessageBuilder.replyToMessage
is renamed to MessageBuilder.originalMessage
Published by robert-virkus over 3 years ago
connectionTimeout
for all low level clientsImapClient
noop
when resuming MailClient
when server does not support IDLE
Published by robert-virkus over 3 years ago
StreamSink is bound to a stream
exception when accessing ImapClient from several threads.MailClient.appendMessage(...)
/ .appendMessageToFlag(...)
and MailClient.saveDraftMessage(...)
MailClient.search(MailSearch)
and SearchQueryBuilder
- #109MailClient.sentMessage(...)
call unless setting the appendToSent
parameter to false
.SearchQueryBuilder
and conduct common searches with MailClient.search(MailSearch)
CRAM-MD5
authentication support for SMTP - #108XOAUTH2
authentication support for SMTP - #107MessageSequence.fromMessages(List<MimeMessage>)
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.MessageBuilder.attachments
field and the AttachmentInfo
class.MessageBuilder
instance instead of a MimeMessage
with MailClient.sendMessageBuilder(...)
.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.Published by robert-virkus almost 4 years ago
ImapClient.search(...)
now returns a MessageSequence
instead just a list of integersMailClient.moveMessages(...)
and MailClient.undoMoveMessages()
methodsMailClient.deleteMessages(...)
and MailClient.undoDeleteMessages()
methodsPublished by robert-virkus almost 4 years ago
Future<MailResponse<DeleteResult>> deleteMessages(
MessageSequence sequence, Mailbox trashMailbox)
Future<MailResponse<DeleteResult>> deleteAllMessages(Mailbox mailbox,
{bool expunge})
\Trash
folder, when possible.markAsSeen
parameter to true
when fetching messages or message contentsMailClient.fetchMessageContents(message, markAsSeen: true)
;Published by robert-virkus almost 4 years ago
VANISHED (EARLIER)
responses in edge cases thanks to Andrea.MimeMessage.getPartWithContentId(String cid)
helper method.MimeMessage.allPartsFlat
getter.UTF8
8-bit decoded answers.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
.Published by robert-virkus about 4 years ago
MailClient.selectedMailbox
.fetchPreference
in highlevel API when fetching messages, for example to only fetch ENVELOPE
s first.MessageBuilder.prepareMailtoBasedMessage()
.AUTH LOGIN
authentication by specying the authMechanism
parameter in SmtpClient.login()
.MailClient.flagMessage()
.Published by robert-virkus about 4 years ago
\Seen
, \Answered
and $Forwarded
MimeMessage.isSeen
, .isAnswered
, .isForwarded
to query the corresponding flagsMimeMessage.hasAttachments()
or MimeMessage.hasAttachmentsOrInlineNonTextualParts()
to determine if the message contains attachment parts.Published by robert-virkus about 4 years ago
MimeMessage.findContentInfo(ContenDisposition disposition)
.MimeMessage.getPart(String fetchId)
BODY[1.2]
now works.MailClient.fetchMessagePart(MimeMessage message, String fetchId)
.MailClient
instance, so that apps can differentiate between accounts.MessageBuilder.prepareReplyToMessage()
MailboxFlag.inbox
.Published by robert-virkus about 4 years ago
Published by robert-virkus over 4 years ago
discconect()
method to high level MailClient
APIPublished by robert-virkus over 4 years ago
MailClient
APIImapClient
's eventBus
registration when this is specified outside of ImapClient.Published by robert-virkus over 4 years ago
Discover
class.Published by robert-virkus over 4 years ago
BODYSTRUCTURE
responses to FETCH commands.Published by robert-virkus over 4 years ago
FetchImapResult
instead of List<MimeMessage>
ImapFetchEvent
now contains a full MimeMessage
instead of just the sequence ID and flagsImapVanishedEvent
that is called instead of ImapExpungeEvent
when QRESYNC has been enabledMessageSequence
for defining message ID or UID ranges instead of integer-based IDsPublished by robert-virkus over 4 years ago
Published by robert-virkus over 4 years ago