SmtpClient

SmtpClient class

Allows applications to send messages by using the Simple Mail Transfer Protocol (SMTP).

public sealed class SmtpClient : EmailClient, IMailTransferAgent

Constructors

Name Description
SmtpClient() Initializes a new instance of the SmtpClient class.
SmtpClient(Configuration) Initializes a new instance of the SmtpClient class by using configuration file settings.
SmtpClient(string) Initializes a new instance of the SmtpClient class.
SmtpClient(string, int) Initializes a new instance of the SmtpClient class.
SmtpClient(string, SecurityOptions) Initializes a new instance of the SmtpClient class.
SmtpClient(string, int, SecurityOptions) Initializes a new instance of the SmtpClient class.
SmtpClient(string, string, ITokenProvider) Initializes a new instance of the SmtpClient class.
SmtpClient(string, string, string) Initializes a new instance of the SmtpClient class.
SmtpClient(string, int, string, ITokenProvider) Initializes a new instance of the SmtpClient class.
SmtpClient(string, int, string, string) Initializes a new instance of the SmtpClient class.
SmtpClient(string, string, ITokenProvider, SecurityOptions) Initializes a new instance of the SmtpClient class.
SmtpClient(string, string, string, bool) Initializes a new instance of the SmtpClient class.
SmtpClient(string, string, string, SecurityOptions) Initializes a new instance of the SmtpClient class.
SmtpClient(string, int, string, ITokenProvider, SecurityOptions) Initializes a new instance of the SmtpClient class.
SmtpClient(string, int, string, string, bool) Initializes a new instance of the SmtpClient class.
SmtpClient(string, int, string, string, SecurityOptions) Initializes a new instance of the SmtpClient class.
SmtpClient(string, string, string, bool, SecurityOptions) Initializes a new instance of the SmtpClient class.
SmtpClient(string, int, string, string, bool, SecurityOptions) Initializes a new instance of the SmtpClient class.

Properties

Name Description
virtual AccessToken { get; set; } Gets or sets the access token.
AllowedAuthentication { get; set; } Gets or sets enumeration of allowed by user authentication types
virtual ClientCertificates { get; } Contains collection of clients certificates
virtual ConnectionAsgmtMode { get; set; } Gets or sets value which defines mode of connection allocation in multiple threads environment There are folowing connection types: - Main connection is connection created and disposed together with mail client.It can’t be created or disposed manually. - Default connection is connection default for some thread. If default connection exists and ConnectionAsgmtMode allow, all methods of email client executed in this thread will be implicitly use this connection. Only one default connection can be exist per thread. It can be created manually or automatically. It depends on EmailClient.ConnectionAsgmtMode property. These connections can be created manually with EmailClient.CreateConnection(createAsDefaultConnection = true) method. If default connection does not used(depends on connection allocation mode), main connection used implicitly instead of it. - Independent connections are connections that are not linked to threads.They can be created manually and has to be used explicitly as method parameter. These connections can be created manually with EmailClient.CreateConnection() method or EmailClient.CreateConnection(createAsDefaultConnection = false) method. There are folowing connection allocation types: - ConnectionAsgmtType.UseMainOrDefault This mode uses by default in email clients. Email client uses main connection for all operations from multiple threads if default connection hasn’t been created, or connection hasnt been passed as method parameter explicitly. Main connection is connection which is created in the same time like email client. User can create default connections for threads with CreateConnection method. If default connection for thread is created, it’s used implicitly for all methods of email client which are invoked in this thread. If default connection for thread is not created, main connection is used for all methods of email client which are invoked in this thread. User also can create connections not linked with threads (not default connections) with CreateConnection method. If user wants to use other connections (not main and not default) he has to pass this connection explicitly as parameter of a method which he wants to use. User can additionally create any number of connections. Default connection can be only one per thread. Please note default connections works correctly if user uses Thread objects for multitasking programming. If user uses ConnectionPool or uses Task objects for multitasking programming this mode may lead to wrong behaviour of a programm. To avoid this problem user has to manually dispose default conection (if he uses it) in the end of the code which executes in the thread. - ConnectionAsgmtType.UseMain Email client uses main connection for all operations from multiple threads. Main connection is connection which is created in the same time like email client. User cann’t create default connections. User can create connections not linked with threads (not default connections) with CreateConnection method. If user wants to use other connections (not main and not default) he has to pass this connection explicitly as parameter of a method which he wants to use. User can additionally create any number of connections. - ConnectionAsgmtType.UseDefault Email client uses implicitly only default connections for all operations from multiple threads. Main connection is not used in this mode. If default connection hasn’t been created for some thread (first invocation of email client method), email client creates default connection implicitly for thread before first operation is executed. User can’t create default connections for threads with CreateConnection method because they are created automatically. When default connection for thread is created, it’s used implicitly for all methods of email client which are invoked in this thread.read. User also can create connections not linked with threads (not default connections) with CreateConnection method. If user wants to use other connections (not main and not default) he has to pass this connection explicitly as parameter of a method which he wants to use. User can additionally create any number of connections. Default connection can be only one per thread. Please note default connections works correctly if user uses Thread objects for multitasking programming. If user uses ConnectionPool or uses Task objects for multitasking programming this mode may lead to wrong behaviour of a programm. To avoid this problem user has to manually dispose default conection in the end of the code which executes in the thread.
virtual ConnectionCheckupPeriod { get; set; } Period of connection checking up in milliseconds. Default value is 5 min.
virtual ConnectionsQuantity { get; set; } Gets or sets quantity of connections in multy-connection mode
ConnectionState { get; } Gets the current state of the connection.
virtual CurrentConnection { get; } Gets current connection according to ConnectionAsgmtMode option
override DefaultPort { get; } Gets default port for client
DeliveryMethod { get; set; } Gets or sets the delivery method.
EnableLogger { get; set; } Gets or sets value which allows enable/disable logger
GreetingTimeout { get; set; } Gets or sets the greeting timeout that is used when establishing a connection. Please note, greeting timeout can’t be infinite. Email clients may execute enough long operations. To limit the time of operations users have to use Timeout property. Values for this property have to have long intervals to not prevent long-time operations. But in some cases, if EmailClient will use only Timeout property connection establishing may take a long time. For instance, the mail client may use the automatic mode to connection establishing. In this mode, the email client goes through all possible connection parameters until the connection is established. SMTP, IMAP, and POP3 servers in case of correct connection establishing send greeting string to the client. Servers may use implicit or explicit (START TLS) SSL/TLS connection initiation. If connection mode is mismatched (for instance, the server waits for an implicit SSL connection but the client tries to establish a non-secured or explicit SSL connection), the server won’t send a greeting string. In this case, the user will wait a long time until the timeout reaches a greeting string, and the client goes to the next connection option. To avoid this problem, the GreetingTimeout property has been introduced. This property allows you to set the timeout for greeting string, and reduce the time of automatic connection establishment.
HelloMessage { get; set; } Gets or sets a HELO/EHLO string.
virtual Host { get; set; } Gets or sets the host name.
LogFileName { get; set; } Gets or sets log file name
virtual Password { get; set; } Gets or sets the password. Password limitations are defined by server implementation, which client connects.
PickupDirectoryLocation { get; set; } Gets or sets the directory where applications save mail messages to be processed by the local SMTP server. Please note: only absolute path is allowed.
virtual Port { get; set; } Gets or sets the port.
virtual Proxy { get; set; } Gets or sets proxy for the client
virtual SecurityOptions { get; set; } Security mode for a mail client
SmtpQueueLocation { get; set; } Gets or sets the directory where applications save mail messages to be processed by sending in SMTP queue. Please note: only absolute path is allowed.
SupportedAuthentication { get; } Gets enumeration of supported by server authentication types
virtual SupportedEncryption { get; set; } Defines the versions of SSL/TLS encryption protocols to be used. PLEASE PAY YOUR ATTENTION, you may set only those versions of protocol, which are supported by .net framework. IF SOME VERSIONS OF PROTOCOL ARE NOT SUPPORTED BY YOUR CURRENT VERSION OF .NET FRAMEWORK, THEY WILL BE IGNORED AND SKIPPED. IT MAY LEAD TO DOWNGRADE TLS SECURITY LEVEL. IN THIS CASE EXCEPTION WON’T BE GENERATED!!! Please, see EncryptionProtocols documentation for more details. Please use SetSupportedEncryptionUnsafe method if you want to set the encryption protocols without any compatibility checks. Default value is: Tls | Tls11 | Tls12 | Tls13 (in case if your current version of .net framework supports these versions of TLS)
Timeout { get; set; } Gets or sets the timeout for mail operations
TokenProvider { get; set; } Gets or sets TokenProvider allowing to retrieve access token.
virtual UseAuthentication { get; set; } Indicates whether authentication is used.
UseDateInLogFileName { get; set; } Gets or sets value which indicates if date has to be used in log file name.
override UseDefaultCredentials { get; set; } Gets or sets a Boolean value that controls whether the DefaultCredentials are sent with requests.
virtual UseMultiConnection { get; set; } Gets or sets value which indicates if client has to use multiple connections for heavy loaded operations. Please note, using of this mode not necessary has to lead to performance increasing.
virtual UsePipelining { get; set; } Gets or sets object which indicates whether the pipelining mode is enabled.
virtual Username { get; set; } Gets or sets the username.
UseTnef { get; set; } Gets or sets a boolean value that controls whether the messages are sent in TNEF format. Note, that now message is sent in TNEF format when being loaded a message contains tnef.

Methods

Name Description
virtual CreateConnection() Creates new independent connection for operations not linked to threads (not default connection). Invocation of this method is similar to invocation of CreateConnection(createAsDefaultConnection = false) Please see more in documentation for EmailClient.ConnectionAsgmtMode property.
virtual CreateConnection(bool) Creates new (default or independent) connection for operations. Please see more in documentation for EmailClient.ConnectionAsgmtMode property.
virtual Dispose() Finalizes all operations with a server.
Forward(string, MailAddressCollection, MailMessage) Forwards specified message to recipient
Forward(string, MailAddressCollection, Stream) Forwards specified message to recipient
Forward(string, string, MailMessage) Forwards specified message to recipient
Forward(IConnection, string, MailAddressCollection, MailMessage) Forwards specified message to recipient
Forward(IConnection, string, MailAddressCollection, Stream) Forwards specified message to recipient
Forward(IConnection, string, string, MailMessage) Forwards specified message to recipient
ForwardAsync(string, MailAddressCollection, MailMessage) Forwards specified message to recipient
ForwardAsync(string, MailAddressCollection, Stream) Forwards specified message to recipient
ForwardAsync(string, string, MailMessage) Forwards specified message to recipient
ForwardAsync(IConnection, string, MailAddressCollection, MailMessage) Forwards specified message to recipient
ForwardAsync(IConnection, string, MailAddressCollection, Stream) Forwards specified message to recipient
ForwardAsync(IConnection, string, string, MailMessage) Forwards specified message to recipient
ForwardAsync(string, MailAddressCollection, MailMessage, CancellationToken) Forwards specified message to recipient
ForwardAsync(string, MailAddressCollection, Stream, CancellationToken) Forwards specified message to recipient
ForwardAsync(string, string, MailMessage, CancellationToken) Forwards specified message to recipient
ForwardAsync(IConnection, string, MailAddressCollection, MailMessage, CancellationToken) Forwards specified message to recipient
ForwardAsync(IConnection, string, MailAddressCollection, Stream, CancellationToken) Forwards specified message to recipient
ForwardAsync(IConnection, string, string, MailMessage, CancellationToken) Forwards specified message to recipient
virtual GetCapabilities()
override Noop() ‘No operation’ command
override Noop(IConnection) ‘No operation’ command
NoopAsync() ‘No operation’ command
NoopAsync(CancellationToken) ‘No operation’ command
NoopAsync(IConnection) ‘No operation’ command
NoopAsync(IConnection, CancellationToken) ‘No operation’ command
ResetLogSettings() Resets logging settings to default.
Send(IEnumerable<MailMessage>) Send the specified messages.
Send(MailMessage) Send the specified message.
Send(MailMessageCollection) Send the specified message collection.
Send(params MailMessage[]) Send the specified message.
Send(IConnection, IEnumerable<MailMessage>) Send the specified messages.
Send(IConnection, MailMessage) Send the specified message.
Send(IConnection, MailMessageCollection) Send the specified message collection.
Send(IConnection, params MailMessage[]) Send the specified message.
Send(string, string, string, string) Creates and sends the specified message.
Send(IConnection, string, string, string, string) Creates and sends the specified message.
SendAsync(IEnumerable<MailMessage>) Send the specified messages.
SendAsync(MailMessage) Send the specified message.
SendAsync(MailMessageCollection) Send the specified message collection.
SendAsync(params MailMessage[]) Send the specified message.
SendAsync(CancellationToken, params MailMessage[]) Send the specified message.
SendAsync(IConnection, IEnumerable<MailMessage>) Send the specified messages.
SendAsync(IConnection, MailMessage) Send the specified message.
SendAsync(IConnection, MailMessageCollection) Send the specified message collection.
SendAsync(IConnection, params MailMessage[]) Send the specified message.
SendAsync(IEnumerable<MailMessage>, CancellationToken) Send the specified messages.
SendAsync(MailMessage, CancellationToken) Send the specified message.
SendAsync(MailMessageCollection, CancellationToken) Send the specified message collection.
SendAsync(IConnection, CancellationToken, params MailMessage[]) Send the specified message.
SendAsync(IConnection, IEnumerable<MailMessage>, CancellationToken) Send the specified messages.
SendAsync(IConnection, MailMessage, CancellationToken) Send the specified message.
SendAsync(IConnection, MailMessageCollection, CancellationToken) Send the specified message collection.
SendAsync(string, string, string, string) Creates and sends the specified message.
SendAsync(IConnection, string, string, string, string) Creates and sends the specified message.
SendAsync(string, string, string, string, CancellationToken) Creates and sends the specified message.
SendAsync(IConnection, string, string, string, string, CancellationToken) Creates and sends the specified message.
SendToQueue(IEnumerable<MailMessage>) Append messages to queue
SetSupportedEncryptionUnsafe(EncryptionProtocols) Defines the versions of SSL/TLS encryption protocols to be used. This method is not safe and sets the encryption protocols without any compatibility checks. Use SupportedEncryption property to safely set only protocols that definitely supported by .net framework. Please note, if your current .net framework does not support this level of security, an exception will be thrown when trying to establish a connection to the server.
override ValidateCredentials() Executes credentials validation
ValidateCredentials(IConnection) Executes credentials validation
ValidateCredentialsAsync() Executes credentials validation
ValidateCredentialsAsync(CancellationToken) Executes credentials validation
ValidateCredentialsAsync(IConnection) Executes credentials validation
ValidateCredentialsAsync(IConnection, CancellationToken) Executes credentials validation

Other Members

Name Description
event FailedSending Adds or removes subscriber for notifications about failed sending operations in smtp queue
event SucceededSending Adds or removes subscriber for notifications about succeeded sending of mail messages. Please note, notifications will be invoked from other threads, so you should to implement thread safe event handler. Also note that this event is common to the mail client instance, in case if the client is running in multi-connection mode, messages from all connections will be processed through this event. So the customer has to analyze in his code message from events to understand which message relates to which operation.

See Also