SmtpClient.SendAsync Méthode

Définition

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

message a la valeur null.

-ou-

From a la valeur null.

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.

Le message n’a pas pu être remis à l’un des destinataires dans To, CC ou Bcc.

Le message n’a pas pu être remis à deux destinataires ou plus 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 EnableSsltruevaleur 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

from
String

String qui contient les informations d'adresse de l'expéditeur du message.

recipients
String

String qui contient l'adresse à laquelle le message est envoyé.

subject
String

String qui contient la ligne d'objet du message.

body
String

String qui contient le corps du message.

userToken
Object

Objet défini par l'utilisateur, passé à la fin de l'opération asynchrone à la méthode appelée.

Exceptions

from a la valeur null.

-ou-

recipient a la valeur null.

from a la valeur Empty.

-ou-

recipient a la valeur Empty.

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.

Le message n’a pas pu être remis à l’un des destinataires dans To, CC ou Bcc.

Le message n’a pas pu être remis à deux destinataires ou plus dans To, CC ou Bcc.

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 trueet 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 à