Click here to Skip to main content
6,305,776 members and growing! (17,580 online)
Email Password   helpLost your password?
General Programming » Internet / Network » Email     Intermediate

Sending Mail Using C# via SMTP

By Agus Kurniawan

A simple application for sending mail via SMTP server using C#
C#, Windows, .NET 1.0, Dev
Posted:19 Dec 2001
Views:246,180
Bookmarked:69 times
Announcements
Loading...
 
Search    
Advanced Search
printPrint   Broken Article?Report       add Share
  Discuss Discuss   Recommend Article Email
32 votes for this article.
Popularity: 5.32 Rating: 3.54 out of 5
4 votes, 14.3%
1
1 vote, 3.6%
2
1 vote, 3.6%
3
7 votes, 25.0%
4
15 votes, 53.6%
5

Introduction

This project shows how to send mail via an SMTP server using C#.

How to Send Mail via SMTP

Based on RFC 821 about Simple Mail Transfer Protocol, it's very easy to send mail via SMTP. Here's the handshaking for sending mail:

 Receiver: 220 server.com Simple Mail Transfer Service Ready
 Sender  : HELO server.com
 Receiver: 250 server.com
 Sender  : MAIL FROM: <agusk@host.com>
 Receiver: 250 OK
 Sender  : RCPT TO: <myhoney@host.com>
 Receiver: 250 OK
 Sender  : DATA
 Receiver: 354 Start mail input: end with <CRLF>.<CRLF>
 Sender  : all data like From, To, Subject, Body etc. 
           ended with <CRLF>.<CRLF>
 Receiver: 250 OK
 Sender  : QUIT
 Receiver: 250 server.com closing transmission channel

Building the Application Using C#

Here's a model of the GUI:

add these code lines for when the use clicks the Send button:

 private void SendBtn_Click(object sender, System.EventArgs e)
{
    // change cursor into wait cursor

    Cursor cr = Cursor.Current;
    Cursor.Current = Cursors.WaitCursor;

    // create server SMTP with port 25

    TcpClient SmtpServ = new TcpClient(ServSMTP.Text,25);
    string Data;
    byte[] szData;
    string CRLF = "\r\n";
    LogList.Items.Clear();            

    try
    {
        // initialization

        NetworkStream NetStrm = SmtpServ.GetStream();
        StreamReader  RdStrm= new StreamReader(SmtpServ.GetStream());
        LogList.Items.Add(RdStrm.ReadLine());
            
        // say hello to server and send response into log report

        Data = "HELLO server " + CRLF;                
        szData = System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray());
        NetStrm.Write(szData,0,szData.Length);
        LogList.Items.Add(RdStrm.ReadLine());
        // send sender data

        Data = "MAIL FROM: " + "<" + sFrom.Text + ">" + CRLF;
        szData = System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray());
        NetStrm.Write(szData,0,szData.Length);
        LogList.Items.Add(RdStrm.ReadLine());

        // send receiver data

        Data = "RCPT TO: " + "<" + sTo.Text + ">" + CRLF;
        szData = System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray());
        NetStrm.Write(szData,0,szData.Length);
        LogList.Items.Add(RdStrm.ReadLine());

        // send DATA

        Data = "DATA " + CRLF;
        szData = System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray());
        NetStrm.Write(szData,0,szData.Length);
        LogList.Items.Add(RdStrm.ReadLine());                

        // send content data

        Data = "SUBJECT: " + sSubject.Text + CRLF +
           sMessage.Text + CRLF + "." + CRLF;
        szData = System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray());
        NetStrm.Write(szData,0,szData.Length);
        LogList.Items.Add(RdStrm.ReadLine());                

        // quit from server SMTP

        Data = "QUIT " + CRLF;
        szData = System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray());
        NetStrm.Write(szData,0,szData.Length);
        LogList.Items.Add(RdStrm.ReadLine());                

        // close connection

        NetStrm.Close();
        RdStrm.Close();
        LogList.Items.Add("Close connection");
        LogList.Items.Add("Send mail successly..");

        // back to normal cursor

        Cursor.Current = cr;

    }
    catch(InvalidOperationException err)
    {
        LogList.Items.Add("Error: "+ err.ToString());
    }
}

Reference

  • Document RFC 821 and MSDN for .NET Development

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

Agus Kurniawan


Member
He gradueted from Sepuluh Nopember Institute of Technology (ITS) in Department of Electrical Engineering, Indonesia. His programming interest is VC++, C#, VB, VB.NET, .NET, VBScript, Delphi, C++ Builder, Assembly,and ASP/ASP.NET. He's consultant and architect for People Enterprise (www.PeopleEnterprise.com). He's currently based in Depok, Indonesia. His blog is http://geeks.netindonesia.net/blogs/agus
Occupation: Web Developer
Location: Indonesia Indonesia

Other popular Internet / Network articles:

Article Top
You must Sign In to use this message board.
FAQ FAQ 
 
Noise Tolerance  Layout  Per page   
 Msgs 1 to 25 of 53 (Total in Forum: 53) (Refresh)FirstPrevNext
Generalmail in C++ Pinmembermisa_qn22:47 23 Sep '08  
GeneralRe: mail in C++ Pinmemberurapola18:12 10 Nov '08  
Generalsending mail using C# Pinmembersobhaniir1:25 9 Aug '08  
GeneralRe: sending mail using C# PinmemberPedes2:23 21 Aug '08  
GeneralHelp , please Pinmemberprogramet_nje7:38 15 Apr '08  
GeneralHelp , please Pinmemberprogramet_nje7:37 15 Apr '08  
Generals this sending mail trhough SMTP dependent on any mail cilent?? Pinmembertika10:03 23 Apr '07  
Generalhaving problem Pinmembermohsen.karami18:48 5 Nov '06  
QuestionAuthentication problem PinmemberDannyAdler15:54 23 Mar '06  
GeneralAttachements Pinmemberjacek_pl3:57 14 Dec '05  
GeneralRe: Attachements PinmemberIsta17:39 26 Dec '05  
GeneralError in Code Pinmemberrob_johnson_200315:37 16 Nov '05  
GeneralReady for c++? Pinmembercemaaiem5:46 30 Oct '05  
GeneralSend Mail Pinmemberfredo_lefran7:23 10 Aug '05  
GeneralOpenSMTP.NET PinmemberUnruled Boy5:49 5 May '05  
GeneralRe: OpenSMTP.NET PinsussAnonymous7:59 14 Jul '05  
GeneralWindows 98? Pinmemberbefore1231:39 24 Sep '04  
GeneralSMTP server Pinmemberjmkuznitzki3:43 4 Aug '04  
GeneralSpecifying "from" field while sending the mail!!!! PinsussAnonymous1:32 13 May '04  
GeneralRe: SMTP AUTH Login ? PinmemberLiang Yitao7:05 25 Mar '04  
GeneralRe: SMTP AUTH Login ? Pinmemberpareshgheewala9:06 23 Apr '04  
GeneralRe: SMTP AUTH Login ? Pinmemberweb-mouse21:16 3 May '04  
GeneralBody message Pinmemberfelipedrumond10:55 25 Oct '03  
GeneralSMTP using C# Pinmembersanalsasiraj2:47 20 Aug '03  
GeneralTwo question PinmemberMazdak7:24 7 May '03  

General General    News News    Question Question    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

PermaLink | Privacy | Terms of Use
Last Updated: 19 Dec 2001
Editor: Nishant Sivakumar
Copyright 2001 by Agus Kurniawan
Everything else Copyright © CodeProject, 1999-2009
Web12 | Advertise on the Code Project