SmtpClient.SendAsync Methode
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
Hiermee wordt een e-mailbericht verzonden. Deze methoden blokkeren de aanroepende thread niet.
Overloads
| Name | Description |
|---|---|
| SendAsync(MailMessage, Object) |
Hiermee wordt het opgegeven e-mailbericht verzonden naar een SMTP-server voor levering. Met deze methode wordt de aanroepende thread niet geblokkeerd en kan de aanroeper een object doorgeven aan de methode die wordt aangeroepen wanneer de bewerking is voltooid. |
| SendAsync(String, String, String, String, Object) |
Hiermee wordt een e-mailbericht verzonden naar een SMTP-server voor levering. De afzender van het bericht, de geadresseerden, het onderwerp en de hoofdtekst van het bericht worden opgegeven met behulp van String objecten. Met deze methode wordt de aanroepende thread niet geblokkeerd en kan de aanroeper een object doorgeven aan de methode die wordt aangeroepen wanneer de bewerking is voltooid. |
SendAsync(MailMessage, Object)
Hiermee wordt het opgegeven e-mailbericht verzonden naar een SMTP-server voor levering. Met deze methode wordt de aanroepende thread niet geblokkeerd en kan de aanroeper een object doorgeven aan de methode die wordt aangeroepen wanneer de bewerking is voltooid.
public:
void SendAsync(System::Net::Mail::MailMessage ^ message, System::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)
Parameters
- message
- MailMessage
Een MailMessage met het te verzenden bericht.
- userToken
- Object
Een door de gebruiker gedefinieerd object dat wordt doorgegeven aan de methode die wordt aangeroepen wanneer de asynchrone bewerking is voltooid.
Uitzonderingen
Dit SmtpClient heeft een andere verzendbewerking die al wordt uitgevoerd.
– of –
Er zijn geen geadresseerden opgegeven in To, CCen Bcc eigenschappen.
– of –
DeliveryMethod eigenschap is ingesteld op Network en Host is null.
– of –
DeliveryMethod de eigenschap is ingesteld op Network en Host is gelijk aan de lege tekenreeks ("").
– of –
DeliveryMethod eigenschap is ingesteld op Network en Port is nul, een negatief getal of groter dan 65.535.
Dit object is verwijderd.
De verbinding met de SMTP-server is mislukt.
– of –
Verificatie is mislukt.
– of –
Er is een time-out van de bewerking.
– of –
EnableSsl is ingesteld op true , maar de DeliveryMethod eigenschap is ingesteld op SpecifiedPickupDirectory of PickupDirectoryFromIis.
– of –
EnableSsl is ingesteld op true, maar de SMTP-e-mailserver heeft STARTTLS niet aangekondigd in het antwoord op de EHLO-opdracht.
– of –
Het message kan niet worden bezorgd bij een of meer van de geadresseerden in To, CCof Bcc.
Voorbeelden
In het volgende codevoorbeeld ziet u hoe u deze methode aanroept.
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)
{
client.SendAsyncCancel();
}
// Clean up.
message.Dispose();
client.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()
client.Dispose()
Console.WriteLine("Goodbye.")
End Sub
End Class
End Namespace
Opmerkingen
Als u een melding wilt ontvangen wanneer het e-mailbericht is verzonden of de bewerking is geannuleerd, voegt u een gebeurtenis-handler toe aan de SendCompleted gebeurtenis. U kunt een SendAsync bewerking annuleren door de SendAsyncCancel methode aan te roepen.
Nadat u hebt gebeld SendAsync, moet u wachten tot de verzending van e-mail is voltooid voordat u een ander e-mailbericht probeert te verzenden met of SendSendAsync.
Voordat u deze methode aanroept, moet deze HostPort worden ingesteld via de configuratiebestanden door de relevante eigenschappen in te stellen of door deze informatie door te geven aan de SmtpClient(String, Int32) constructor.
Als de SMTP-host referenties vereist, moet u deze instellen voordat u deze methode aanroept. Als u referenties wilt opgeven, gebruikt u de UseDefaultCredentials of Credentials eigenschappen.
Als u een SmtpException uitzondering ontvangt, controleert u de StatusCode eigenschap om te achterhalen waarom de bewerking is mislukt. De SmtpException kan ook een interne uitzondering bevatten die aangeeft waarom de bewerking is mislukt.
Wanneer u e-mail verzendt met SendAsync meerdere geadresseerden en de SMTP-server bepaalde geadresseerden accepteert als geldig en anderen weigert, wordt er een SmtpException gegenereerd met een NullReferenceException voor de interne uitzondering. Als dit gebeurt, SendAsync kan er geen e-mail worden verzonden naar een van de geadresseerden.
Uw toepassing kan een validatiefout voor een servercertificaat detecteren door de Error eigenschap te controleren die is doorgegeven aan de SendCompletedEventHandler gemachtigde.
De Timeout eigenschap heeft geen effect op een SendAsync aanroep.
Als u e-mail wilt verzenden en blokkeren terwijl deze naar de SMTP-server wordt verzonden, gebruikt u een van de Send methoden.
Note
Als de EnableSsl eigenschap is ingesteld op true, en de SMTP-e-mailserver geen STARTTLS adverteren in het antwoord op de EHLO-opdracht, genereert een aanroep naar de Send of SendAsync methoden een SmtpException.
Van toepassing op
SendAsync(String, String, String, String, Object)
Hiermee wordt een e-mailbericht verzonden naar een SMTP-server voor levering. De afzender van het bericht, de geadresseerden, het onderwerp en de hoofdtekst van het bericht worden opgegeven met behulp van String objecten. Met deze methode wordt de aanroepende thread niet geblokkeerd en kan de aanroeper een object doorgeven aan de methode die wordt aangeroepen wanneer de bewerking is voltooid.
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);
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)
Parameters
- userToken
- Object
Een door de gebruiker gedefinieerd object dat wordt doorgegeven aan de methode die wordt aangeroepen wanneer de asynchrone bewerking is voltooid.
Uitzonderingen
Er SmtpClient wordt een SendAsync aanroep uitgevoerd.
– of –
DeliveryMethod eigenschap is ingesteld op Network en Host is null.
– of –
DeliveryMethod de eigenschap is ingesteld op Network en Host is gelijk aan de lege tekenreeks ("").
– of –
DeliveryMethod eigenschap is ingesteld op Network en Port is nul, een negatief getal of groter dan 65.535.
Dit object is verwijderd.
De verbinding met de SMTP-server is mislukt.
– of –
Verificatie is mislukt.
– of –
Er is een time-out van de bewerking.
– of –
EnableSsl is ingesteld op true , maar de DeliveryMethod eigenschap is ingesteld op SpecifiedPickupDirectory of PickupDirectoryFromIis.
– of –
EnableSsl is ingesteld op true, maar de SMTP-e-mailserver heeft STARTTLS niet aangekondigd in het antwoord op de EHLO-opdracht.
– of –
Het bericht kan niet worden bezorgd bij een of meer geadresseerden in recipients.
Opmerkingen
Als u een melding wilt ontvangen wanneer het e-mailbericht is verzonden of de bewerking is geannuleerd, voegt u een gebeurtenis-handler toe aan de SendCompleted gebeurtenis. U kunt een SendAsync bewerking annuleren door de SendAsyncCancel methode aan te roepen.
Nadat u hebt gebeld SendAsync, moet u wachten tot de verzending van e-mail is voltooid voordat u een ander e-mailbericht probeert te verzenden met of SendSendAsync.
Voordat u deze methode aanroept, moeten de Host eigenschappen Port worden ingesteld via de configuratiebestanden of door de eigenschappen in te stellen of deze informatie door te geven aan de SmtpClient(String, Int32) constructor.
Als de SMTP-host referenties vereist, moet u deze instellen voordat u deze methode aanroept. Als u referenties wilt opgeven, gebruikt u de UseDefaultCredentials of Credentials eigenschap.
Als u een SmtpException uitzondering ontvangt, controleert u de StatusCode eigenschap om te achterhalen waarom de bewerking is mislukt. De SmtpException kan ook een interne uitzondering bevatten die aangeeft waarom de bewerking is mislukt.
Wanneer u e-mail verzendt met SendAsync meerdere geadresseerden en de SMTP-server bepaalde geadresseerden accepteert als geldig en anderen weigert, wordt er een SmtpException gegenereerd met een NullReferenceException voor de interne uitzondering. Als dit gebeurt, SendAsync kan er geen e-mail worden verzonden naar een van de geadresseerden.
Uw toepassing kan een validatiefout voor een servercertificaat detecteren door de Error eigenschap te controleren die is doorgegeven aan de SendCompletedEventHandler gemachtigde.
De Timeout eigenschap heeft geen effect op een SendAsync aanroep.
Als u e-mail wilt verzenden en blokkeren terwijl deze naar de SMTP-server wordt verzonden, gebruikt u een van de Send methoden.
Note
Als de EnableSsl eigenschap is ingesteld op true, en de SMTP-e-mailserver geen STARTTLS adverteren in het antwoord op de EHLO-opdracht, genereert een aanroep naar de Send of SendAsync methoden een SmtpException.