Export (0) Print
Expand All

SmtpClient Class

Allows applications to send e-mail by using the Simple Mail Transfer Protocol (SMTP).

System.Object
  System.Net.Mail.SmtpClient

Namespace:  System.Net.Mail
Assembly:  System (in System.dll)

'Declaration
Public Class SmtpClient _
	Implements IDisposable

The SmtpClient type exposes the following members.

  NameDescription
Public methodSmtpClientInitializes a new instance of the SmtpClient class by using configuration file settings.
Public methodSmtpClient(String)Initializes a new instance of the SmtpClient class that sends e-mail by using the specified SMTP server.
Public methodSmtpClient(String, Int32)Initializes a new instance of the SmtpClient class that sends e-mail by using the specified SMTP server and port.
Top

  NameDescription
Public propertyClientCertificatesSpecify which certificates should be used to establish the Secure Sockets Layer (SSL) connection.
Public propertyCredentialsGets or sets the credentials used to authenticate the sender.
Public propertyDeliveryFormatGets or sets the delivery format used by SmtpClient to send e-mail.
Public propertyDeliveryMethodSpecifies how outgoing email messages will be handled.
Public propertyEnableSslSpecify whether the SmtpClient uses Secure Sockets Layer (SSL) to encrypt the connection.
Public propertyHostGets or sets the name or IP address of the host used for SMTP transactions.
Public propertyPickupDirectoryLocationGets or sets the folder where applications save mail messages to be processed by the local SMTP server.
Public propertyPortGets or sets the port used for SMTP transactions.
Public propertyServicePointGets the network connection used to transmit the e-mail message.
Public propertyTargetNameGets or sets the Service Provider Name (SPN) to use for authentication when using extended protection.
Public propertyTimeoutGets or sets a value that specifies the amount of time after which a synchronous Send call times out.
Public propertyUseDefaultCredentialsGets or sets a Boolean value that controls whether the DefaultCredentials are sent with requests.
Top

  NameDescription
Public methodDisposeSends a QUIT message to the SMTP server, gracefully ends the TCP connection, and releases all resources used by the current instance of the SmtpClient class.
Protected methodDispose(Boolean)Sends a QUIT message to the SMTP server, gracefully ends the TCP connection, releases all resources used by the current instance of the SmtpClient class, and optionally disposes of the managed resources.
Public methodEquals(Object)Determines whether the specified object is equal to the current object. (Inherited from Object.)
Protected methodFinalizeAllows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection. (Inherited from Object.)
Public methodGetHashCodeServes as the default hash function. (Inherited from Object.)
Public methodGetTypeGets the Type of the current instance. (Inherited from Object.)
Protected methodMemberwiseCloneCreates a shallow copy of the current Object. (Inherited from Object.)
Protected methodOnSendCompletedRaises the SendCompleted event.
Public methodSend(MailMessage)Sends the specified message to an SMTP server for delivery.
Public methodSend(String, String, String, String)Sends the specified e-mail message to an SMTP server for delivery. The message sender, recipients, subject, and message body are specified using String objects.
Public methodSendAsync(MailMessage, Object)Sends the specified e-mail message to an SMTP server for delivery. This method does not block the calling thread and allows the caller to pass an object to the method that is invoked when the operation completes.
Public methodSendAsync(String, String, String, String, Object)Sends an e-mail message to an SMTP server for delivery. The message sender, recipients, subject, and message body are specified using String objects. This method does not block the calling thread and allows the caller to pass an object to the method that is invoked when the operation completes.
Public methodSendAsyncCancelCancels an asynchronous operation to send an e-mail message.
Public methodSendMailAsync(MailMessage)Sends the specified message to an SMTP server for delivery as an asynchronous operation.
Public methodSendMailAsync(String, String, String, String)Sends the specified message to an SMTP server for delivery as an asynchronous operation. . The message sender, recipients, subject, and message body are specified using String objects.
Public methodToStringReturns a string that represents the current object. (Inherited from Object.)
Top

  NameDescription
Public eventSendCompletedOccurs when an asynchronous e-mail send operation completes.
Top

The SmtpClient class is used to send e-mail to an SMTP server for delivery. The SMTP protocol is defined in RFC 2821, which is available at http://www.ietf.org.

The classes shown in the following table are used to construct e-mail messages that can be sent using SmtpClient.

Class

Description

Attachment

Represents file attachments. This class allows you to attach files, streams, or text to an e-mail message.

MailAddress

Represents the e-mail address of the sender and recipients.

MailMessage

Represents an e-mail message.

To construct and send an e-mail message by using SmtpClient, you must specify the following information:

  • The SMTP host server that you use to send e-mail. See the Host and Port properties.

  • Credentials for authentication, if required by the SMTP server. See the Credentials property.

  • The e-mail address of the sender. See the Send and SendAsync methods that take a from parameter. Also see the MailMessage.From property.

  • The e-mail address or addresses of the recipients. See the Send and SendAsync methods that take a recipient parameter. Also see the MailMessage.To property.

  • The message content. See the Send and SendAsync methods that take a body parameter. Also see the MailMessage.Body property.

To include an attachment with an e-mail message, first create the attachment by using the Attachment class, and then add it to the message by using the MailMessage.Attachments property. Depending on the e-mail reader used by the recipients and the file type of the attachment, some recipients might not be able to read the attachment. For clients that cannot display the attachment in its original form, you can specify alternate views by using the MailMessage.AlternateViews property.

You can use the application or machine configuration files to specify default host, port, and credentials values for all SmtpClient objects. For more information, see <mailSettings> Element (Network Settings).

To send the e-mail message and block while waiting for the e-mail to be transmitted to the SMTP server, use one of the synchronous Send methods. To allow your program's main thread to continue executing while the e-mail is transmitted, use one of the asynchronous SendAsync methods. The SendCompleted event is raised when a SendAsync operation completes. To receive this event, you must add a SendCompletedEventHandler delegate to SendCompleted. The SendCompletedEventHandler delegate must reference a callback method that handles notification of SendCompleted events. To cancel an asynchronous e-mail transmission, use the SendAsyncCancel method.

NoteNote

If there is an e-mail transmission in progress and you call SendAsync or Send again, you will receive an InvalidOperationException.

The connection established by the current instance of the SmtpClient class to the SMTP server may be re-used if an application wishes to send multiple messages to the same SMTP server. This is particularly useful when authentication or encryption are used establish a connection to the SMTP server. The process of authenticating and establishing a TLS session can be expensive operations. A requirement to re-establish a connection for each message when sending a large quantity of email to the same SMTP server could have a significant impact on performance. There are a number of high-volume email applications that send email status updates, newsletter distributions, or email alerts. Also many email client applications support an off-line mode where users can compose many email messages that are sent later when a connection to the SMTP server is established. It is typical for an email client to send all SMTP messages to a specific SMTP server (provided by the Internet service provider) that then forwards this email to other SMTP servers.

The SmtpClient class implementation pools SMTP connections so that it can avoid the overhead of re-establishing a connection for every message to the same server. An application may re-use the same SmtpClient object to send many different emails to the same SMTP server and to many different SMTP servers. As a result, there is no way to determine when an application is finished using the SmtpClient object and it should be cleaned up.

When an SMTP session is finished and the client wishes to terminate the connection, it must send a QUIT message to the server to indicate that it has no more messages to send. This allows the server to free up resources associated with the connection from the client and process the messages which were sent by the client.

The SmtpClient class has no Finalize method, so an application must call Dispose to explicitly free up resources. The Dispose method iterates through all established connections to the SMTP server specified in the Host property and sends a QUIT message followed by gracefully ending the TCP connection. The Dispose method also releases the unmanaged resources used by the Socket and optionally disposes of the managed resources.

Call Dispose when you are finished using the SmtpClient. The Dispose method leaves the SmtpClient in an unusable state. After calling Dispose, you must release all references to the SmtpClient so the garbage collector can reclaim the memory that the SmtpClient was occupying.

TopicLocation
How to: Install and Configure SMTP Virtual Servers in IISConfiguring ASP .NET Web Applications
How to: Install and Configure SMTP Virtual Servers in IISConfiguring ASP .NET Web Applications

The following code example demonstrates sending an e-mail message asynchronously.


Imports System
Imports System.Net
Imports System.Net.Mail
Imports System.Net.Mime
Imports System.Threading
Imports System.ComponentModel
Namespace Examples.SmptExamples.Async
    Public Class SimpleAsynchronousExample
        Private Shared mailSent As Boolean = False 
        Private Shared Sub SendCompletedCallback(ByVal sender As Object, ByVal e As AsyncCompletedEventArgs)
            ' Get the unique identifier for this asynchronous operation. 
            Dim token As String = CStr(e.UserState)

            If e.Cancelled Then
                Console.WriteLine("[{0}] Send canceled.", token)
            End If 
            If e.Error IsNot Nothing Then
                Console.WriteLine("[{0}] {1}", token, e.Error.ToString())
            Else
                Console.WriteLine("Message sent.")
            End If
            mailSent = True 
        End Sub 
        Public Shared Sub Main(ByVal args() As String)
            ' Command line argument must the the SMTP host. 
            Dim client As New SmtpClient(args(0))
            ' Specify the e-mail sender. 
            ' Create a mailing address that includes a UTF8 character 
            ' in the display name. 
            Dim [from] As New MailAddress("jane@contoso.com", "Jane " & ChrW(&HD8) & " Clayton", System.Text.Encoding.UTF8)
            ' Set destinations for the e-mail message. 
            Dim [to] As New MailAddress("ben@contoso.com")
            ' Specify the message content. 
            Dim message As New MailMessage([from], [to])
            message.Body = "This is a test e-mail message sent by an application. " 
            ' Include some non-ASCII characters in body and subject. 
            Dim someArrows As New String(New Char() {ChrW(&H2190), ChrW(&H2191), ChrW(&H2192), ChrW(&H2193)})
            message.Body += Environment.NewLine & someArrows
            message.BodyEncoding = System.Text.Encoding.UTF8
            message.Subject = "test message 1" & someArrows
            message.SubjectEncoding = System.Text.Encoding.UTF8
            ' Set the method that is called back when the send operation ends. 
            AddHandler client.SendCompleted, AddressOf SendCompletedCallback
            ' The userState can be any object that allows your callback  
            ' method to identify this send operation. 
            ' For this example, the userToken is a string constant. 
            Dim userState As String = "test message1"
            client.SendAsync(message, userState)
            Console.WriteLine("Sending message... press c to cancel mail. Press any other key to exit.")
            Dim answer As String = Console.ReadLine()
            ' If the user canceled the send, and mail hasn't been sent yet, 
            ' then cancel the pending operation. 
            If answer.StartsWith("c") AndAlso mailSent = False Then
                client.SendAsyncCancel()
            End If 
            ' Clean up.
            message.Dispose()
            Console.WriteLine("Goodbye.")
        End Sub 
    End Class 
End Namespace

.NET Framework

Supported in: 4.6, 4.5, 4, 3.5, 3.0, 2.0

.NET Framework Client Profile

Supported in: 4, 3.5 SP1

Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core Role not supported), Windows Server 2008 R2 (Server Core Role supported with SP1 or later; Itanium not supported)

The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.

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