Udostępnij za pośrednictwem


SmtpClient.SendAsync Metoda

Definicja

Wysyła wiadomość e-mail. Te metody nie blokują wątku wywołującego.

Przeciążenia

SendAsync(MailMessage, Object)

Wysyła określoną wiadomość e-mail do serwera SMTP na potrzeby dostarczania. Ta metoda nie blokuje wątku wywołującego i umożliwia obiektowi wywołującego przekazanie obiektu do metody wywoływanej po zakończeniu operacji.

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

Wysyła wiadomość e-mail do serwera SMTP na potrzeby dostarczania. Nadawca wiadomości, adresaci, temat i treść wiadomości są określane przy użyciu String obiektów. Ta metoda nie blokuje wątku wywołującego i umożliwia obiektowi wywołującego przekazanie obiektu do metody wywoływanej po zakończeniu operacji.

SendAsync(MailMessage, Object)

Źródło:
SmtpClient.cs
Źródło:
SmtpClient.cs
Źródło:
SmtpClient.cs

Wysyła określoną wiadomość e-mail do serwera SMTP na potrzeby dostarczania. Ta metoda nie blokuje wątku wywołującego i umożliwia obiektowi wywołującego przekazanie obiektu do metody wywoływanej po zakończeniu operacji.

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)

Parametry

message
MailMessage

Element MailMessage zawierający komunikat do wysłania.

userToken
Object

Obiekt zdefiniowany przez użytkownika przekazywany do metody wywoływanej po zakończeniu operacji asynchronicznej.

Wyjątki

message to null.

-lub-

From to null.

Ma to SmtpClient już inną operację wysyłania.

-lub-

Nie określono adresatów we Towłaściwościach , CCi Bcc .

-lub-

DeliveryMethod właściwość jest ustawiona na Network wartość i Host ma nullwartość .

-lub-

DeliveryMethod właściwość jest ustawiona na Network wartość i Host jest równa pustemu ciągowi ("").

-lub-

DeliveryMethod właściwość jest ustawiona na Network wartość i Port ma wartość zero, liczbę ujemną lub większą niż 65 535.

Ten obiekt został usunięty.

Połączenie z serwerem SMTP nie powiodło się.

-lub-

Nie można przeprowadzić uwierzytelniania.

-lub-

Upłynął limit czasu operacji.

-lub-

EnableSsl jest ustawiona na true wartość , ale właściwość jest ustawiona DeliveryMethod na SpecifiedPickupDirectory lub PickupDirectoryFromIis.

-lub-

EnableSsl jest ustawiona na true, wartość , ale serwer poczty SMTP nie anonsował STARTTLS w odpowiedzi na polecenie EHLO.

-lub-

Nie message można dostarczyć go do co najmniej jednego adresata w Toobiekcie , CClub Bcc.

message Nie można dostarczyć elementu do jednego z adresatów w Toobiekcie , CClub Bcc.

Nie message można dostarczyć elementu do co najmniej dwóch adresatów w Toobiekcie , CClub Bcc.

Przykłady

W poniższym przykładzie kodu pokazano wywołanie tej metody.

#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

Uwagi

Aby otrzymywać powiadomienie o wysłaniu wiadomości e-mail lub anulowaniu operacji, dodaj procedurę obsługi zdarzeń SendCompleted do zdarzenia. Operację SendAsync można anulować, wywołując metodę SendAsyncCancel .

Po wywołaniu SendAsyncmetody należy poczekać na ukończenie transmisji wiadomości e-mail przed podjęciem próby wysłania innej wiadomości e-mail przy użyciu polecenia Send lub SendAsync.

Przed wywołaniem tej metody Host element i Port należy ustawić za pomocą plików konfiguracji, ustawiając odpowiednie właściwości lub przekazując te informacje do konstruktora SmtpClient(String, Int32) .

Jeśli host SMTP wymaga poświadczeń, należy je ustawić przed wywołaniem tej metody. Aby określić poświadczenia, użyj UseDefaultCredentials właściwości lub Credentials .

Jeśli otrzymasz SmtpException wyjątek, sprawdź StatusCode właściwość, aby znaleźć przyczynę niepowodzenia operacji. Element SmtpException może również zawierać wyjątek wewnętrzny wskazujący przyczynę niepowodzenia operacji.

W przypadku wysyłania wiadomości e-mail przy użyciu SendAsync wielu adresatów, jeśli serwer SMTP akceptuje niektórych adresatów jako prawidłowy i odrzuca inne, SmtpException jest zgłaszany z NullReferenceException wyjątkiem wewnętrznym. W takim przypadku SendAsync nie można wysłać wiadomości e-mail do żadnego z adresatów.

Aplikacja może wykryć błąd weryfikacji certyfikatu serwera, sprawdzając Error właściwość przekazaną do delegata SendCompletedEventHandler .

Właściwość Timeout nie ma żadnego wpływu na wywołanie SendAsync .

Aby wysłać wiadomość e-mail i zablokować ją podczas przesyłania na serwer SMTP, użyj jednej z Send metod.

Uwaga

EnableSsl Jeśli właściwość jest ustawiona na truewartość , a serwer poczty SMTP nie anonsuje wartości STARTTLS w odpowiedzi na polecenie EHLO, wywołanie Send metody lub SendAsync zgłosi SmtpExceptionbłąd .

Dotyczy

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

Źródło:
SmtpClient.cs
Źródło:
SmtpClient.cs
Źródło:
SmtpClient.cs

Wysyła wiadomość e-mail do serwera SMTP na potrzeby dostarczania. Nadawca wiadomości, adresaci, temat i treść wiadomości są określane przy użyciu String obiektów. Ta metoda nie blokuje wątku wywołującego i umożliwia wywołującym przekazanie obiektu do metody wywoływanej po zakończeniu operacji.

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)

Parametry

from
String

Element String zawierający informacje o adresie nadawcy wiadomości.

recipients
String

Element String zawierający adres, do którego jest wysyłana wiadomość.

subject
String

Element String zawierający wiersz tematu dla komunikatu.

body
String

Element String zawierający treść komunikatu.

userToken
Object

Obiekt zdefiniowany przez użytkownika przekazywany do metody wywoływanej po zakończeniu operacji asynchronicznej.

Wyjątki

from to null.

-lub-

recipient to null.

from to Empty.

-lub-

recipient to Empty.

Ma to SmtpClient w toku wywołanie SendAsync .

-lub-

DeliveryMethod właściwość jest ustawiona na Network wartość i Host ma nullwartość .

-lub-

DeliveryMethod właściwość jest ustawiona na Network wartość i Host jest równa pustemu ciągowi ("").

-lub-

DeliveryMethod właściwość jest ustawiona na Network wartość i Port ma wartość zero, liczbę ujemną lub większą niż 65 535.

Ten obiekt został usunięty.

Połączenie z serwerem SMTP nie powiodło się.

-lub-

Nie można przeprowadzić uwierzytelniania.

-lub-

Upłynął limit czasu operacji.

-lub-

EnableSsl jest ustawiona na true wartość , ale właściwość jest ustawiona DeliveryMethod na SpecifiedPickupDirectory lub PickupDirectoryFromIis.

-lub-

EnableSsl jest ustawiona na true, wartość , ale serwer poczty SMTP nie anonsował STARTTLS w odpowiedzi na polecenie EHLO.

-lub-

Nie można dostarczyć wiadomości do co najmniej jednego adresata w programie recipients.

message Nie można dostarczyć elementu do jednego z adresatów w Toobiekcie , CClub Bcc.

Nie message można dostarczyć elementu do co najmniej dwóch adresatów w Toobiekcie , CClub Bcc.

Uwagi

Aby otrzymywać powiadomienie o wysłaniu wiadomości e-mail lub anulowaniu operacji, dodaj procedurę obsługi zdarzeń SendCompleted do zdarzenia. Operację SendAsync można anulować, wywołując metodę SendAsyncCancel .

Po wywołaniu SendAsyncmetody należy poczekać na ukończenie transmisji wiadomości e-mail przed podjęciem próby wysłania innej wiadomości e-mail przy użyciu polecenia Send lub SendAsync.

Przed wywołaniem tej metody Host właściwości i Port należy ustawić za pomocą plików konfiguracji lub ustawić właściwości lub przekazać te informacje do konstruktora SmtpClient(String, Int32) .

Jeśli host SMTP wymaga poświadczeń, należy je ustawić przed wywołaniem tej metody. Aby określić poświadczenia, użyj UseDefaultCredentials właściwości or Credentials .

Jeśli otrzymasz SmtpException wyjątek, sprawdź StatusCode właściwość, aby znaleźć przyczynę niepowodzenia operacji. Element SmtpException może również zawierać wyjątek wewnętrzny, który wskazuje przyczynę niepowodzenia operacji.

W przypadku wysyłania wiadomości e-mail przy użyciu SendAsync do wielu adresatów, jeśli serwer SMTP akceptuje niektórych adresatów jako prawidłowych i odrzuca innych, SmtpException element jest zgłaszany jako NullReferenceException wyjątek wewnętrzny. W takim przypadku SendAsync nie można wysłać wiadomości e-mail do któregokolwiek z adresatów.

Aplikacja może wykryć błąd weryfikacji certyfikatu serwera, sprawdzając Error właściwość przekazaną do delegata SendCompletedEventHandler .

Właściwość Timeout nie ma żadnego wpływu na wywołanie SendAsync .

Aby wysłać wiadomość e-mail i zablokować ją podczas przesyłania do serwera SMTP, użyj jednej z Send metod.

Uwaga

EnableSsl Jeśli właściwość jest ustawiona na truewartość , a serwer poczty SMTP nie anonsuje wartości STARTTLS w odpowiedzi na polecenie EHLO, wywołanie metody Send lub SendAsync zgłosi błąd SmtpException.

Dotyczy