SmtpClient.SendAsync Methode

Definition

Sendet eine E-Mail. Durch diese Methoden wird der aufrufende Thread nicht blockiert.

Überlädt

SendAsync(MailMessage, Object)

Sendet die angegebene E-Mail für die Übermittlung an einen SMTP-Server. Diese Methode blockiert den aufrufenden Thread nicht und ermöglicht dem Aufrufer die Übergabe eines Objekts an die Methode, die beim Abschluss des Vorgangs aufgerufen wird.

SendAsync(String, String, String, String, Object)

Sendet eine E-Mail für die Übermittlung an einen SMTP-Server. Der Absender, die Empfänger, der Betreff und der Text der Nachricht werden mit String-Objekten angegeben. Diese Methode blockiert den aufrufenden Thread nicht und ermöglicht dem Aufrufer die Übergabe eines Objekts an die Methode, die beim Abschluss des Vorgangs aufgerufen wird.

SendAsync(MailMessage, Object)

Quelle:
SmtpClient.cs
Quelle:
SmtpClient.cs
Quelle:
SmtpClient.cs

Sendet die angegebene E-Mail für die Übermittlung an einen SMTP-Server. Diese Methode blockiert den aufrufenden Thread nicht und ermöglicht dem Aufrufer die Übergabe eines Objekts an die Methode, die beim Abschluss des Vorgangs aufgerufen wird.

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)

Parameter

message
MailMessage

Eine MailMessage, die die zu sendende Nachricht enthält.

userToken
Object

Ein benutzerdefiniertes Objekt, das bei Abschluss des asynchronen Vorgangs an die aufgerufene Methode übergeben wird.

Ausnahmen

message ist null.

- oder -

From ist null.

Dies SmtpClient hat bereits einen weiteren Sendevorgang ausgeführt.

- oder -

In den Eigenschaften To, CC und Bcc sind keine Empfänger angegeben.

- oder -

Die DeliveryMethod-Eigenschaft ist auf Network festgelegt, und Host ist null.

- oder -

Die DeliveryMethod-Eigenschaft ist auf Network festgelegt, und Host ist gleich der leeren Zeichenfolge ("").

- oder -

DeliveryMethod-Eigenschaft wird auf Network festgelegt, und Port ist 0 (null), eine negative Zahl oder größer als 65,535.

Dieses Objekt wurde verworfen.

Die Verbindung mit dem SMTP-Server ist fehlgeschlagen.

- oder -

Fehler bei der Authentifizierung.

- oder -

Timeout für den Vorgang.

- oder -

EnableSsl ist auf true festgelegt, die DeliveryMethod-Eigenschaft ist jedoch auf SpecifiedPickupDirectory oder PickupDirectoryFromIis festgelegt.

- oder -

EnableSsl wird auf true, festgelegt, aber der SMTP-E-Mail-Server hat nicht STARTTLS in der Antwort auf den EHLO-Befehl angeboten.

- oder -

Die message konnte an einen oder mehrere Empfänger in To, CC oder Bcc nicht übermittelt werden.

Die message konnte an einen der Empfänger in To, CC oder Bcc nicht übermittelt werden.

Die message konnte an mindestens zwei Empfänger in To, CC oder Bcc nicht übermittelt werden.

Beispiele

Im folgenden Codebeispiel wird das Aufrufen dieser Methode veranschaulicht.

#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

Hinweise

Um eine Benachrichtigung zu erhalten, wenn die E-Mail gesendet oder der Vorgang abgebrochen wurde, fügen Sie dem SendCompleted Ereignis einen Ereignishandler hinzu. Sie können einen SendAsync Vorgang abbrechen, indem Sie die SendAsyncCancel -Methode aufrufen.

Nach dem Aufruf SendAsyncmüssen Sie warten, bis die E-Mail-Übertragung abgeschlossen ist, bevor Sie versuchen, eine andere E-Mail-Nachricht mit Send oder SendAsynczu senden.

Vor dem Aufrufen dieser Methode muss das Host und Port über die Konfigurationsdateien festgelegt werden, indem die relevanten Eigenschaften festgelegt oder diese Informationen an den SmtpClient(String, Int32) Konstruktor übergeben werden.

Wenn der SMTP-Host Anmeldeinformationen erfordert, müssen Sie diese vor dem Aufrufen dieser Methode festlegen. Verwenden Sie zum Angeben von Anmeldeinformationen die UseDefaultCredentials -Eigenschaft oder Credentials .

Wenn Sie eine SmtpException Ausnahme erhalten, überprüfen Sie die StatusCode Eigenschaft, um den Grund zu finden, aus dem der Vorgang fehlgeschlagen ist. Die SmtpException kann auch eine innere Ausnahme enthalten, die angibt, warum der Vorgang fehlgeschlagen ist.

Wenn der SMTP-Server beim Senden von E-Mails an SendAsync mehrere Empfänger als gültig akzeptiert und andere ablehnt, wird ein mit einem SmtpExceptionNullReferenceException für die innere Ausnahme ausgelöst. In diesem Fall SendAsync kann keine E-Mail an einen der Empfänger gesendet werden.

Ihre Anwendung kann einen Fehler bei der Serverzertifikatüberprüfung erkennen, indem sie die an den ErrorSendCompletedEventHandler Delegaten übergebene Eigenschaft untersucht.

Die Timeout -Eigenschaft hat keine Auswirkung auf einen SendAsync Aufruf.

Verwenden Sie eine der Send Methoden, um E-Mails zu senden und zu blockieren, während sie an den SMTP-Server übertragen werden.

Hinweis

Wenn die EnableSsl -Eigenschaft auf truefestgelegt ist und der SMTP-E-Mail-Server in der Antwort auf den EHLO-Befehl nicht STARTTLS angibt, löst ein Aufruf der Send -Methode oder SendAsync eine aus SmtpException.

Gilt für:

SendAsync(String, String, String, String, Object)

Quelle:
SmtpClient.cs
Quelle:
SmtpClient.cs
Quelle:
SmtpClient.cs

Sendet eine E-Mail für die Übermittlung an einen SMTP-Server. Der Absender, die Empfänger, der Betreff und der Text der Nachricht werden mit String-Objekten angegeben. Diese Methode blockiert den aufrufenden Thread nicht und ermöglicht dem Aufrufer die Übergabe eines Objekts an die Methode, die beim Abschluss des Vorgangs aufgerufen wird.

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)

Parameter

from
String

Ein String, der die Adressinformationen des Absenders der Nachricht enthält.

recipients
String

Ein String, der die Adresse enthält, an die die Nachricht gesendet wird.

subject
String

Ein String, der die Betreffzeile für die Nachricht enthält.

body
String

Ein String, der den Nachrichtentext enthält.

userToken
Object

Ein benutzerdefiniertes Objekt, das bei Abschluss des asynchronen Vorgangs an die aufgerufene Methode übergeben wird.

Ausnahmen

from ist null.

- oder -

recipient ist null.

from ist Empty.

- oder -

recipient ist Empty.

Für diesen SmtpClient wird gerade ein SendAsync-Aufruf ausgeführt.

- oder -

Die DeliveryMethod-Eigenschaft ist auf Network festgelegt, und Host ist null.

- oder -

Die DeliveryMethod-Eigenschaft ist auf Network festgelegt, und Host ist gleich der leeren Zeichenfolge ("").

- oder -

DeliveryMethod-Eigenschaft wird auf Network festgelegt, und Port ist 0 (null), eine negative Zahl oder größer als 65,535.

Dieses Objekt wurde verworfen.

Die Verbindung mit dem SMTP-Server ist fehlgeschlagen.

- oder -

Fehler bei der Authentifizierung.

- oder -

Timeout für den Vorgang.

- oder -

EnableSsl ist auf true festgelegt, die DeliveryMethod-Eigenschaft ist jedoch auf SpecifiedPickupDirectory oder PickupDirectoryFromIis festgelegt.

- oder -

EnableSsl wird auf true, festgelegt, aber der SMTP-E-Mail-Server hat nicht STARTTLS in der Antwort auf den EHLO-Befehl angeboten.

- oder -

Die Nachricht konnte an einen oder mehrere Empfänger in recipients nicht übermittelt werden.

Die message konnte an einen der Empfänger in To, CC oder Bcc nicht übermittelt werden.

Die message konnte an mindestens zwei Empfänger in To, CC oder Bcc nicht übermittelt werden.

Hinweise

Um eine Benachrichtigung zu erhalten, wenn die E-Mail gesendet oder der Vorgang abgebrochen wurde, fügen Sie dem SendCompleted Ereignis einen Ereignishandler hinzu. Sie können einen SendAsync Vorgang abbrechen, indem Sie die SendAsyncCancel -Methode aufrufen.

Nach dem Aufruf SendAsyncmüssen Sie warten, bis die E-Mail-Übertragung abgeschlossen ist, bevor Sie versuchen, eine andere E-Mail-Nachricht mit Send oder SendAsynczu senden.

Vor dem Aufrufen dieser Methode müssen die Host Eigenschaften und Port entweder über die Konfigurationsdateien oder durch Festlegen der Eigenschaften oder durch Übergeben dieser Informationen an den SmtpClient(String, Int32) Konstruktor festgelegt werden.

Wenn der SMTP-Host Anmeldeinformationen erfordert, müssen Sie diese vor dem Aufrufen dieser Methode festlegen. Verwenden Sie die UseDefaultCredentials -Eigenschaft oder Credentials , um Anmeldeinformationen anzugeben.

Wenn Sie eine SmtpException Ausnahme erhalten, überprüfen Sie die StatusCode Eigenschaft, um den Grund zu finden, aus dem der Vorgang fehlgeschlagen ist. Der SmtpException kann auch eine innere Ausnahme enthalten, die den Grund angibt, warum der Vorgang fehlgeschlagen ist.

Wenn der SMTP-Server einige Empfänger beim Senden von E-Mails mit SendAsync an mehrere Empfänger als gültig akzeptiert und andere ablehnt, wird ein SmtpException mit einem NullReferenceException für die innere Ausnahme ausgelöst. In diesem Fall SendAsync kann keine E-Mail an einen der Empfänger gesendet werden.

Ihre Anwendung kann einen Fehler bei der Überprüfung des Serverzertifikats erkennen, indem sie die Error an den SendCompletedEventHandler Delegaten übergebene Eigenschaft untersucht.

Die Timeout -Eigenschaft hat keine Auswirkungen auf einen SendAsync Aufruf.

Verwenden Sie eine der Send Methoden, um E-Mails zu senden und zu blockieren, während sie an den SMTP-Server übertragen werden.

Hinweis

Wenn die EnableSsl -Eigenschaft auf truefestgelegt ist und der SMTP-E-Mail-Server in der Antwort auf den EHLO-Befehl nicht STARTTLS angibt, löst ein Aufruf der Send -Methode oder SendAsync eine aus SmtpException.

Gilt für: