SmtpClient.SendAsync Méthode
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Envoie un e-mail. Ces méthodes ne bloquent pas le thread appelant.
Surcharges
SendAsync(MailMessage, Object) |
Envoie l’e-mail spécifié à un serveur SMTP en vue de sa remise. Cette méthode ne bloque pas le thread appelant et permet à l'appelant de passer un objet à la méthode qui est appelée lorsque l'opération se termine. |
SendAsync(String, String, String, String, Object) |
Envoie un e-mail à un serveur SMTP en vue de sa remise. L'expéditeur, les destinataires, l'objet et le corps du message sont spécifiés à l'aide d'objets String. Cette méthode ne bloque pas le thread appelant et permet à l'appelant de passer un objet à la méthode qui est appelée lorsque l'opération se termine. |
SendAsync(MailMessage, Object)
- Source:
- SmtpClient.cs
- Source:
- SmtpClient.cs
- Source:
- SmtpClient.cs
Envoie l’e-mail spécifié à un serveur SMTP en vue de sa remise. Cette méthode ne bloque pas le thread appelant et permet à l'appelant de passer un objet à la méthode qui est appelée lorsque l'opération se termine.
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)
Paramètres
- message
- MailMessage
MailMessage qui contient le message à envoyer.
- userToken
- Object
Objet défini par l'utilisateur, passé à la fin de l'opération asynchrone à la méthode appelée.
Exceptions
Une SmtpClient autre opération d’envoi est déjà en cours.
- ou -
Il n'y a pas de destinataires spécifiés dans les propriétés To, CC et Bcc.
- ou -
La propriété DeliveryMethod est définie sur Network et Host a la valeur null
.
- ou -
La propriété DeliveryMethod est définie sur Network et Host est égal à la chaîne vide ("").
- ou -
La propriété DeliveryMethod a la valeur Network et la valeur de Port est zéro, un nombre négatif ou un nombre supérieur à 65 535.
Cet objet a été supprimé.
La connexion au serveur SMTP a échoué.
- ou -
Échec de l'authentification.
- ou -
L'opération a expiré.
- ou -
EnableSsl est défini sur true
, mais la propriété DeliveryMethod est définie sur SpecifiedPickupDirectory ou PickupDirectoryFromIis.
- ou -
EnableSsl a la valeur true,
mais le serveur de messagerie SMTP n'a pas publié STARTTLS dans la réponse à la commande EHLO.
- ou -
Le message
n'a pas pu être remis à l'un ou plusieurs des destinataires dans To, CC ou Bcc.
Exemples
L’exemple de code suivant illustre l’appel de cette méthode.
#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
Remarques
Pour recevoir une notification lorsque l’e-mail a été envoyé ou que l’opération a été annulée, ajoutez un gestionnaire d’événements à l’événement SendCompleted . Vous pouvez annuler une SendAsync opération en appelant la SendAsyncCancel méthode .
Après avoir appelé SendAsync, vous devez attendre la fin de la transmission de l’e-mail avant d’essayer d’envoyer un autre e-mail à l’aide Send de ou SendAsync.
Avant d’appeler cette méthode, et HostPort doit être défini via les fichiers de configuration en définissant les propriétés appropriées ou en transmettant ces informations au SmtpClient(String, Int32) constructeur.
Si l’hôte SMTP nécessite des informations d’identification, vous devez les définir avant d’appeler cette méthode. Pour spécifier des informations d’identification, utilisez les UseDefaultCredentials propriétés ou Credentials .
Si vous recevez une SmtpException exception, case activée la StatusCode propriété pour trouver la raison de l’échec de l’opération. peut SmtpException également contenir une exception interne qui indique la raison de l’échec de l’opération.
Lors de l’envoi d’e-mails à l’aide SendAsync de plusieurs destinataires, si le serveur SMTP accepte certains destinataires comme valides et rejette d’autres, un SmtpException est levée avec un NullReferenceException pour l’exception interne. Si cela se produit, SendAsync n’envoie pas d’e-mail à l’un des destinataires.
Votre application peut détecter une erreur de validation de certificat de serveur en examinant la Error propriété transmise au SendCompletedEventHandler délégué.
La Timeout propriété n’a aucun effet sur un SendAsync appel.
Pour envoyer du courrier et bloquer pendant sa transmission au serveur SMTP, utilisez l’une Send des méthodes .
Notes
Si la propriété a la EnableSsltrue
valeur et que le serveur de messagerie SMTP ne publie pas STARTTLS dans la réponse à la commande EHLO, un appel aux Send méthodes ou SendAsync lève un SmtpException.
S’applique à
SendAsync(String, String, String, String, Object)
- Source:
- SmtpClient.cs
- Source:
- SmtpClient.cs
- Source:
- SmtpClient.cs
Envoie un e-mail à un serveur SMTP en vue de sa remise. L'expéditeur, les destinataires, l'objet et le corps du message sont spécifiés à l'aide d'objets String. Cette méthode ne bloque pas le thread appelant et permet à l'appelant de passer un objet à la méthode qui est appelée lorsque l'opération se termine.
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)
Paramètres
- userToken
- Object
Objet défini par l'utilisateur, passé à la fin de l'opération asynchrone à la méthode appelée.
Exceptions
Ce SmtpClient a un appel SendAsync en cours.
- ou -
La propriété DeliveryMethod est définie sur Network et Host a la valeur null
.
- ou -
La propriété DeliveryMethod est définie sur Network et Host est égal à la chaîne vide ("").
- ou -
La propriété DeliveryMethod a la valeur Network et la valeur de Port est zéro, un nombre négatif ou un nombre supérieur à 65 535.
Cet objet a été supprimé.
La connexion au serveur SMTP a échoué.
- ou -
Échec de l'authentification.
- ou -
L'opération a expiré.
- ou -
EnableSsl est défini sur true
, mais la propriété DeliveryMethod est définie sur SpecifiedPickupDirectory ou PickupDirectoryFromIis.
- ou -
EnableSsl a la valeur true,
mais le serveur de messagerie SMTP n'a pas publié STARTTLS dans la réponse à la commande EHLO.
- ou -
Le message n'a pas pu être remis à l'un ou plusieurs des destinataires dans recipients
.
Remarques
Pour recevoir une notification lorsque l’e-mail a été envoyé ou que l’opération a été annulée, ajoutez un gestionnaire d’événements à l’événement SendCompleted . Vous pouvez annuler une SendAsync opération en appelant la SendAsyncCancel méthode .
Après avoir appelé SendAsync, vous devez attendre la fin de la transmission de l’e-mail avant d’essayer d’envoyer un autre e-mail à l’aide Send de ou SendAsync.
Avant d’appeler cette méthode, les Host propriétés et Port doivent être définies via les fichiers de configuration ou en définissant les propriétés ou en transmettant ces informations au SmtpClient(String, Int32) constructeur.
Si l’hôte SMTP nécessite des informations d’identification, vous devez les définir avant d’appeler cette méthode. Pour spécifier des informations d’identification, utilisez la UseDefaultCredentials propriété ou Credentials .
Si vous recevez une SmtpException exception, case activée la StatusCode propriété pour trouver la raison de l’échec de l’opération. Peut SmtpException également contenir une exception interne qui indique la raison de l’échec de l’opération.
Lors de l’envoi d’e-mails à l’aide SendAsync de à plusieurs destinataires, si le serveur SMTP accepte certains destinataires comme valides et en rejette d’autres, une SmtpException exception est levée avec un NullReferenceException pour l’exception interne. Si cela se produit, SendAsync ne parvient pas à envoyer un e-mail à l’un des destinataires.
Votre application peut détecter une erreur de validation de certificat de serveur en examinant la Error propriété passée au SendCompletedEventHandler délégué.
La Timeout propriété n’a aucun effet sur un SendAsync appel.
Pour envoyer des messages et les bloquer lors de leur transmission au serveur SMTP, utilisez l’une Send des méthodes .
Notes
Si la propriété a la EnableSsl valeur true
et que le serveur de messagerie SMTP ne publie pas STARTTLS dans la réponse à la commande EHLO, un appel aux Send méthodes ou SendAsync lève un SmtpException.