Click here to Skip to main content
Click here to Skip to main content

A class for sending emails with attachments in C#.

By , 28 Feb 2003
 

Introduction

This is a SMTP client implementation in C#. It handles attachments and sending the body as HTML. It can also do basic (AUTH LOGIN PLAIN) and Base64 (AUTH LOGIN) authentication.

A little while back, I went looking for a (free) class/library to send email with in C#. I found several examples, but none fit my needs. They mostly demonstrated the basics and did not get into attachments. So, I decided to write my own implementation.

I reviewed several RFCs (821,822 mostly) and set about the task. The initial process was pretty straight forward and proved a good lesson in Tcp communication in C#. The attachment process was a little confusing. I understood how to do what I needed to, but was unsure of exactly what, and in what order, to do. The RFC for that and the MIME related ones aren't exactly crystal clear. That's when I found PJ Naughter's CSMTPConnection class. His implementation helped me to see the correct sequencing/structure of the MIME parts and was overall very useful. The version on The Code Project is a little old however, I would recommend getting it from PJ's site. Many thanks to him for a great example.

There is a second project in the solution which is a basic email form that uses this class.

The main class can be used as follows

Example usage of class:

SmtpEmailer emailer = new SmtpEmailer();
emailer.Host = "mymail.host.com";			
emailer.From = "someone@somwhere.com";
emailer.AuthenticationMode = AuthenticationType.Base64;
emailer.User = "myuserid";
emailer.Password = "mypassword";
emailer.Subject = "a test message";
emailer.Body = "this is only a test";
emailer.To.Add("toperson1@nowhere.com");
emailer.To.Add("toperson2@nowhere.com");
emailer.Attachments.Add(new SmtpAttachment(@"c:\file1.exe"));
emailer.Attachments.Add(new SmtpAttachment(@"c:\file2.txt"));      
emailer.SendMessage();

You can also send the body as HTML and include inline images by adding:

emailer.SendAsHTML = true;

When you send as HTML and you want to include images inline in the HTML, you would add the attachment as follows:

emailer.Attachments.Add(new SmtpAttachment(@"c:\mypicture.jpg", 
                        "image/jpg", AttachmentLocation.Inline));

The image will be given an ID that is it filename without extension. You then refer to the image in the html as

 <img src="cid:MY_FILENAME_WITHOUT_EXTENSION">

There is also an event, OnMailSent for use with the SendMessageAsync method. If people find this useful, then I will post updates/enhancements along the way. Enjoy.

Version History

1.4 - Added plain text (AUTH LOGIN PLAIN) and base64 (AUTH LOGIN) authentication.
Added CC/BCC properties.

1.3 - Fixed MIME header sequences and several issues with Outlook vs Outlook Express.

1.2 - Fixed quoted-printable encoding problem and an issue with Outlook.

1.1 - Added HTML body support, better MIME handling.

1.0 - Initial release.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here

About the Author

Steaven Woyan
Web Developer
United States United States
Member
No Biography provided

Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
Hint: For improved responsiveness ensure Javascript is enabled and choose 'Normal' from the Layout dropdown and hit 'Update'.
You must Sign In to use this message board.
Search this forum  
    Spacing  Noise  Layout  Per page   
Generaldate Header problem with not en-US countrymemberfravelgue8 Nov '10 - 23:12 
Questiongreat work but what about SSL?memberAdore C++13 Jun '09 - 6:32 
Generalproblems in sending emailsmemberammartahan16 Jul '06 - 3:29 
GeneralRe: problems in sending emailsgroupMihaiPopescu4 Jul '10 - 20:52 
Generalembedding images (inline images)memberrocder10 Jul '06 - 2:40 
GeneralThread-safe MessageBox in OnMailSent event handlermemberMichael Freidgeim3 Jul '06 - 17:12 
GeneralStatics in SmtpAttachment classmemberTiTi____20 Apr '06 - 0:43 
GeneralRe: Statics in SmtpAttachment classmemberTiTi____21 Apr '06 - 0:27 
GeneralHelp ..im about to be crazy..membercoolshad15 Mar '06 - 15:37 
Generalgreat!memberMP3Observer14 Mar '06 - 12:09 
GeneralError with attachments.membery2k4life4 Feb '06 - 18:17 
General"Sent:" date wrong in Outlookmembermichaelloveusa31 Jan '06 - 8:26 
Generalabout the encoding of attachmentsmemberBouarf3 Jan '06 - 23:20 
Questionhow to send images with in the body of mailmembersreesiri8 Dec '05 - 1:13 
Generaldateformat not rfcmemberKylixs10 Oct '05 - 13:48 
GeneralRe: dateformat not rfcmemberStar936 Jan '06 - 8:17 
GeneralSmtpClient in .NET 2.0memberAlexander Kojevnikov14 Sep '05 - 22:25 
GeneralMail subject whithout correct iso-8859-1 ponctuationmemberandre.lourenco@link.pt12 Sep '05 - 0:37 
AnswerRe: Mail subject whithout correct iso-8859-1 ponctuationmembergabrielbur14 Nov '07 - 4:17 
GeneralLittle bug with big effectmemberStar936 Jul '05 - 23:04 
QuestionCan you see the image in your mail?susshandlim26 Apr '05 - 0:17 
AnswerRe: Can you see the image in your mail?memberThe_Mega_ZZTer27 Sep '05 - 7:05 
GeneralRe: Can you see the image in your mail?membersanish197914 Sep '07 - 0:34 
GeneralBCC in Headermemberstilton@cheese.com13 Apr '05 - 3:03 
GeneralNice but Spam filters let the Emails not passmemberStar935 Apr '05 - 14:26 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Permalink | Advertise | Privacy | Mobile
Web03 | 2.6.130516.1 | Last Updated 1 Mar 2003
Article Copyright 2002 by Steaven Woyan
Everything else Copyright © CodeProject, 1999-2013
Terms of Use
Layout: fixed | fluid