SmtpClient Klas
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 verzendt u e-mail met behulp van het Simple Mail Transfer Protocol (SMTP). Het SmtpClient type wordt niet aanbevolen voor nieuwe ontwikkeling. Zie de sectie Opmerkingen voor meer informatie.
public ref class SmtpClient
public ref class SmtpClient : IDisposable
public class SmtpClient
public class SmtpClient : IDisposable
type SmtpClient = class
type SmtpClient = class
interface IDisposable
Public Class SmtpClient
Public Class SmtpClient
Implements IDisposable
- Overname
-
SmtpClient
- Implementeringen
Voorbeelden
In het volgende codevoorbeeld ziet u hoe u asynchroon een e-mailbericht verzendt.
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
De SmtpClient klasse wordt gebruikt om e-mail te verzenden naar een SMTP-server voor levering. Het SMTP-protocol is gedefinieerd in RFC 2821, dat beschikbaar is op https://www.ietf.org.
Important
We raden u niet aan om de SmtpClient klasse te gebruiken voor nieuwe ontwikkeling, omdat SmtpClient er geen ondersteuning wordt geboden voor veel moderne protocollen. Gebruik in plaats daarvan MailKit of andere bibliotheken. Zie SmtpClient mag niet worden gebruikt voor meer informatie.
De SmtpClient klasse is:
- Opgenomen in .NET Standard 2.0 en latere versies en moet daarom deel uitmaken van een .NET-implementatie die deze versies ondersteunt.
- Aanwezig en kan worden gebruikt in .NET Framework 4 tot en met .NET Framework 4.8.
- Bruikbaar in .NET (Core), maar het gebruik ervan wordt niet aanbevolen.
De klassen die in de volgende tabel worden weergegeven, worden gebruikt om e-mailberichten te maken die kunnen worden verzonden met behulp van SmtpClient.
| Klasse | Description |
|---|---|
| Attachment | Vertegenwoordigt bestandsbijlagen. Met deze klasse kunt u bestanden, streams of tekst toevoegen aan een e-mailbericht. |
| MailAddress | Vertegenwoordigt het e-mailadres van de afzender en geadresseerden. |
| MailMessage | Vertegenwoordigt een e-mailbericht. |
Als u een e-mailbericht wilt maken en verzenden met behulp van SmtpClient, moet u de volgende informatie opgeven:
- De SMTP-hostserver die u gebruikt om e-mail te verzenden. Bekijk de Host en Port eigenschappen.
- Referenties voor verificatie, indien vereist door de SMTP-server. Zie de Credentials eigenschap.
- Het e-mailadres van de afzender. Bekijk de Send en SendAsync methoden die een
fromparameter gebruiken. Zie ook de MailMessage.From eigenschap. - Het e-mailadres of de adressen van de geadresseerden. Bekijk de Send en SendAsync methoden die een
recipientparameter gebruiken. Zie ook de MailMessage.To eigenschap. - De inhoud van het bericht. Bekijk de Send en SendAsync methoden die een
bodyparameter gebruiken. Zie ook de MailMessage.Body eigenschap.
Als u een bijlage met een e-mailbericht wilt opnemen, maakt u eerst de bijlage met behulp van de Attachment klasse en voegt u deze vervolgens toe aan het bericht met behulp van de MailMessage.Attachments eigenschap. Afhankelijk van de e-maillezer die door de geadresseerden en het bestandstype van de bijlage wordt gebruikt, kunnen sommige geadresseerden de bijlage mogelijk niet lezen. Voor clients die de bijlage niet in het oorspronkelijke formulier kunnen weergeven, kunt u alternatieve weergaven opgeven met behulp van de MailMessage.AlternateViews eigenschap.
In .NET Framework kunt u de toepassings- of computerconfiguratiebestanden gebruiken om standaardwaarden voor host, poort en referenties op te geven voor alle SmtpClient-objecten. Zie <het element mailSettings> (netwerkinstellingen) voor meer informatie. .NET Core biedt geen ondersteuning voor het instellen van standaardinstellingen. Als tijdelijke oplossing moet u de relevante eigenschappen SmtpClient rechtstreeks instellen.
Als u het e-mailbericht wilt verzenden en blokkeren terwijl wordt gewacht totdat de e-mail naar de SMTP-server wordt verzonden, gebruikt u een van de synchrone Send methoden. Gebruik een van de asynchrone methoden om de hoofdthread SendAsync van uw programma uit te voeren terwijl het e-mailbericht wordt verzonden. De SendCompleted gebeurtenis wordt gegenereerd wanneer een SendAsync bewerking is voltooid. Als u deze gebeurtenis wilt ontvangen, moet u een SendCompletedEventHandler gemachtigde toevoegen aan SendCompleted. De SendCompletedEventHandler gemachtigde moet verwijzen naar een callback-methode die de melding van SendCompleted gebeurtenissen afhandelt. Als u een asynchrone e-mailoverdracht wilt annuleren, gebruikt u de SendAsyncCancel methode.
Note
Als er een e-mailoverdracht wordt uitgevoerd en u belt SendAsync of Send opnieuw, ontvangt u een InvalidOperationException.
De verbinding die door het huidige exemplaar van de SmtpClient klasse met de SMTP-server tot stand is gebracht, kan opnieuw worden gebruikt als een toepassing meerdere berichten naar dezelfde SMTP-server wil verzenden. Dit is met name handig wanneer verificatie of versleuteling wordt gebruikt om een verbinding met de SMTP-server tot stand te brengen. Het proces van verificatie en het tot stand brengen van een TLS-sessie kan dure bewerkingen zijn. Een vereiste voor het opnieuw tot stand brengen van een verbinding voor elk bericht bij het verzenden van een grote hoeveelheid e-mail naar dezelfde SMTP-server kan een aanzienlijke invloed hebben op de prestaties. Er zijn een aantal grote e-mailtoepassingen die e-mailstatusupdates, nieuwsbriefdistributies of e-mailwaarschuwingen verzenden. Veel e-mailclienttoepassingen ondersteunen ook een off-line modus, waar gebruikers veel e-mailberichten kunnen opstellen die later worden verzonden wanneer er een verbinding met de SMTP-server tot stand is gebracht. Het is gebruikelijk dat een e-mailclient alle SMTP-berichten verzendt naar een specifieke SMTP-server (geleverd door de internetprovider) die deze e-mail vervolgens doorstuurt naar andere SMTP-servers.
De SmtpClient klasse-implementatie groepeert SMTP-verbindingen, zodat de overhead van het opnieuw tot stand brengen van een verbinding voor elk bericht naar dezelfde server kan voorkomen. Een toepassing kan hetzelfde SmtpClient object opnieuw gebruiken om veel verschillende e-mailberichten naar dezelfde SMTP-server en naar veel verschillende SMTP-servers te verzenden. Als gevolg hiervan is er geen manier om te bepalen wanneer een toepassing klaar is met het SmtpClient object en moet het worden opgeschoond.
Wanneer een SMTP-sessie is voltooid en de client de verbinding wil beëindigen, moet er een AFSLUITEN-bericht naar de server worden verzonden om aan te geven dat er geen berichten meer moeten worden verzonden. Hierdoor kan de server resources vrijmaken die zijn gekoppeld aan de verbinding vanaf de client en de berichten verwerken die door de client zijn verzonden.
De SmtpClient klasse heeft geen Finalize methode, dus een toepassing moet aanroepen Dispose om resources expliciet vrij te maken. De Dispose methode doorloopt alle tot stand gebrachte verbindingen met de SMTP-server die is opgegeven in de Host eigenschap en verzendt een afsluitend bericht, gevolgd door de TCP-verbinding te beëindigen. Met Dispose de methode worden ook de niet-beheerde resources vrijgegeven die door de Socket beheerde resources worden gebruikt en optioneel worden verwijderd.
Bel Dispose wanneer u klaar bent met het gebruik van de SmtpClient. De Dispose methode laat de SmtpClient status Onbruikbaar. Nadat u hebt aangeroepen Dispose, moet u alle verwijzingen naar de SmtpClient vrijgegeven zodat de garbagecollector het geheugen kan vrijmaken dat de SmtpClient bezette.
Constructors
| Name | Description |
|---|---|
| SmtpClient() |
Initialiseert een nieuw exemplaar van de SmtpClient klasse met behulp van configuratiebestandsinstellingen. |
| SmtpClient(String, Int32) |
Initialiseert een nieuw exemplaar van de SmtpClient klasse die e-mail verzendt met behulp van de opgegeven SMTP-server en -poort. |
| SmtpClient(String) |
Initialiseert een nieuw exemplaar van de SmtpClient klasse die e-mail verzendt met behulp van de opgegeven SMTP-server. |
Eigenschappen
| Name | Description |
|---|---|
| ClientCertificates |
Geef op welke certificaten moeten worden gebruikt om de SSL-verbinding (Secure Sockets Layer) tot stand te brengen. |
| Credentials |
Hiermee haalt u de referenties op die worden gebruikt om de afzender te verifiëren of stelt u deze in. |
| DeliveryFormat |
Hiermee haalt u de bezorgingsindeling op die wordt gebruikt voor SmtpClient het verzenden van e-mail. |
| DeliveryMethod |
Hiermee geeft u op hoe uitgaande e-mailberichten worden verwerkt. |
| EnableSsl |
Geef op of ssl SmtpClient (Secure Sockets Layer) wordt gebruikt om de verbinding te versleutelen. |
| Host |
Hiermee haalt u de naam of het IP-adres op van de host die wordt gebruikt voor SMTP-transacties. |
| PickupDirectoryLocation |
Hiermee haalt u de map op waarin toepassingen e-mailberichten opslaan die moeten worden verwerkt door de lokale SMTP-server. |
| Port |
Hiermee haalt u de poort op die wordt gebruikt voor SMTP-transacties of stelt u deze in. |
| ServicePoint |
Hiermee haalt u de netwerkverbinding op die wordt gebruikt om het e-mailbericht te verzenden. |
| TargetName |
Hiermee haalt u de SPN (Service Provider Name) op die moet worden gebruikt voor verificatie bij het gebruik van uitgebreide beveiliging. |
| Timeout |
Hiermee wordt een waarde opgehaald of ingesteld waarmee de hoeveelheid tijd wordt opgegeven waarna een synchrone Send aanroep een time-out optreedt. |
| UseDefaultCredentials |
Hiermee wordt een Boolean waarde opgehaald of ingesteld waarmee wordt bepaald of de DefaultCredentials verzonden waarden worden verzonden met aanvragen. |
Methoden
| Name | Description |
|---|---|
| Dispose() |
Hiermee wordt een QUIT-bericht verzonden naar de SMTP-server, wordt de TCP-verbinding correct beëindigd en worden alle resources vrijgegeven die door het huidige exemplaar van de SmtpClient klasse worden gebruikt. |
| Dispose(Boolean) |
Hiermee wordt een QUIT-bericht verzonden naar de SMTP-server, wordt de TCP-verbinding zonder problemen beëindigd, worden alle resources die door het huidige exemplaar van de SmtpClient klasse worden gebruikt, vrijgegeven en worden de beheerde resources optioneel verwijderd. |
| Equals(Object) |
Bepaalt of het opgegeven object gelijk is aan het huidige object. (Overgenomen van Object) |
| GetHashCode() |
Fungeert als de standaardhashfunctie. (Overgenomen van Object) |
| GetType() |
Hiermee haalt u de Type huidige instantie op. (Overgenomen van Object) |
| MemberwiseClone() |
Hiermee maakt u een ondiepe kopie van de huidige Object. (Overgenomen van Object) |
| OnSendCompleted(AsyncCompletedEventArgs) |
Hiermee wordt de SendCompleted gebeurtenis gegenereerd. |
| Send(MailMessage) |
Hiermee wordt het opgegeven bericht verzonden naar een SMTP-server voor levering. |
| Send(String, String, String, String) |
Hiermee wordt het opgegeven 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. |
| 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. |
| SendAsyncCancel() |
Hiermee wordt een asynchrone bewerking geannuleerd om een e-mailbericht te verzenden. |
| SendMailAsync(MailMessage) |
Hiermee wordt het opgegeven bericht verzonden naar een SMTP-server voor levering als asynchrone bewerking. |
| SendMailAsync(String, String, String, String) |
Hiermee wordt het opgegeven bericht verzonden naar een SMTP-server voor levering als asynchrone bewerking. De afzender van het bericht, de geadresseerden, het onderwerp en de hoofdtekst van het bericht worden opgegeven met behulp van String objecten. |
| ToString() |
Retourneert een tekenreeks die het huidige object vertegenwoordigt. (Overgenomen van Object) |
gebeurtenis
| Name | Description |
|---|---|
| SendCompleted |
Treedt op wanneer een asynchrone e-mailbewerking voor verzenden is voltooid. |