SmtpClient Class


Provides properties and methods for sending email messages and testing recipients.

System.Object
    EASendMail.SmtpClient

[Visual Basic]
Public Class SmtpClient
[C#]
public class SmtpClient
[C++]
public ref class SmtpClient
[JScript]
public class SmtpClient

Thread Safety

Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.

Public Constructors

SmtpClient Constructor Initializes a new instance of the SmtpClient class.

Public Properties

BindEndPoint Gets or sets the local binded IP address for sending email.
CurrentSmtpServer Gets the latest smtp server that is used to send e-mail message.
DnsServerIP Gets or sets the dns server IP address for sending email directly.
LogFileName Gets or sets the log file name for smtp transaction.
SaveCopy Specifies if server should save a copy of message in sent folder.
SmtpConversation Gets the latest smtp conversation beween smtp server and smtp client.
Tag

Gets or sets an object that contains data to associate with the SmtpClient.

Timeout

Gets or sets the maximum time interval(seconds) the object will wait for a response from server before returning an error.

Public Methods

BatchSendMail Sends bulk e-mail messages with multiple threads.
BeginSendMail Sends the e-mail message asynchronously.
BeginSendRawMail Sends the e-mail message with raw content asynchronously.
BeginTestRecipients Tests the e-mail address asynchronously.
Connect Connects a smtp server.
EndSendMail Ends a pending asynchronous send.
EndTestRecipients Ends a pending asynchronous test.
PostToRemoteQueue Sends email message to remote EASendMail Service queue.
Quit Disconnects the smtp server.
Reset Sends a RSET command to smtp server.
SendMail Sends an e-mail message.
SendRawMail Sends an e-mail message with raw content.
SendMailToQueue Sends an e-mail message to EASendMail Service.
SendMailToQueueEx Sends an e-mail message to specified instance of EASendMail Service.
TestRecipients Tests an e-mail address.

Public Events

OnAuthorized Occurs when smtp server has authorized the user.
OnBatchSendMail Occurs when an email was sent by BatchSendMail method.
OnConnected Occurs when the client has connected to smtp server successfully.
OnIdle Occurs when the client is connecting server or waiting response from smtp server.
OnQuit Occurs when the client is disconnecting the smtp server.
OnRcptToError Occurs when the smtp server rejected a recipient.
OnReceiveResponse Occurs when the client has received a response from smtp server.
OnSecuring Occurs when the client is establishing the SSL connection.
OnSendCommand Occurs when the client has sent a command to the smtp server.
OnSendingDataStream Occurs when the client is sending the e-mail data to the smtp server.

Example

[Visual Basic, C#, C++, JScript.NET] The following example demonstrates how to send email with EASendMail SMTP Component, but it doesn't demonstrates the events usage. To get the full samples of EASendMail, please refer to Samples section.

[VB - Send Email Example]
Imports EASendMail

Public Sub SendMail( sFrom As String, _ 
    sTo As String, _ 
    sCc As String, _  
    sServer As String, _
    sUserName As String, _
    sPassword As String, _
    sSubject As String, _
    sBodyText As String, _
    bSSLConnection As Boolean )

    Dim oMail As SmtpMail = New SmtpMail("TryIt")
    Dim oSmtp As SmtpClient = New SmtpClient
    'To generate a log file for SMTP transaction, please use 
    'oSmtp.LogFileName = "c:\smtp.log"

    Dim errStr As String = ""

    Try
 	'From is a MailAddress object, in c#, it supports implicit converting from string. 
         ' The syntax is like this: "test@adminsystem.com" or "Tester<test@adminsystem.com>"
         ' The example code without implicit converting 
         ' oMail.From = New MailAddress( "Tester", "test@adminsystem.com" ) 
         ' oMail.From = New MailAddress( "Tester<test@adminsystem.com>") 
         ' oMail.From = New MailAddress( "test@adminsystem.com" ) 
         ' To, Cc and Bcc is a AddressCollection object, in C#, it supports implicit converting from string. 
         ' multiple address are separated with (,;) 
         ' The syntax is like this: "test@adminsystem.com, test1@adminsystem.com" 
         ' The example code without implicit converting 
         ' oMail.To = New AddressCollection( "test1@adminsystem.com, test2@adminsystem.com" ) 
         ' oMail.To = New AddressCollection( "Tester1<test@adminsystem.com>, Tester2<test2@adminsystem.com>")
         ' You can add more recipient by Add method 
         ' oMail.To.Add( New MailAddress( "tester", "test@adminsystem.com"))
	   
        oMail.From = New MailAddress( sFrom )
        oMail.To = New AddressCollection(sTo)
        oMail.Cc = New AddressCollection(sCc)
        oMail.Subject = sSubject
        oMail.TextBody = sBodyText
        ' If the sBodyText contains the html tag, please use 
        ' oMail.HtmlBody = sBodyText 
        ' Add attachment 
        ' oMail.AddAttachment( "c:\test.gif" )
       
        Dim oServer As SmtpServer = New SmtpServer(sServer)
        
        If sUserName.Length > 0 And sPassword.Length > 0 Then
            oServer.User = sUserName
            oServer.Password = sPassword
        End If

        If (bSSLConnection) Then
            oServer.ConnectType = SmtpConnectType.ConnectSSLAuto
        End If

        oSmtp.SendMail(oServer, oMail)
        MessageBox.Show(String.Format("The message was sent to {0} successfully!", _
oSmtp.CurrentSmtpServer.Server))

    Catch exp As SmtpTerminatedException
        errStr = exp.Message
    Catch exp As SmtpServerException
        errStr = String.Format("Exception: Server Respond: {0}", exp.ErrorMessage)
    Catch exp As System.Net.Sockets.SocketException
        errStr = String.Format("Exception: Networking Error: {0} {1}", exp.ErrorCode, exp.Message)
    Catch exp As System.ComponentModel.Win32Exception
        errStr = String.Format("Exception: System Error: {0} {1}", exp.ErrorCode, exp.Message)
    Catch exp As System.Exception
        errStr = String.Format("Exception: Common: {0}", exp.Message)
    End Try
    If errStr.Length > 0 Then
        MessageBox.Show(errStr)
    End If
End Sub

[C# - Send Email Example]
using System;
using System.Collections;
using EASendMail;

public void SendMail( string sFrom, 
    string sTo, 
    string sCc, 
    string sServer,
    string sUserName,
    string sPassword,
    string sSubject,
    string sBodyText,
    bool bSSLConnection )
{
    SmtpMail oMail = new SmtpMail("TryIt");
    SmtpClient oSmtp = new SmtpClient();
    // To generate a log file for SMTP transaction, please use 
    // oSmtp.LogFileName = "c:\\smtp.log";
    
    string err = "";
       
    try
    {
 	//From is a MailAddress object, in c#, it supports implicit converting from string. 
         // The syntax is like this: "test@adminsystem.com" or "Tester<test@adminsystem.com>"
         // The example code without implicit converting 
         // oMail.From = new MailAddress( "Tester", "test@adminsystem.com" ); 
         // oMail.From = new MailAddress( "Tester<test@adminsystem.com>");
         // oMail.From = new MailAddress( "test@adminsystem.com" ); 
         // To, Cc and Bcc is a AddressCollection object, in C#, it supports implicit converting from string.
         // multiple address are separated with (,;) 
         // The syntax is like this: "test@adminsystem.com, test1@adminsystem.com" // The example code without implicit converting 
         // oMail.To = new AddressCollection( "test1@adminsystem.com, test2@adminsystem.com" ); 
         // oMail.To = new AddressCollection( "Tester1<test@adminsystem.com>, Tester2<test2@adminsystem.com>");
         // You can add more recipient by Add method 
         // oMail.To.Add( new MailAddress( "tester", "test@adminsystem.com"));
	   
        oMail.From = sFrom;
        oMail.To = sTo;
        oMail.Cc = sCc;
        oMail.Subject = sSubject;
        oMail.TextBody = sBodyText;
        //If the sBodyText contains the html tag, please use 
        // oMail.HtmlBody = sBodyText; 
        // Add attachment 
        // oMail.AddAttachment( "c:\\test.gif" );
        
        SmtpServer oServer = new SmtpServer( sServer );

        if( sUserName.Length != 0 && sPassword.Length != 0 )
        {
            oServer.User = sUserName;
            oServer.Password = sPassword;
        }
       
        if( bSSLConnection )
            oServer.ConnectType = SmtpConnectType.ConnectSSLAuto;

        oSmtp.SendMail( oServer, oMail  );
        
        MessageBox.Show( String.Format( "The message was sent to {0} successfully!", 
            oSmtp.CurrentSmtpServer.Server ));

    }
    catch( SmtpTerminatedException exp )
    {
        err = exp.Message;
    }
    catch( SmtpServerException exp )
    {
        err = String.Format( "Exception: Server Respond: {0}", exp.ErrorMessage );
    }
    catch( System.Net.Sockets.SocketException exp )
    {
        err = String.Format( "Exception: Networking Error: {0} {1}", exp.ErrorCode, exp.Message );
    }
    catch( System.ComponentModel.Win32Exception exp )
    {
        err = String.Format( "Exception: System Error: {0} {1}", exp.ErrorCode, exp.Message );          
    }
    catch( System.Exception exp )
    {
        err = String.Format( "Exception: Common: {0}", exp.Message );           
    }
    
    if( err.Length > 0  )
    {
        MessageBox.Show( err );
    }
}

[C++/CLI - Send Email Example]
using namespace System;
using namespace System::Collections;
using namespace EASendMail; 

System::Void SendMail( System::String ^sFrom, 
    System::String ^sTo, 
    System::String ^sCc, 
    System::String ^sServer,
    System::String ^sUserName,
    System::String ^sPassword,
    System::String ^sSubject,
    System::String ^sBodyText,
    bool bSSLConnection )
{
    SmtpMail ^oMail = gcnew SmtpMail("TryIt");
    SmtpClient ^oSmtp = gcnew SmtpClient();
    //To generate a log file for SMTP transaction, please use 
    //oSmtp->LogFileName = "c:\\smtp.log";

    System::String ^err = "";

    try
    {
	//From is a MailAddress object, in c#, it supports implicit converting from string. 
        //The syntax is like this: "test@adminsystem.com" or "Tester<test@adminsystem.com>"
        //The example code without implicit converting 
        // oMail->From = gcnew MailAddress("Tester", "test@adminsystem.com" ); 
        // oMail->From = gcnew MailAddress( "Tester<test@adminsystem.com>"); 
        // oMail->From = gcnew MailAddress( "test@adminsystem.com" ); 
        //To, Cc and Bcc is a AddressCollection object, in C#, it supports implicit converting from string.
        // multiple address are separated with (,;) 
        //The syntax is like this: "test@adminsystem.com, test1@adminsystem.com" 
        //The example code without implicit converting 
        // oMail->To  = gcnew AddressCollection( "test1@adminsystem.com, test2@adminsystem.com" ); 
        // oMail->To = gcnew AddressCollection( "Tester1<test@adminsystem.com>, Tester2<test2@adminsystem.com>");
        // You can add more recipient by Add method 
        // oMail->To->Add( gcnew MailAddress( "tester", "test@adminsystem.com")); 
	   
        oMail->From = gcnew EASendMail::MailAddress(sFrom);
        oMail->To =  gcnew EASendMail::AddressCollection(sTo);
        oMail->Cc = gcnew EASendMail::AddressCollection(sCc);
        oMail->Subject = sSubject;
        oMail->TextBody = sBodyText;
        //If the sBodyText contains the html tag, please use 
        //oMail->HtmlBody = sBodyText; 
        //Add attachment 
        //oMail->AddAttachment( "c:\\test.gif" );      
                
        SmtpServer ^oServer = gcnew SmtpServer( sServer );

        if( sUserName->Length != 0 && sPassword->Length != 0 )
        {
            oServer->User = sUserName;
            oServer->Password = sPassword;
        }

        if( bSSLConnection )
            oServer->ConnectType = SmtpConnectType::ConnectSSLAuto;

        oSmtp->SendMail( oServer, oMail );
    
        MessageBox::Show( String::Format( "The message was sent to {0} successfully!", 
            oSmtp->CurrentSmtpServer->Server ));

    }
    catch( EASendMail::SmtpTerminatedException ^exp )
    {
        err = exp->Message;
    }
    catch( EASendMail::SmtpServerException ^exp )
    {
        err = String::Format( "Exception: Server Respond: {0}", exp->ErrorMessage );
    }
    catch( System::Net::Sockets::SocketException ^exp )
    {
        err = String::Format( "Exception: Networking Error: {0} {1}", exp->ErrorCode.ToString("d"), exp->Message );
    }
    catch( System::ComponentModel::Win32Exception ^exp )
    {
        err = String::Format( "Exception: System Error: {0} {1}", exp->ErrorCode.ToString("d"), exp->Message );           
    }
    catch( System::Exception ^exp )
    {
        err = String::Format( "Exception: Common: {0}", exp->Message );            
    }
    
    if( err->Length > 0  )
    {
        MessageBox::Show( err );
    }
}

[JScript.NET - Send Email Example]
public function SendMail( sFrom:String, 
    sTo:String, 
    sCc:String, 
    sServer:String,
    sUserName:String,
    sPassword:String,
    sSubject:String,
    sBodyText:String,
    bSSLConnection:Boolean )
{
    var oMail:SmtpMail =  new SmtpMail("TryIt");
    var oSmtp:SmtpClient = new SmtpClient();
    //To generate a log file for SMTP transaction, please use 
    //oSmtp.LogFileName = "c:\\smtp.log";
        
    var err:String = "";    
    try
    {   
	//From is a MailAddress object, in c#, it supports implicit converting from string. 
        // The syntax is like this: "test@adminsystem.com" or "Tester<test@adminsystem.com>"
        // The example code without implicit converting 
        // oMail.From = new MailAddress( "Tester", "test@adminsystem.com" ); 
        // oMail.From = new MailAddress( "Tester<test@adminsystem.com>"); 
        // oMail.From = new MailAddress( "test@adminsystem.com" ); 
        // To, Cc and Bcc is a AddressCollection object, in C#, it supports implicit converting from string.
        // multiple address are separated with (,;) 
        //The syntax is like this: "test@adminsystem.com, test1@adminsystem.com" 
        //The example code without implicit converting 
        // oMail.To = new AddressCollection( "test1@adminsystem.com, test2@adminsystem.com" );
        // oMail.To = new AddressCollection( "Tester1<test@adminsystem.com>, Tester2<test2@adminsystem.com>");
        // You can add more recipient by Add method 
        // oMail.To.Add( new MailAddress( "tester","test@adminsystem.com"));
		    
        oMail.From  = new MailAddress(sFrom);
        oMail.Subject = sSubject
        oMail.To = new AddressCollection(sTo);
        oMail.Cc = new AddressCollection(sCc);
           
        oMail.TextBody = sBodyText;
        //If the sBodyText contains the html tag, please use 
        //oMail.HtmlBody = sBodyText; 
        //Add attachment 
        //oMail.AddAttachment( "c:\\test.gif" );               
        
        var oServer:SmtpServer = new SmtpServer(sServer);

        if( sUserName.Length != 0 && sPassword.Length != 0 )
        {
            oServer.User = sUserName;
            oServer.Password = sPassword;
        }

        if( bSSLConnection )
        {
            oServer.ConnectType = SmtpConnectType.ConnectSSLAuto;
        }

        oSmtp.SendMail( oServer, oMail );
        MessageBox.Show( String.Format("The message was sent to {0} successfully!", oServer.Server ));
        
    }
    catch( exp:SmtpTerminatedException  )
    {
        err = exp.Message;
    }
    catch( exp:SmtpServerException )
    {
        err = String.Format( "Exception: Server Respond: {0}", exp.ErrorMessage );
    }
    catch( exp:System.Net.Sockets.SocketException )
    {
        err = String.Format( "Exception: Networking Error: {0} {1}", exp.ErrorCode, exp.Message );
    }
    catch( exp:System.ComponentModel.Win32Exception )
    {
        err = String.Format( "Exception: System Error: {0} {1}", exp.ErrorCode, exp.Message );          
    }
    catch( exp:System.Exception )
    {
        err = String.Format( "Exception: Common: {0}", exp.Message );           
    }   
    
    if( err.Length > 0 )
    {
        MesageBox.Show( err );
    }
}

See Also

Using EASendMail SMTP .NET Component
User Authentication and SSL Connection
From, ReplyTo, Sender and Return-Path
Digital Signature and E-mail Encryption
DomainKeys and DKIM Signature
Send E-mail Directly (Simulating SMTP server)
Work with EASendMail Service (Email Queuing)
Bulk Email Sender Guidelines
Process Bounced Email (Non-Delivery Report) and Email Tracking
EASendMail .NET Namespace References
EASendMail SMTP Component Samples

Online Tutorials

Send Email in VB 6.0 - Tutorial
Send Email in C# - Tutorial
Send Email in VB.NET - Tutorial
Send Email in Visual C++ - Tutorial
Send Email in Managed C++/CLI - Tutorial
Send Email in Delphi - Tutorial
Send Email in MS SQL stored procedure - Tutorial