SmtpClient Classe
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Envia email usando o Protocolo SMTP (Simple Mail Transfer Protocol). O SmtpClient tipo não é recomendado para desenvolvimento novo; para obter mais informações, consulte a seção Comentários.
public ref class SmtpClient : IDisposable
public ref class SmtpClient
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
public class SmtpClient : IDisposable
public class SmtpClient : IDisposable
public class SmtpClient
[<System.Runtime.Versioning.UnsupportedOSPlatform("browser")>]
type SmtpClient = class
interface IDisposable
type SmtpClient = class
interface IDisposable
type SmtpClient = class
Public Class SmtpClient
Implements IDisposable
Public Class SmtpClient
- Herança
-
SmtpClient
- Atributos
- Implementações
Exemplos
O exemplo de código a seguir demonstra o envio de uma mensagem de email de forma assíncrona.
using System;
using System.Net;
using System.Net.Mail;
using System.Net.Mime;
using System.Threading;
using System.ComponentModel;
namespace Examples.SmtpExamples.Async
{
public class SimpleAsynchronousExample
{
static bool mailSent = false;
private static void SendCompletedCallback(object sender, AsyncCompletedEventArgs e)
{
// Get the unique identifier for this asynchronous operation.
String token = (string) e.UserState;
if (e.Cancelled)
{
Console.WriteLine("[{0}] Send canceled.", token);
}
if (e.Error != null)
{
Console.WriteLine("[{0}] {1}", token, e.Error.ToString());
} else
{
Console.WriteLine("Message sent.");
}
mailSent = true;
}
public static void Main(string[] args)
{
// Command-line argument must be the SMTP host.
SmtpClient client = new SmtpClient(args[0]);
// Specify the email sender.
// Create a mailing address that includes a UTF8 character
// in the display name.
MailAddress from = new MailAddress("jane@contoso.com",
"Jane " + (char)0xD8+ " Clayton",
System.Text.Encoding.UTF8);
// Set destinations for the email message.
MailAddress to = new MailAddress("ben@contoso.com");
// Specify the message content.
MailMessage message = new MailMessage(from, to);
message.Body = "This is a test email message sent by an application. ";
// Include some non-ASCII characters in body and subject.
string someArrows = new string(new char[] {'\u2190', '\u2191', '\u2192', '\u2193'});
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.
client.SendCompleted += new
SendCompletedEventHandler(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.
string userState = "test message1";
client.SendAsync(message, userState);
Console.WriteLine("Sending message... press c to cancel mail. Press any other key to exit.");
string answer = Console.ReadLine();
// If the user canceled the send, and mail hasn't been sent yet,
// then cancel the pending operation.
if (answer.StartsWith("c") && !mailSent)
{
client.SendAsyncCancel();
}
// Clean up.
message.Dispose();
client.Dispose();
Console.WriteLine("Goodbye.");
}
}
}
Imports System.Net
Imports System.Net.Mail
Imports System.Net.Mime
Imports System.Threading
Imports System.ComponentModel
Namespace Examples.SmtpExamples.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 SMTP host.
Dim client As New SmtpClient(args(0))
' Specify the email sender.
' Create a mailing address that includes a UTF8 character
' in the display name.
Dim mailFrom As New MailAddress("jane@contoso.com", "Jane " & ChrW(&HD8) & " Clayton", System.Text.Encoding.UTF8)
' Set destinations for the email message.
Dim mailTo As New MailAddress("ben@contoso.com")
' Specify the message content.
Dim message As New MailMessage(mailFrom, mailTo)
message.Body = "This is a test email 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()
client.Dispose()
Console.WriteLine("Goodbye.")
End Sub
End Class
End Namespace
Comentários
A SmtpClient classe é usada para enviar emails para um servidor SMTP para entrega. O protocolo SMTP é definido no RFC 2821, que está disponível em https://www.ietf.org.
Importante
Não recomendamos que você use a SmtpClient classe para desenvolvimento novo porque SmtpClient não dá suporte a muitos protocolos modernos. Em vez disso , use o MailKit ou outras bibliotecas. Para obter mais informações, consulte SmtpClient não deve ser usado.
A SmtpClient classe é:
- Incluído no .NET Standard 2.0 e versões posteriores e, portanto, deve fazer parte de qualquer implementação do .NET que dê suporte a essas versões.
- Presente e pode ser usado no .NET Framework 4 até o .NET Framework 4.8.
- Utilizável no .NET (Core), mas seu uso não é recomendado.
As classes mostradas na tabela a seguir são usadas para construir mensagens de email que podem ser enviadas usando SmtpClient.
| Classe | Descrição |
|---|---|
| Attachment | Representa anexos de arquivo. Essa classe permite anexar arquivos, fluxos ou texto a uma mensagem de email. |
| MailAddress | Representa o endereço de email do remetente e dos destinatários. |
| MailMessage | Representa uma mensagem de e-mail. |
Para construir e enviar uma mensagem de email usando SmtpClient, especifique as seguintes informações:
- O servidor host SMTP que você usa para enviar email. Veja as propriedades e Port as Host propriedades.
- Credenciais para autenticação, se necessário pelo servidor SMTP. Consulte a Credentials propriedade.
- O endereço de e-mail do remetente. Veja os métodos e SendAsync os Send métodos que tomam um
fromparâmetro. Veja também a MailMessage.From propriedade. - O endereço de email ou endereços dos destinatários. Veja os métodos e SendAsync os Send métodos que tomam um
recipientparâmetro. Veja também a MailMessage.To propriedade. - O conteúdo da mensagem. Veja os métodos e SendAsync os Send métodos que tomam um
bodyparâmetro. Veja também a MailMessage.Body propriedade.
Para incluir um anexo com uma mensagem de email, primeiro crie o anexo usando a Attachment classe e adicione-o à mensagem usando a MailMessage.Attachments propriedade. Dependendo do leitor de email usado pelos destinatários e do tipo de arquivo do anexo, alguns destinatários podem não conseguir ler o anexo. Para clientes que não podem exibir o anexo em seu formulário original, você pode especificar exibições alternativas usando a MailMessage.AlternateViews propriedade.
No .NET Framework, você pode usar os arquivos de configuração do aplicativo ou do computador para especificar valores padrão de host, porta e credenciais para todos os SmtpClient objetos. Para obter mais informações, consulte <o elemento mailSettings> (Configurações de Rede). O .NET Core não dá suporte a padrões de configuração. Como solução alternativa, você deve definir as propriedades relevantes SmtpClient diretamente.
Para enviar a mensagem de email e bloquear enquanto aguarda o email ser transmitido para o servidor SMTP, use um dos métodos Send síncronos. Para permitir que o thread principal do seu programa continue em execução enquanto o email é transmitido, use um dos métodos assíncronos SendAsync . O SendCompleted evento é gerado quando uma SendAsync operação é concluída. Para receber esse evento, você deve adicionar um SendCompletedEventHandler delegado a SendCompleted. O SendCompletedEventHandler delegado deve fazer referência a um método de retorno de chamada que manipula a notificação de SendCompleted eventos. Para cancelar uma transmissão de email assíncrona, use o SendAsyncCancel método.
Observação
Se houver uma transmissão de email em andamento e você ligar SendAsync ou Send novamente, receberá um InvalidOperationException.
A conexão estabelecida pela instância atual da SmtpClient classe com o servidor SMTP poderá ser reutilizado se um aplicativo quiser enviar várias mensagens para o mesmo servidor SMTP. Isso é particularmente útil quando a autenticação ou a criptografia são usadas para estabelecer uma conexão com o servidor SMTP. O processo de autenticação e estabelecimento de uma sessão TLS pode ser operações caras. Um requisito para restabelecer uma conexão para cada mensagem ao enviar uma grande quantidade de email para o mesmo servidor SMTP pode ter um impacto significativo no desempenho. Há vários aplicativos de email de alto volume que enviam atualizações de status de email, distribuições de boletins informativos ou alertas de email. Além disso, muitos aplicativos cliente de email dão suporte a um modo off-line em que os usuários podem compor muitas mensagens de email que são enviadas posteriormente quando uma conexão com o servidor SMTP é estabelecida. É comum um cliente de email enviar todas as mensagens SMTP para um servidor SMTP específico (fornecido pelo provedor de serviços de Internet) que encaminha esse email para outros servidores SMTP.
A SmtpClient implementação de classe agrupa conexões SMTP para evitar a sobrecarga de restabelecer uma conexão para cada mensagem para o mesmo servidor. Um aplicativo pode reutilizar o mesmo SmtpClient objeto para enviar muitos emails diferentes para o mesmo servidor SMTP e para muitos servidores SMTP diferentes. Como resultado, não há como determinar quando um aplicativo é concluído usando o SmtpClient objeto e ele deve ser limpo.
Quando uma sessão SMTP é concluída e o cliente deseja encerrar a conexão, ele deve enviar uma mensagem QUIT para o servidor para indicar que ele não tem mais mensagens para enviar. Isso permite que o servidor libere recursos associados à conexão do cliente e processe as mensagens que foram enviadas pelo cliente.
A SmtpClient classe não tem nenhum Finalize método, portanto, um aplicativo deve chamar Dispose para liberar explicitamente os recursos. O Dispose método itera por meio de todas as conexões estabelecidas com o servidor SMTP especificado na Host propriedade e envia uma mensagem QUIT seguida pelo término normal da conexão TCP. O Dispose método também libera os recursos não gerenciados usados pelos Socket recursos gerenciados e, opcionalmente, descartados.
Ligue Dispose quando terminar de usar o SmtpClient. O Dispose método deixa o SmtpClient estado inutilizável. Após a chamada Dispose, você deve liberar todas as referências para que SmtpClient o coletor de lixo possa recuperar a memória que o SmtpClient estava ocupando.
Construtores
| Nome | Description |
|---|---|
| SmtpClient() |
Inicializa uma nova instância da classe usando as SmtpClient configurações do arquivo de configuração. |
| SmtpClient(String, Int32) |
Inicializa uma nova instância da SmtpClient classe que envia emails usando o servidor SMTP e a porta especificados. |
| SmtpClient(String) |
Inicializa uma nova instância da SmtpClient classe que envia emails usando o servidor SMTP especificado. |
Propriedades
| Nome | Description |
|---|---|
| ClientCertificates |
Especifique quais certificados devem ser usados para estabelecer a conexão SSL (Secure Sockets Layer). |
| Credentials |
Obtém ou define as credenciais usadas para autenticar o remetente. |
| DeliveryFormat |
Obtém ou define o formato de entrega usado para SmtpClient enviar email. |
| DeliveryMethod |
Especifica como as mensagens de email de saída serão tratadas. |
| EnableSsl |
Especifique se o SmtpClient SSL (Secure Sockets Layer) usa para criptografar a conexão. |
| Host |
Obtém ou define o nome ou o endereço IP do host usado para transações SMTP. |
| PickupDirectoryLocation |
Obtém ou define a pasta em que os aplicativos salvam mensagens de email a serem processadas pelo servidor SMTP local. |
| Port |
Obtém ou define a porta usada para transações SMTP. |
| ServicePoint |
Obtém a conexão de rede usada para transmitir a mensagem de email. |
| TargetName |
Obtém ou define o SPN (Nome do Provedor de Serviço) a ser usado para autenticação ao usar a proteção estendida. |
| Timeout |
Obtém ou define um valor que especifica o tempo após o qual uma chamada síncrona Send atinge o tempo limite. |
| UseDefaultCredentials |
Obtém ou define um Boolean valor que controla se eles DefaultCredentials são enviados com solicitações. |
Métodos
| Nome | Description |
|---|---|
| Dispose() |
Envia uma mensagem QUIT para o servidor SMTP, termina normalmente a conexão TCP e libera todos os recursos usados pela instância atual da SmtpClient classe. |
| Dispose(Boolean) |
Envia uma mensagem QUIT para o servidor SMTP, termina normalmente a conexão TCP, libera todos os recursos usados pela instância atual da SmtpClient classe e, opcionalmente, descarta os recursos gerenciados. |
| Equals(Object) |
Determina se o objeto especificado é igual ao objeto atual. (Herdado de Object) |
| GetHashCode() |
Serve como a função de hash padrão. (Herdado de Object) |
| GetType() |
Obtém o Type da instância atual. (Herdado de Object) |
| MemberwiseClone() |
Cria uma cópia superficial do Objectatual. (Herdado de Object) |
| OnSendCompleted(AsyncCompletedEventArgs) |
Aciona o evento SendCompleted. |
| Send(MailMessage) |
Envia a mensagem especificada para um servidor SMTP para entrega. |
| Send(String, String, String, String) |
Envia a mensagem de email especificada para um servidor SMTP para entrega. O remetente da mensagem, os destinatários, o assunto e o corpo da mensagem são especificados usando String objetos. |
| SendAsync(MailMessage, Object) |
Envia a mensagem de email especificada para um servidor SMTP para entrega. Esse método não bloqueia o thread de chamada e permite que o chamador passe um objeto para o método que é invocado quando a operação é concluída. |
| SendAsync(String, String, String, String, Object) |
Envia uma mensagem de email para um servidor SMTP para entrega. O remetente da mensagem, os destinatários, o assunto e o corpo da mensagem são especificados usando String objetos. Esse método não bloqueia o thread de chamada e permite que o chamador passe um objeto para o método que é invocado quando a operação é concluída. |
| SendAsyncCancel() |
Cancela uma operação assíncrona para enviar uma mensagem de email. |
| SendMailAsync(MailMessage, CancellationToken) |
Envia a mensagem especificada para um servidor SMTP para entrega como uma operação assíncrona. |
| SendMailAsync(MailMessage) |
Envia a mensagem especificada para um servidor SMTP para entrega como uma operação assíncrona. |
| SendMailAsync(String, String, String, String, CancellationToken) |
Envia a mensagem especificada para um servidor SMTP para entrega como uma operação assíncrona, usando o remetente, os destinatários, o assunto e as cadeias de caracteres do corpo especificados. |
| SendMailAsync(String, String, String, String) |
Envia a mensagem especificada para um servidor SMTP para entrega como uma operação assíncrona. O remetente da mensagem, os destinatários, o assunto e o corpo da mensagem são especificados usando String objetos. |
| ToString() |
Retorna uma cadeia de caracteres que representa o objeto atual. (Herdado de Object) |
Eventos
| Nome | Description |
|---|---|
| SendCompleted |
Ocorre quando uma operação de envio de email assíncrona é concluída. |