Discussion:
Announcing MimeKit and MailKit 1.0 w/ S/MIME and PGP support (thanks to Bouncy Castle)
Jeff Stedfast
2014-10-16 19:11:35 UTC
Permalink
After about a year in the making for MimeKit[1] and nearly 8 months for
MailKit[2], they've finally reached 1.0 status.

I started really working on MimeKit about a year ago wanting to give the
.NET community a top-notch MIME parser that could handle anything the real
world could throw at it. I wanted it to run on any platform that can run
.NET (including mobile) and do it with remarkable speed and grace. I wanted
to make it such that re-serializing the message would be a byte-for-byte
copy of the original so that no data would ever be lost. This was also very
important for my last goal, which was to support S/MIME and PGP out of the
box.

All of these goals for MimeKit have been reached (partly thanks to the
BouncyCastle project for the crypto support).

At the start of December last year, I began working on MailKit to aid in
the adoption of MimeKit. It became clear that without a way to
inter-operate with the various types of mail servers, .NET developers would
be unlikely to adopt it.

I started off implementing an SmtpClient with support for SASL
authentication, STARTTLS, and PIPELINING support.

Soon after, I began working on a Pop3Client that was designed such that I
could use MimeKit to parse messages on the fly, directly from the socket,
without needing to read the message data line-by-line looking for a ".\r\n"
sequence, concatenating the lines into a massive memory buffer before I
could start to parse the message. This fact, combined with the fact that
MimeKit's message parser is orders of magnitude faster than any other .NET
parser I could find, makes MailKit the fastest POP3 library the world has
ever seen.

After a month or so of avoiding the inevitable, I finally began working on
an ImapClient which took me roughly two weeks to produce the initial
prototype (compared to a single weekend for each of the other protocols).
After many months of implementing dozens of the more widely used IMAP4
extensions (including the GMail extensions) and tweaking the APIs (along
with bug fixing) thanks to feedback from some of the early adopters, I
believe that it is finally complete enough to call 1.0.

In July, at the request of someone involved with a number of the IETF
email-related specifications, I also implemented support for the new
Internationalized Email standards, making MimeKit and MailKit the first -
and only - .NET email libraries to support these standards.

If you want to do anything at all related to email in .NET, take a look at
MimeKit and MailKit. I guarantee that you will not be disappointed.



Again, many thanks to the Bouncy Castle developers (and in particular Peter
Dettman) for the work you guys have done and for answering my questions.


Jeff


1. https://github.com/jstedfast/MimeKit
2. https://github.com/jstedfast/MailKit
Edward Ned Harvey (bouncycastle)
2014-10-17 10:37:30 UTC
Permalink
Post by Jeff Stedfast
After about a year in the making for MimeKit[1] and nearly 8 months for
MailKit[2], they've finally reached 1.0 status.
Congratulations and thank you for that! I have a few questions -

Do they have a mailing list or forum or anything? When I look (at least at MailKit) I don't see anything...

I see clearly that MailKit does all kinds of cool stuff, with pop/imap/etc. But there's one question I have in particular. You said you started out implementing SmtpClient with support for TLS etc. But I recently used the .Net built-in SmtpClient for the first time, for sending mail, and had no trouble - I am guessing MailKit's implementation of SmtpClient is probably much more robust? With support for file attachments and so on? Is that the main difference or advantage?

Again, t
Jeff Stedfast
2014-10-17 15:37:19 UTC
Permalink
Hi Edward,

There's no mailing-lists. Last time I created a mailing-list is was
basically dead for a similar project, so I'm not in a rush to create them.
Emailing me personally or filing issues on GitHub is fine, so... I guess it
doesn't matter.

The main advantage of MailKit's SmtpClient is compliance with the
specifications. S.N.M is pretty bad when it comes to encoding of filenames
of attachments and encoding of headers in general. I *just* saw a website
with a list of all the problems with S.N.M the other day and now I can't
find it again. I should have bookmarked it.

But anyway, yea, MimeKit supports constructing any type of MIME message
structure you could dream of whereas S.N.M is limited to the ~3 or so
common structures (which is usually fine, to be fair), but it also does not
support S/MIME or PGP.

Hope that answers your questions,

Jeff

On Fri, Oct 17, 2014 at 6:37 AM, Edward Ned Harvey (bouncycastle) <
Post by Edward Ned Harvey (bouncycastle)
Post by Jeff Stedfast
After about a year in the making for MimeKit[1] and nearly 8 months for
MailKit[2], they've finally reached 1.0 status.
Congratulations and thank you for that! I have a few questions -
Do they have a mailing list or forum or anything? When I look (at least
at MailKit) I don't see anything...
I see clearly that MailKit does all kinds of cool stuff, with
pop/imap/etc. But there's one question I have in particular. You said you
started out implementing SmtpClient with support for TLS etc. But I
recently used the .Net built-in SmtpClient for the first time, for sending
mail, and had no trouble - I am guessing MailKit's implementation of
SmtpClient is probably much more robust? With support for file attachments
and so on? Is that the main difference or advantage?
Again, thanks. Cool projects.
Loading...