Auf Englisch lesen

Freigeben über


SmtpClient Klasse

Definition

Ermöglicht Anwendungen das Senden von E-Mails mit SMTP (Simple Mail Transfer Protocol). Der SmtpClient Typ ist auf einigen Plattformen veraltet und wird für andere nicht empfohlen. Weitere Informationen finden Sie im Abschnitt Hinweise.

C#
public class SmtpClient : IDisposable
C#
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
public class SmtpClient : IDisposable
C#
public class SmtpClient
Vererbung
SmtpClient
Attribute
Implementiert

Beispiele

Das folgende Codebeispiel veranschaulicht das asynchrone Senden einer E-Mail-Nachricht.

C#

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.");
        }
    }
}

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.orgverfügbar ist.

Wichtig

Es wird nicht empfohlen, die SmtpClient -Klasse für neue Entwicklungen 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 auf GitHub verwendet werden.

Die SmtpClient -Klasse ist in Xamarin veraltet. Allerdings:

  • Es ist in .NET Standard 2.0 und höheren Versionen enthalten und muss daher Teil jeder .NET-Implementierung sein, die diese Versionen unterstützt.
  • Es ist vorhanden und kann in .NET Framework 4 bis .NET Framework 4.8 verwendet werden.
  • Sie 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 mit SmtpClientgesendet werden können.

Klasse BESCHREIBUNG
Attachment Stellt Dateianlagen dar. Mit dieser Klasse können Sie Dateien, Streams 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.

Zum Erstellen und Senden einer E-Mail-Nachricht mit SmtpClientmüssen Sie die folgenden Informationen angeben:

  • Der SMTP-Hostserver, den Sie zum Senden von E-Mails verwenden. Sehen Sie sich die Eigenschaften und Port anHost.

  • Anmeldeinformationen für die Authentifizierung, falls vom SMTP-Server erforderlich. Weitere Informationen finden Sie unter der Credentials-Eigenschaft.

  • Die E-Mail-Adresse des Absenders. Sehen Sie sich die Send Methoden und SendAsync an, 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 und SendAsync an, die einen recipient Parameter verwenden. Siehe auch die MailMessage.To -Eigenschaft.

  • Den Nachrichteninhalt Sehen Sie sich die Send Methoden und SendAsync an, die einen body Parameter verwenden. Siehe auch die MailMessage.Body -Eigenschaft.

Wenn Sie eine Anlage mit einer E-Mail-Nachricht einschließen möchten, 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 vom von den Empfängern verwendeten E-Mail-Reader und dem Dateityp der Anlage können einige Empfänger die Anlage möglicherweise nicht lesen. Für Clients, die die Anlage nicht in ihrer ursprünglichen Form anzeigen können, können Sie mithilfe der MailMessage.AlternateViews -Eigenschaft alternative Ansichten angeben.

In .NET Framework können Sie die Anwendungs- oder Computerkonfigurationsdateien verwenden, um Standardwerte für Host, Port und Anmeldeinformationen für alle SmtpClient Objekte anzugeben. Weitere Informationen finden Sie unter <mailSettings-Element> (Netzwerkeinstellungen). .NET Core unterstützt das Festlegen von Standardwerten nicht. Als Problemumgehung müssen Sie die relevanten Eigenschaften direkt auf SmtpClient festlegen.

Verwenden Sie eine der synchronen Send Methoden, um die E-Mail-Nachricht zu senden und zu blockieren, während sie auf die Übertragung der E-Mail an den SMTP-Server warten. Verwenden Sie eine der asynchronen SendAsync Methoden, damit der Standard Thread 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 einen SendCompletedEventHandler Delegaten zu SendCompletedhinzufügen. Der SendCompletedEventHandler Delegat muss auf eine Rückrufmethode verweisen, die Benachrichtigungen über SendCompleted Ereignisse verarbeitet. Verwenden Sie die SendAsyncCancel -Methode, um eine asynchrone E-Mail-Übertragung abzubrechen.

Hinweis

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

Die vom aktuellen instance der Klasse hergestellte Verbindung mit dem SmtpClient SMTP-Server kann wieder verwendet werden, wenn eine Anwendung mehrere Nachrichten an denselben SMTP-Server senden möchte. Dies ist besonders nützlich, wenn 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. Die Anforderung, beim Senden einer großen Menge von E-Mails an denselben SMTP-Server eine Verbindung für jede Nachricht wie herzustellen, kann erhebliche Auswirkungen auf die Leistung haben. Es gibt eine Reihe von E-Mail-Anwendungen mit hohem Volumen, die E-Mails status Updates, Newsletterverteilungen oder E-Mail-Benachrichtigungen senden. Außerdem unterstützen viele E-Mail-Clientanwendungen einen Offlinemodus, 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 Klassenimplementierung gruppiert SMTP-Verbindungen, sodass der Mehraufwand beim erneuten Herstellen 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 beendet ist und der Client die Verbindung beenden möchte, muss er eine QUIT-Nachricht an den Server senden, um anzugeben, dass keine weiteren Nachrichten gesendet werden. Dadurch kann der Server Ressourcen freigeben, die der Verbindung vom Client zugeordnet sind, und die vom Client gesendeten Nachrichten verarbeiten.

Die SmtpClient -Klasse verfügt über keine Finalize -Methode, sodass eine Anwendung aufrufen Dispose muss, um Ressourcen explizit freizugeben. Die Dispose -Methode durchläuft alle hergestellten Verbindungen mit dem in der Host -Eigenschaft angegebenen SMTP-Server und sendet eine QUIT-Nachricht, gefolgt von der ordnungsgemäßen Beendigung der TCP-Verbindung. Die Dispose Methode auch frei, die vom verwendeten nicht verwalteten Ressourcen der Socket und verwirft optional auch die verwalteten Ressourcen.

Rufen Sie Dispose auf, wenn Sie SmtpClient nicht mehr benötigen. Die Dispose-Methode bewirkt, dass SmtpClient nicht mehr verwendet werden kann. Nachdem Sie aufgerufen Disposehaben, müssen Sie alle Verweise auf das SmtpClient freigeben, damit der Garbage Collector den Arbeitsspeicher, den der SmtpClient belegt hat, freigeben kann.

Konstruktoren

SmtpClient()

Initialisiert eine neue Instanz der SmtpClient-Klasse mit den Einstellungen der Konfigurationsdatei.

SmtpClient(String)

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

SmtpClient(String, Int32)

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

Eigenschaften

ClientCertificates

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

Credentials

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

DeliveryFormat

Ruft das Übermittlungsformat ab, das von SmtpClient verwendet wird, um E-Mails zu senden, oder legt es fest.

DeliveryMethod

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

EnableSsl

Geben Sie an, ob der SmtpClient die Verbindung mit SSL (Secure Sockets Layer) verschlüsselt.

Host

Ruft den Namen oder die IP-Adresse des Hosts ab, der bzw. die für SMTP-Transaktionen verwendet wird, oder legt diese Informationen fest.

PickupDirectoryLocation

Ruft den Ordner ab, in dem Anwendungen vom lokalen SMTP-Server zu verarbeitende E-Mail-Nachrichten speichern, oder legt diesen fest.

Port

Ruft den für SMTP-Transaktionen verwendeten Anschluss ab oder legt diesen fest.

ServicePoint

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

TargetName

Ruft den Dienstanbieternamen (SPN) ab, der bei Verwendung des erweiterten Schutzes zur Authentifizierung verwendet werden soll, oder legt ihn fest.

Timeout

Ruft einen Wert ab, der die Zeitspanne bis zum Timeout eines synchronen Send-Aufrufs angibt, oder legt diesen fest.

UseDefaultCredentials

Ruft einen Boolean-Wert ab, der steuert, ob mit den Anforderungen DefaultCredentials gesendet werden, oder legt diesen fest.

Methoden

Dispose()

Sendet eine QUIT-Meldung 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-Meldung an den SMTP-Server, beendet die TCP-Verbindung ordnungsgemäß, gibt alle Ressourcen frei, die von der aktuellen Instanz der SmtpClient-Klasse verwendet werden, und gibt optional die verwalteten Ressourcen frei.

Equals(Object)

Bestimmt, ob das angegebene Objekt gleich dem aktuellen Objekt ist.

(Geerbt von Object)
GetHashCode()

Fungiert als Standardhashfunktion.

(Geerbt von Object)
GetType()

Ruft den Type der aktuellen Instanz ab.

(Geerbt von Object)
MemberwiseClone()

Erstellt eine flache Kopie des aktuellen Object.

(Geerbt von Object)
OnSendCompleted(AsyncCompletedEventArgs)

Löst das SendCompleted-Ereignis aus.

Send(MailMessage)

Sendet die angegebene Nachricht an einen SMTP-Server für die Übermittlung.

Send(String, String, String, String)

Sendet die angegebene E-Mail für die Übermittlung an einen SMTP-Server. Der Absender, die Empfänger, der Betreff und der Text der Nachricht werden mit String-Objekten angegeben.

SendAsync(MailMessage, Object)

Sendet die angegebene E-Mail für die Übermittlung an einen SMTP-Server. Diese Methode blockiert den aufrufenden Thread nicht und ermöglicht dem Aufrufer die Übergabe eines Objekts an die Methode, die beim Abschluss des Vorgangs aufgerufen wird.

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

Sendet eine E-Mail für die Übermittlung an einen SMTP-Server. Der Absender, die Empfänger, der Betreff und der Text der Nachricht werden mit String-Objekten angegeben. Diese Methode blockiert den aufrufenden Thread nicht und ermöglicht dem Aufrufer die Übergabe eines Objekts an die Methode, die beim Abschluss des Vorgangs aufgerufen wird.

SendAsyncCancel()

Bricht einen asynchronen Vorgang zum Senden einer E-Mail ab.

SendMailAsync(MailMessage)

Sendet die angegebene Meldung an einen SMTP-Server für die Übermittlung als asynchroner Vorgang.

SendMailAsync(MailMessage, CancellationToken)

Sendet die angegebene Meldung an einen SMTP-Server für die Übermittlung als asynchroner Vorgang.

SendMailAsync(String, String, String, String)

Sendet die angegebene Meldung an einen SMTP-Server für die Übermittlung als asynchroner Vorgang. Der Absender, die Empfänger, der Betreff und der Text der Nachricht werden mit String-Objekten angegeben.

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

Sendet die angegebene Nachricht unter Verwendung der angegebenen Absender-, Empfänger-, Betreffzeilen- und Textzeichenfolgen an einen SMTP-Server zur Übermittlung als asynchroner Vorgang.

ToString()

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

(Geerbt von Object)

Ereignisse

SendCompleted

Tritt ein, wenn das asynchrone Senden einer E-Mail abgeschlossen wurde.

Gilt für:

Produkt Versionen
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1

Weitere Informationen