Freigeben über


SmtpClient Klasse

Definition

Sendet E-Mails mithilfe des Simple Mail Transfer Protocol (SMTP). Der SmtpClient Typ wird für die neue Entwicklung nicht empfohlen. Weitere Informationen finden Sie im Abschnitt "Hinweise".

public ref class SmtpClient : IDisposable
public ref class SmtpClient
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
public class SmtpClient : IDisposable
public class SmtpClient : IDisposable
public class SmtpClient
[<System.Runtime.Versioning.UnsupportedOSPlatform("browser")>]
type SmtpClient = class
    interface IDisposable
type SmtpClient = class
    interface IDisposable
type SmtpClient = class
Public Class SmtpClient
Implements IDisposable
Public Class SmtpClient
Vererbung
SmtpClient
Attribute
Implementiert

Beispiele

Im folgenden Codebeispiel wird das asynchrone Senden einer E-Mail-Nachricht veranschaulicht.


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

Hinweise

Die SmtpClient Klasse wird verwendet, um E-Mails an einen SMTP-Server zur Übermittlung zu senden. Das SMTP-Protokoll ist in RFC 2821 definiert, das unter https://www.ietf.org.

Von Bedeutung

Es wird nicht empfohlen, die SmtpClient Klasse für die neue Entwicklung zu verwenden, da SmtpClient viele moderne Protokolle nicht unterstützt werden. Verwenden Sie stattdessen MailKit oder andere Bibliotheken. Weitere Informationen finden Sie unter SmtpClient sollte nicht verwendet werden.

Die SmtpClient Klasse lautet:

  • In .NET Standard 2.0 und höher enthalten und müssen daher Teil einer .NET-Implementierung sein, die diese Versionen unterstützt.
  • Präsentieren und können in .NET Framework 4 bis .NET Framework 4.8 verwendet werden.
  • Kann in .NET (Core) verwendet werden, die Verwendung wird jedoch nicht empfohlen.

Die in der folgenden Tabelle gezeigten Klassen werden verwendet, um E-Mail-Nachrichten zu erstellen, die mithilfe von SmtpClient

Klasse Beschreibung
Attachment Stellt Dateianlagen dar. Mit dieser Klasse können Sie Dateien, Datenströme oder Text an eine E-Mail-Nachricht anfügen.
MailAddress Stellt die E-Mail-Adresse des Absenders und der Empfänger dar.
MailMessage Stellt eine E-Mail-Nachricht dar.

Um eine E-Mail-Nachricht mithilfe SmtpClientvon "Erstellen und Senden" zu erstellen und zu senden, müssen Sie die folgenden Informationen angeben:

  • Der SMTP-Hostserver, den Sie zum Senden von E-Mails verwenden. Sehen Sie sich die Eigenschaften und Port die Eigenschaften anHost.
  • Anmeldeinformationen für die Authentifizierung, falls erforderlich vom SMTP-Server. Siehe die Credentials Eigenschaft.
  • Die E-Mail-Adresse des Absenders. Sehen Sie sich die Send Methoden an SendAsync , die einen from Parameter verwenden. Siehe auch die MailMessage.From Eigenschaft.
  • Die E-Mail-Adresse oder Adressen der Empfänger. Sehen Sie sich die Send Methoden an SendAsync , die einen recipient Parameter verwenden. Siehe auch die MailMessage.To Eigenschaft.
  • Der Nachrichteninhalt. Sehen Sie sich die Send Methoden an SendAsync , die einen body Parameter verwenden. Siehe auch die MailMessage.Body Eigenschaft.

Um eine Anlage in eine E-Mail-Nachricht einzuschließen, erstellen Sie zuerst die Anlage mithilfe der Attachment Klasse, und fügen Sie sie dann mithilfe der MailMessage.Attachments Eigenschaft der Nachricht hinzu. Abhängig von dem E-Mail-Reader, der von den Empfängern und dem Dateityp der Anlage verwendet wird, können einige Empfänger die Anlage möglicherweise nicht lesen. Für Clients, die die Anlage nicht in der ursprünglichen Form anzeigen können, können Sie alternative Ansichten mithilfe der MailMessage.AlternateViews Eigenschaft angeben.

In .NET Framework können Sie die Anwendungs- oder Computerkonfigurationsdateien verwenden, um Standardhost-, Port- und Anmeldeinformationenwerte für alle SmtpClient Objekte anzugeben. Weitere Informationen finden Sie unter mailSettings Element (Netzwerkeinstellungen).For more information, see< mailSettings> Element (Network Settings). .NET Core unterstützt keine Standardeinstellung. Als Problemumgehung müssen Sie die relevanten Eigenschaften SmtpClient direkt festlegen.

Wenn Sie die E-Mail-Nachricht senden und blockieren möchten, während sie auf die Übertragung der E-Mail an den SMTP-Server wartet, verwenden Sie eine der synchronen Send Methoden. Verwenden Sie eine der asynchronen SendAsync Methoden, damit der Hauptthread Ihres Programms weiterhin ausgeführt wird, während die E-Mail übertragen wird. Das SendCompleted Ereignis wird ausgelöst, wenn ein SendAsync Vorgang abgeschlossen ist. Um dieses Ereignis zu erhalten, müssen Sie eine SendCompletedEventHandler Stellvertretung hinzufügen.SendCompleted Der Delegat SendCompletedEventHandler muss auf eine Rückrufmethode verweisen, die Benachrichtigungen über SendCompleted Ereignisse behandelt. Verwenden Sie die SendAsyncCancel Methode, um eine asynchrone E-Mail-Übertragung abzubrechen.

Hinweis

Wenn eine E-Mail-Übertragung ausgeführt wird und Sie anrufen oder erneut, SendAsync erhalten Sie eine InvalidOperationException.Send

Die verbindung, die von der aktuellen Instanz der SmtpClient Klasse mit dem SMTP-Server hergestellt wird, kann erneut verwendet werden, wenn eine Anwendung mehrere Nachrichten an denselben SMTP-Server senden möchte. Dies ist besonders hilfreich, wenn die Authentifizierung oder Verschlüsselung verwendet wird, um eine Verbindung mit dem SMTP-Server herzustellen. Der Prozess der Authentifizierung und Einrichtung einer TLS-Sitzung kann kostspielige Vorgänge sein. Eine Anforderung zum erneuten Herstellen einer Verbindung für jede Nachricht beim Senden einer großen Anzahl von E-Mails an denselben SMTP-Server könnte erhebliche Auswirkungen auf die Leistung haben. Es gibt eine Reihe von E-Mail-Anwendungen, die E-Mail-Statusaktualisierungen, Newsletterverteilungen oder E-Mail-Benachrichtigungen senden. Viele E-Mail-Clientanwendungen unterstützen auch einen Off-Line-Modus, in dem Benutzer viele E-Mail-Nachrichten verfassen können, die später gesendet werden, wenn eine Verbindung mit dem SMTP-Server hergestellt wird. Es ist typisch, dass ein E-Mail-Client alle SMTP-Nachrichten an einen bestimmten SMTP-Server (vom Internetdienstanbieter bereitgestellt) sendet, der diese E-Mail dann an andere SMTP-Server weiterleitet.

Die SmtpClient Klassenimplementierungspools für SMTP-Verbindungen, sodass dadurch der Aufwand für die erneute Einrichtung einer Verbindung für jede Nachricht mit demselben Server vermieden werden kann. Eine Anwendung kann dasselbe SmtpClient Objekt erneut verwenden, um viele verschiedene E-Mails an denselben SMTP-Server und an viele verschiedene SMTP-Server zu senden. Daher gibt es keine Möglichkeit, zu bestimmen, wann eine Anwendung mit dem SmtpClient Objekt fertig ist, und es sollte bereinigt werden.

Wenn eine SMTP-Sitzung abgeschlossen ist und der Client die Verbindung beenden möchte, muss eine QUIT-Nachricht an den Server gesendet werden, um anzugeben, dass keine weiteren Nachrichten gesendet werden. Auf diese Weise kann der Server Ressourcen freigeben, die der Verbindung vom Client zugeordnet sind, und die vom Client gesendeten Nachrichten verarbeiten.

Die SmtpClient Klasse hat keine Finalize Methode, daher muss eine Anwendung aufrufen Dispose , um Ressourcen explizit freizugeben. Die Dispose Methode durchläuft alle etablierten Verbindungen mit dem in der Host Eigenschaft angegebenen SMTP-Server und sendet eine QUIT-Nachricht gefolgt von einer ordnungsgemäßen Beendigung der TCP-Verbindung. Die Dispose Methode gibt auch die nicht verwalteten Ressourcen frei, die von den Socket verwalteten Ressourcen verwendet werden, und gibt optional die verwalteten Ressourcen ab.

Rufen Sie an Dispose , wenn Sie mit der Verwendung der SmtpClient. Die Dispose Methode verlässt den SmtpClient nicht verwendbaren Zustand. Nach dem Aufrufen Disposemüssen Sie alle Verweise auf den SmtpClient Garbage Collector freigeben, damit der Garbage Collector den Speicher zurückfordern kann, den sie SmtpClient belegt hat.

Konstruktoren

Name Beschreibung
SmtpClient()

Initialisiert eine neue Instanz der SmtpClient Klasse mithilfe von Konfigurationsdateieinstellungen.

SmtpClient(String, Int32)

Initialisiert eine neue Instanz der Klasse, die SmtpClient E-Mails mithilfe des angegebenen SMTP-Servers und -Ports sendet.

SmtpClient(String)

Initialisiert eine neue Instanz der Klasse, die SmtpClient E-Mails mithilfe des angegebenen SMTP-Servers sendet.

Eigenschaften

Name Beschreibung
ClientCertificates

Geben Sie an, welche Zertifikate zum Herstellen der SSL-Verbindung (Secure Sockets Layer) verwendet werden sollen.

Credentials

Ruft die Anmeldeinformationen ab, die zum Authentifizieren des Absenders verwendet werden, oder legt diese fest.

DeliveryFormat

Ruft ab oder legt das Übermittlungsformat fest, das zum Senden von SmtpClient E-Mails verwendet wird.

DeliveryMethod

Gibt an, wie ausgehende E-Mail-Nachrichten verarbeitet werden.

EnableSsl

Geben Sie an, ob die SmtpClient Secure Sockets Layer (SSL) zum Verschlüsseln der Verbindung verwendet wird.

Host

Dient zum Abrufen oder Festlegen des Namens oder der IP-Adresse des Hosts, der für SMTP-Transaktionen verwendet wird.

PickupDirectoryLocation

Ruft den Ordner ab, in dem Anwendungen E-Mail-Nachrichten speichern, die vom lokalen SMTP-Server verarbeitet werden sollen, oder legt diesen fest.

Port

Ruft den port ab, der für SMTP-Transaktionen verwendet wird, oder legt den Port fest.

ServicePoint

Ruft die Netzwerkverbindung ab, die zum Übertragen der E-Mail-Nachricht verwendet wird.

TargetName

Dient zum Abrufen oder Festlegen des Dienstanbieternamens (Service Provider Name, SPN), der bei Verwendung des erweiterten Schutzes für die Authentifizierung verwendet werden soll.

Timeout

Dient zum Abrufen oder Festlegen eines Werts, der die Zeitspanne angibt, nach der ein synchroner Send Aufruf timeout.

UseDefaultCredentials

Dient zum Abrufen oder Festlegen eines Boolean Werts, der steuert, ob die DefaultCredentials Mit Anforderungen gesendet werden.

Methoden

Name Beschreibung
Dispose()

Sendet eine QUIT-Nachricht an den SMTP-Server, beendet die TCP-Verbindung ordnungsgemäß und gibt alle Ressourcen frei, die von der aktuellen Instanz der SmtpClient Klasse verwendet werden.

Dispose(Boolean)

Sendet eine QUIT-Nachricht an den SMTP-Server, beendet die TCP-Verbindung ordnungsgemäß, gibt alle von der aktuellen Instanz der SmtpClient Klasse verwendeten Ressourcen frei und entfernt optional die verwalteten Ressourcen.

Equals(Object)

Bestimmt, ob das angegebene Objekt dem aktuellen Objekt entspricht.

(Geerbt von Object)
GetHashCode()

Dient als Standardhashfunktion.

(Geerbt von Object)
GetType()

Ruft die Type der aktuellen Instanz ab.

(Geerbt von Object)
MemberwiseClone()

Erstellt eine flache Kopie der aktuellen Object.

(Geerbt von Object)
OnSendCompleted(AsyncCompletedEventArgs)

Löst das SendCompleted-Ereignis aus.

Send(MailMessage)

Sendet die angegebene Nachricht zur Übermittlung an einen SMTP-Server.

Send(String, String, String, String)

Sendet die angegebene E-Mail-Nachricht zur Zustellung an einen SMTP-Server. Der Nachrichtensender, Empfänger, Betreff und Nachrichtentext werden mithilfe von String Objekten angegeben.

SendAsync(MailMessage, Object)

Sendet die angegebene E-Mail-Nachricht zur Zustellung an einen SMTP-Server. Diese Methode blockiert nicht den aufrufenden Thread und ermöglicht es dem Aufrufer, ein Objekt an die Methode zu übergeben, die aufgerufen wird, wenn der Vorgang abgeschlossen ist.

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

Sendet eine E-Mail-Nachricht an einen SMTP-Server zur Zustellung. Der Nachrichtensender, Empfänger, Betreff und Nachrichtentext werden mithilfe von String Objekten angegeben. Diese Methode blockiert nicht den aufrufenden Thread und ermöglicht es dem Aufrufer, ein Objekt an die Methode zu übergeben, die aufgerufen wird, wenn der Vorgang abgeschlossen ist.

SendAsyncCancel()

Bricht einen asynchronen Vorgang ab, um eine E-Mail-Nachricht zu senden.

SendMailAsync(MailMessage, CancellationToken)

Sendet die angegebene Nachricht an einen SMTP-Server zur Übermittlung als asynchronen Vorgang.

SendMailAsync(MailMessage)

Sendet die angegebene Nachricht an einen SMTP-Server zur Übermittlung als asynchronen Vorgang.

SendMailAsync(String, String, String, String, CancellationToken)

Sendet die angegebene Nachricht an einen SMTP-Server für die Übermittlung als asynchronen Vorgang unter Verwendung der angegebenen Absender-, Empfänger-, Betreff- und Textzeichenfolgen.

SendMailAsync(String, String, String, String)

Sendet die angegebene Nachricht an einen SMTP-Server zur Übermittlung als asynchronen Vorgang. Der Nachrichtensender, Empfänger, Betreff und Nachrichtentext werden mithilfe von String Objekten angegeben.

ToString()

Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt.

(Geerbt von Object)

Ereignisse

Name Beschreibung
SendCompleted

Tritt auf, wenn ein asynchroner E-Mail-Sendevorgang abgeschlossen ist.

Gilt für:

Weitere Informationen