SmtpClient.SendAsync Metoda
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
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
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 null
wartość .
-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.
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 true
wartość , 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
- userToken
- Object
Obiekt zdefiniowany przez użytkownika przekazywany do metody wywoływanej po zakończeniu operacji asynchronicznej.
Wyjątki
Ma to SmtpClient w toku wywołanie SendAsync .
-lub-
DeliveryMethod właściwość jest ustawiona na Network wartość i Host ma null
wartość .
-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
.
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 true
wartość , 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.