I'm in process with a How To Select Guide on e-mail (actually there are a couple of us CodeBetter bloggers involved in writing guides for other components). I've actually written my first version and second versions. The actual guide will be published sometime in September.
I decided that I would do a quick blog about my experience writing e-mail components (or mail server interactions), so that you can see what I knew about before writing the guide... I definitely had a few areas where I was a bit deficient, but I also had some strong skills that made me qualified.
Like many of you I have been using e-mail for so long I can't remember. I touched my first component back in the mid 90s. I believe the first components I touched was the old Crescent Internet Toolpak. I also touched a bunch of others after that point. Unfortunately, I never really did anything with the components. I knew what they did and that was it.
Experience #1
A few years ago I was tasked with building a bulk e-mailing system. I worked for a flailing dotCom that specialized in web site design and programming (how many of those are there). Since I had great fears about my job, and I thought that it might make the company some money, I built the system. At the time the cutting edge technique to bypass privacy was to put a hidden image on the rich email that would ping back to our web site any time a user opened the e-mail. Since we didn't own an e-mail control I decided to write the entire SMTP client component from scratch. To add insult to injury, our networking staff had a tendency to break our TCP/IP components, so I took an article I found that discussed using the raw Windows APIs to do TCP/IP, and built my own TCP/IP component. On top of this control I built SMTP. I also found very quickly that I needed to roll my own messaging component (hereafter referred to as MIME). I needed my messages to include the "rich" email which was a flash file served up by our website, my image, and a text version of the message that would invite the user to go to the web site since their mail client didn't support HTML.
Experience #2
In my present job I was asked to finish a service that monitors a mailbox on our Exchange 2003 servers. I was told that WebDAV was the technology that would be used to do communications with the Exchange 2003 servers. After finding a few bugs, and refactoring the code to have some semblance of an object model, I discovered that I needed to touch the communications layer. I learned Exchange's WebDAV syntax and learned how to query Exchange. Very cool stuff!
Obviously I hadn't done much programming with POP3 or IMAP4 (or even MAPI for that matter), but I did have knowledge in the protocols (just no actual programming experience).
BTW, I have also done the normal use of the Persits COM object as well as the standard e-mail components that Microsoft supplies (BTW, they suck! If you like System.Web.Mail go to http://www.systemwebmail.com for some interesting discussions about System.Web.Mail... it's borderline unusable IMNSHO).
[now I can go back to spelling e-mail "email..." the standards for the guide say "e-mail" is the correct spelling]