

Ask HN: How hard is it to build an Email client? - anacleto

I&#x27;m venturing in unknown territory here.
Also I&#x27;m wondering if all protocols are easy&#x2F;hard to support E.g. SMTP, IMAP, POP3.
======
informatimago
SMTP is easy. POP3 is easy. IMAP is more complex.

Building a simple email client (say, like mail(1), even including SMTP and
POP3 instead of local delivery) is rather easy.

It could be a nice programming project for first year (2nd semester) students,
I'd say.

Of course, you can complexify things, adding GUI, IMAP, MIME, displaying
inline attached files (pictures, pdf files, etc), SSL/TLS, dealing with local
mail folders, spam filters, automatic mail sorting, including an wysiwyg
editor, message encryption with key management.

But the basic mail(1)-like client using SMTP and POP3 is easy.

------
TheDom
Take a look at LibEtPan, an open source Mail framework for C:
[https://github.com/dinhviethoa/libetpan](https://github.com/dinhviethoa/libetpan)

This is by one of the guys from Sparrow (RIP) [1] and powered it under the
hood.

[1]
[https://en.wikipedia.org/wiki/Sparrow_(email_client)](https://en.wikipedia.org/wiki/Sparrow_\(email_client\))

------
stevekemp
A lot of this will depend on your language/environment. There exist client-
libraries for IMAP, POP, etc. But if you don't have those then implementing
them will not be so difficult.

The truly hard part is dealing with emails themselves, both in terms of MIME,
and the bastardized broken things people will send you - malformed headers,
missing headers, etc, etc.

I wrote a modal console-based Email client, completely scriptable via lua:

[http://lumail.org/](http://lumail.org/)

It was more work than I expected, but also fun. So there are compensations.
(Obviously graphics make things harder, with threading, etc, but if you can
handle the core you should be able to wrap a GUI around it.)

------
pestaa
If you mean a full-fledged desktop application, it is very hard.
SMTP/POP3/IMAP will be walk in the park compared to the challenges you face
designing the UI.

