SmtpClient.SendAsync Método
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 uma mensagem de email. Esses métodos não bloqueiam o thread de chamada.
Sobrecargas
SendAsync(MailMessage, Object) |
Envia a mensagem de email especificada para entrega a um servidor SMTP. Esse método não bloqueia o thread de chamada e permite que o chamador passe um objeto para o método invocado quando a operação é concluída. |
SendAsync(String, String, String, String, Object) |
Envia uma mensagem de email para entrega a um servidor SMTP. O remetente, os destinatários, o assunto e o corpo da mensagem são especificados usando objetos String. Esse método não bloqueia o thread de chamada e permite que o chamador passe um objeto para o método invocado quando a operação é concluída. |
SendAsync(MailMessage, Object)
- Origem:
- SmtpClient.cs
- Origem:
- SmtpClient.cs
- Origem:
- SmtpClient.cs
Envia a mensagem de email especificada para entrega a um servidor SMTP. Esse método não bloqueia o thread de chamada e permite que o chamador passe um objeto para o método invocado quando a operação é concluída.
public:
void SendAsync(System::Net::Mail::MailMessage ^ message, System::Object ^ userToken);
public void SendAsync (System.Net.Mail.MailMessage message, object? userToken);
public void SendAsync (System.Net.Mail.MailMessage message, object userToken);
member this.SendAsync : System.Net.Mail.MailMessage * obj -> unit
Public Sub SendAsync (message As MailMessage, userToken As Object)
Parâmetros
- message
- MailMessage
Um MailMessage que contém a mensagem a ser enviada.
- userToken
- Object
Um objeto definido pelo usuário passado para o método invocado quando a operação assíncrona é concluída.
Exceções
Isso SmtpClient tem outra operação de envio já em andamento.
- ou -
Não há nenhum destinatário especificado nas propriedades To, CC e Bcc.
- ou -
A propriedade DeliveryMethod é definida como Network e Host é null
.
- ou -
A propriedade DeliveryMethod é definida como Network e Host é igual à cadeia de caracteres vazia ("").
- ou -
A propriedade DeliveryMethod é definida como Network e Port é zero, um número negativo ou maior que 65.535.
O objeto foi descartado.
Falha na conexão com o servidor SMTP.
- ou -
Falha na autenticação.
- ou -
Tempo limite da operação esgotado.
- ou -
EnableSsl é definido como true
, mas a propriedade DeliveryMethod é definida como SpecifiedPickupDirectory ou PickupDirectoryFromIis.
- ou -
EnableSsl é definido como true,
, mas o servidor de email SMTP não anunciou STARTTLS na resposta para o comando EHLO.
- ou -
O message
não pôde ser entregue a um ou mais dos destinatários em To, CC ou Bcc.
Exemplos
O exemplo de código a seguir demonstra como chamar esse método.
#using <System.dll>
using namespace System;
using namespace System::Net;
using namespace System::Net::Mail;
using namespace System::Net::Mime;
using namespace System::Threading;
using namespace System::ComponentModel;
static bool mailSent;
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 != nullptr)
{
Console::WriteLine("[{0}] {1}", token,
e->Error->ToString());
} else
{
Console::WriteLine("Message sent.");
}
mailSent = true;
}
int main(array<String^>^ args)
{
if (args->Length > 1)
{
// Command-line argument must be the SMTP host.
SmtpClient^ client = gcnew SmtpClient(args[1]);
// Specify the email sender.
// Create a mailing address that includes a UTF8
// character in the display name.
MailAddress^ from = gcnew MailAddress("jane@contoso.com",
"Jane " + (wchar_t)0xD8 + " Clayton",
System::Text::Encoding::UTF8);
// Set destinations for the email message.
MailAddress^ to = gcnew MailAddress("ben@contoso.com");
// Specify the message content.
MailMessage^ message = gcnew 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 = gcnew String(gcnew array<wchar_t>{L'\u2190',
L'\u2191', L'\u2192', L'\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 += gcnew
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->ToLower()->StartsWith("c") && mailSent == false)
{
client->SendAsyncCancel();
}
// Clean up.
delete message;
client = nullptr;
Console::WriteLine("Goodbye.");
}
else
{
Console::WriteLine("Please give SMTP server name!");
}
}
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 == false)
{
client.SendAsyncCancel();
}
// Clean up.
message.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()
Console.WriteLine("Goodbye.")
End Sub
End Class
End Namespace
Comentários
Para receber uma notificação quando o email tiver sido enviado ou a operação tiver sido cancelada, adicione um manipulador de eventos ao SendCompleted evento. Você pode cancelar uma SendAsync operação chamando o SendAsyncCancel método .
Depois de chamar SendAsync, você deve aguardar a conclusão da transmissão de email antes de tentar enviar outra mensagem de email usando Send ou SendAsync.
Antes de chamar esse método, o Host e Port devem ser definidos por meio dos arquivos de configuração definindo as propriedades relevantes ou passando essas informações para o SmtpClient(String, Int32) construtor.
Se o host SMTP exigir credenciais, você deverá defini-las antes de chamar esse método. Para especificar credenciais, use as UseDefaultCredentials propriedades ou Credentials .
Se você receber uma exceçãoSmtpException, marcar a StatusCode propriedade para localizar o motivo pelo qual a operação falhou. O SmtpException também pode conter uma exceção interna que indica o motivo pelo qual a operação falhou.
Ao enviar emails usando SendAsync para vários destinatários, se o servidor SMTP aceitar alguns destinatários como válidos e rejeitar outros, um SmtpException será lançado com um NullReferenceException para a exceção interna. Se isso ocorrer, SendAsync não será possível enviar emails para qualquer um dos destinatários.
Seu aplicativo pode detectar um erro de validação de certificado do servidor examinando a Error propriedade passada para o SendCompletedEventHandler delegado.
A Timeout propriedade não tem nenhum efeito em uma SendAsync chamada.
Para enviar emails e bloquear enquanto ele é transmitido para o servidor SMTP, use um dos Send métodos .
Observação
Se a EnableSsl propriedade estiver definida true
como e o servidor de email SMTP não anunciar STARTTLS na resposta ao comando EHLO, uma chamada para os Send métodos ou SendAsync gerará um SmtpException.
Aplica-se a
SendAsync(String, String, String, String, Object)
- Origem:
- SmtpClient.cs
- Origem:
- SmtpClient.cs
- Origem:
- SmtpClient.cs
Envia uma mensagem de email para entrega a um servidor SMTP. O remetente, os destinatários, o assunto e o corpo da mensagem são especificados usando objetos String. Esse método não bloqueia o thread de chamada e permite que o chamador passe um objeto para o método invocado quando a operação é concluída.
public:
void SendAsync(System::String ^ from, System::String ^ recipients, System::String ^ subject, System::String ^ body, System::Object ^ userToken);
public void SendAsync (string from, string recipients, string? subject, string? body, object? userToken);
public void SendAsync (string from, string recipients, string subject, string body, object userToken);
member this.SendAsync : string * string * string * string * obj -> unit
Public Sub SendAsync (from As String, recipients As String, subject As String, body As String, userToken As Object)
Parâmetros
- userToken
- Object
Um objeto definido pelo usuário passado para o método invocado quando a operação assíncrona é concluída.
Exceções
Este SmtpClient tem uma chamada de SendAsync em andamento.
- ou -
A propriedade DeliveryMethod é definida como Network e Host é null
.
- ou -
A propriedade DeliveryMethod é definida como Network e Host é igual à cadeia de caracteres vazia ("").
- ou -
A propriedade DeliveryMethod é definida como Network e Port é zero, um número negativo ou maior que 65.535.
O objeto foi descartado.
Falha na conexão com o servidor SMTP.
- ou -
Falha na autenticação.
- ou -
Tempo limite da operação esgotado.
- ou -
EnableSsl é definido como true
, mas a propriedade DeliveryMethod é definida como SpecifiedPickupDirectory ou PickupDirectoryFromIis.
- ou -
EnableSsl é definido como true,
, mas o servidor de email SMTP não anunciou STARTTLS na resposta para o comando EHLO.
- ou -
A mensagem não pôde ser entregue a um ou mais destinatários em recipients
.
Comentários
Para receber uma notificação quando o email tiver sido enviado ou a operação tiver sido cancelada, adicione um manipulador de eventos ao SendCompleted evento. Você pode cancelar uma SendAsync operação chamando o SendAsyncCancel método .
Depois de chamar SendAsync, você deve aguardar a conclusão da transmissão de email antes de tentar enviar outra mensagem de email usando Send ou SendAsync.
Antes de chamar esse método, as Host propriedades e Port devem ser definidas por meio dos arquivos de configuração ou definindo as propriedades ou passando essas informações para o SmtpClient(String, Int32) construtor.
Se o host SMTP exigir credenciais, você deverá defini-las antes de chamar esse método. Para especificar credenciais, use a UseDefaultCredentials propriedade ou Credentials .
Se você receber uma exceçãoSmtpException, marcar a StatusCode propriedade para localizar o motivo pelo qual a operação falhou. O SmtpException também pode conter uma exceção interna que indica o motivo pelo qual a operação falhou.
Ao enviar emails usando SendAsync para vários destinatários, se o servidor SMTP aceitar alguns destinatários como válidos e rejeitar outros, um SmtpException será gerado com um NullReferenceException para a exceção interna. Se isso ocorrer, SendAsync não será possível enviar emails para qualquer um dos destinatários.
Seu aplicativo pode detectar um erro de validação de certificado do servidor examinando a Error propriedade passada para o SendCompletedEventHandler delegado.
A Timeout propriedade não tem nenhum efeito em uma SendAsync chamada.
Para enviar emails e bloquear enquanto ele é transmitido para o servidor SMTP, use um dos Send métodos.
Observação
Se a EnableSsl propriedade estiver definida como true
e o servidor de email SMTP não anunciar STARTTLS na resposta ao comando EHLO, uma chamada para os Send métodos ou SendAsync gerará um SmtpException.