Sdílet prostřednictvím


SmtpClient.SendAsync Metoda

Definice

Odešle e-mailovou zprávu. Tyto metody neblokují volající vlákno.

Přetížení

SendAsync(MailMessage, Object)

Odešle zadanou e-mailovou zprávu serveru SMTP k doručení. Tato metoda neblokuje volající vlákno a umožňuje volajícímu předat objekt metodě, která je vyvolána po dokončení operace.

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

Odešle e-mailovou zprávu serveru SMTP k doručení. Odesílatel, příjemci, předmět a text zprávy se zadají pomocí String objektů. Tato metoda neblokuje volající vlákno a umožňuje volajícímu předat objekt metodě, která je vyvolána po dokončení operace.

SendAsync(MailMessage, Object)

Zdroj:
SmtpClient.cs
Zdroj:
SmtpClient.cs
Zdroj:
SmtpClient.cs

Odešle zadanou e-mailovou zprávu serveru SMTP k doručení. Tato metoda neblokuje volající vlákno a umožňuje volajícímu předat objekt metodě, která je vyvolána po dokončení operace.

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

A MailMessage obsahující zprávu, která se má odeslat.

userToken
Object

Uživatelem definovaný objekt, který je předán metodě vyvolány po dokončení asynchronní operace.

Výjimky

message je null.

-nebo-

From je null.

Tato SmtpClient operace odeslání už probíhá.

-nebo-

Ve vlastnostech , CCa Bcc nejsou zadáni Tožádní příjemci.

-nebo-

DeliveryMethod vlastnost je nastavená na Network hodnotu a Host je null.

-nebo-

DeliveryMethod vlastnost je nastavená na Network hodnotu a Host je rovna prázdnému řetězci ("").

-nebo-

DeliveryMethod vlastnost je nastavena na Network a Port je nula, záporné číslo nebo větší než 65 535.

Tento objekt byl odstraněn.

Připojení k serveru SMTP selhalo.

-nebo-

Ověření se nezdařilo.

-nebo-

Časový limit operace vypršel.

-nebo-

EnableSsl je nastavená na true , ale DeliveryMethod vlastnost je nastavená na SpecifiedPickupDirectory nebo PickupDirectoryFromIis.

-nebo-

EnableSsl je nastavený na, true, ale poštovní server SMTP neinzeroval startTLS v odpovědi na příkaz EHLO.

-nebo-

Nelze message doručit jednomu nebo více příjemcům v To, CCnebo Bcc.

Nelze message doručit jednomu z příjemců v Tosouboru , CCnebo Bcc.

Nelze message doručit dvěma nebo více příjemcům v To, CCnebo Bcc.

Příklady

Následující příklad kódu ukazuje volání této 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

Poznámky

Pokud chcete dostávat oznámení o odeslání e-mailu nebo zrušení operace, přidejte do události obslužnou rutinu SendCompleted události. Operaci můžete zrušit SendAsync voláním SendAsyncCancel metody .

Po volání SendAsyncmusíte počkat na dokončení přenosu e-mailu, než se pokusíte odeslat další e-mailovou zprávu pomocí nebo SendSendAsync.

Před voláním této metody Host musí být a Port nastaveny prostřednictvím konfiguračních souborů nastavením příslušných vlastností nebo předáním těchto informací do konstruktoru SmtpClient(String, Int32) .

Pokud hostitel SMTP vyžaduje přihlašovací údaje, musíte je před voláním této metody nastavit. Pokud chcete zadat přihlašovací údaje, použijte UseDefaultCredentials vlastnosti nebo Credentials .

Pokud se zobrazí výjimka SmtpException , zkontrolujte StatusCode vlastnost a zjistěte důvod selhání operace. Může SmtpException také obsahovat vnitřní výjimku, která označuje důvod selhání operace.

Pokud server SMTP při odesílání e-mailů pomocí SendAsync více příjemců přijme některé příjemce jako platné a odmítne jiné, SmtpException vyvolá se NullReferenceException pro vnitřní výjimku výjimka. Pokud k tomu dojde, SendAsync nepošle e-mail žádnému z příjemců.

Vaše aplikace může zjistit chybu ověření certifikátu serveru tím, že prozkoumá vlastnost předanou Error delegátu SendCompletedEventHandler .

Vlastnost Timeout nemá žádný vliv na SendAsync volání.

Chcete-li odesílat poštu a blokovat při přenosu na server SMTP, použijte jednu z těchto Send metod.

Poznámka

EnableSsl Pokud je vlastnost nastavena na truea poštovní server SMTP neinzeruje startTLS v odpovědi na příkaz EHLO, vyvolá volání Send metody nebo SendAsync metodu SmtpException.

Platí pro

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

Zdroj:
SmtpClient.cs
Zdroj:
SmtpClient.cs
Zdroj:
SmtpClient.cs

Odešle e-mailovou zprávu na server SMTP k doručení. Odesílatel zprávy, příjemci, předmět a text zprávy se zadají pomocí String objektů. Tato metoda neblokuje volající vlákno a umožňuje volajícímu předat objekt metodě, která je vyvolána při dokončení operace.

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

A String , který obsahuje informace o adrese odesílatele zprávy.

recipients
String

A String obsahující adresu, na kterou je zpráva odeslána.

subject
String

A String obsahující řádek předmětu zprávy.

body
String

A String , který obsahuje text zprávy.

userToken
Object

Uživatelem definovaný objekt, který je předán metodě vyvolány po dokončení asynchronní operace.

Výjimky

from je null.

-nebo-

recipient je null.

from je Empty.

-nebo-

recipient je Empty.

SendAsync Probíhá SmtpClient volání.

-nebo-

DeliveryMethod vlastnost je nastavená na Network hodnotu a Host je null.

-nebo-

DeliveryMethod vlastnost je nastavená na Network hodnotu a Host je rovna prázdnému řetězci ("").

-nebo-

DeliveryMethod vlastnost je nastavena na Network a Port je nula, záporné číslo nebo větší než 65 535.

Tento objekt byl odstraněn.

Připojení k serveru SMTP selhalo.

-nebo-

Ověření se nezdařilo.

-nebo-

Časový limit operace vypršel.

-nebo-

EnableSsl je nastavená na true , ale DeliveryMethod vlastnost je nastavená na SpecifiedPickupDirectory nebo PickupDirectoryFromIis.

-nebo-

EnableSsl je nastavený na, true, ale poštovní server SMTP neinzeroval startTLS v odpovědi na příkaz EHLO.

-nebo-

Zprávu nelze doručit jednomu nebo více příjemcům v recipientsnástroji .

Nelze message doručit jednomu z příjemců v Tosouboru , CCnebo Bcc.

Nelze message doručit dvěma nebo více příjemcům v To, CCnebo Bcc.

Poznámky

Pokud chcete dostávat oznámení o odeslání e-mailu nebo zrušení operace, přidejte do události obslužnou rutinu SendCompleted události. Operaci můžete zrušit SendAsync voláním SendAsyncCancel metody .

Po volání SendAsyncmusíte počkat na dokončení přenosu e-mailu, než se pokusíte odeslat další e-mailovou zprávu pomocí nebo SendSendAsync.

Před voláním této metody Host musí být vlastnosti a Port nastaveny buď prostřednictvím konfiguračních souborů, nebo nastavením vlastností nebo předáním těchto informací do konstruktoru SmtpClient(String, Int32) .

Pokud hostitel SMTP vyžaduje přihlašovací údaje, musíte je před voláním této metody nastavit. Pokud chcete zadat přihlašovací údaje, použijte UseDefaultCredentials vlastnost nebo Credentials .

Pokud se zobrazí výjimka SmtpException , zkontrolujte StatusCode vlastnost a zjistěte důvod selhání operace. Může SmtpException také obsahovat vnitřní výjimku, která označuje důvod selhání operace.

Pokud server SMTP přijme některé příjemce jako platné a jiné odmítne, SmtpException vyvolá NullReferenceException se při odesílání e-mailu SendAsync více příjemcům s vnitřní výjimkou . Pokud k tomu dojde, SendAsync nepošle e-mail žádnému z příjemců.

Vaše aplikace může zjistit chybu ověření certifikátu serveru prozkoumáním Error vlastnosti předané delegátu SendCompletedEventHandler .

Vlastnost Timeout nemá žádný vliv na SendAsync volání.

Pokud chcete při přenosu na server SMTP odeslat poštu a blokovat ji, použijte jednu z Send těchto metod.

Poznámka

EnableSsl Pokud je vlastnost nastavena na truehodnotu a poštovní server SMTP neinzeruje startTLS v odpovědi na příkaz EHLO, volání Send metody nebo SendAsync vyvolá SmtpException.

Platí pro