SmtpClient Klasse

Definition

Achtung

SmtpClient and its network of types are poorly designed, we strongly recommend you use https://github.com/jstedfast/MailKit and https://github.com/jstedfast/MimeKit instead

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.

public ref class SmtpClient : IDisposable
public ref class SmtpClient
public class SmtpClient : IDisposable
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
public class SmtpClient : IDisposable
public class SmtpClient
[System.Obsolete("SmtpClient and its network of types are poorly designed, we strongly recommend you use https://github.com/jstedfast/MailKit and https://github.com/jstedfast/MimeKit instead")]
public class SmtpClient : IDisposable
type SmtpClient = class
    interface IDisposable
[<System.Runtime.Versioning.UnsupportedOSPlatform("browser")>]
type SmtpClient = class
    interface IDisposable
type SmtpClient = class
[<System.Obsolete("SmtpClient and its network of types are poorly designed, we strongly recommend you use https://github.com/jstedfast/MailKit and https://github.com/jstedfast/MimeKit instead")>]
type SmtpClient = class
    interface IDisposable
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.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

Hinweise

Die SmtpClient -Klasse wird verwendet, um E-Mails zur Übermittlung an einen SMTP-Server 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 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 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.
  • Es kann in .NET Core verwendet werden, aber seine Verwendung wird 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.

Um eine E-Mail-Nachricht mit SmtpClientzu erstellen und zu senden, müssen Sie die folgenden Informationen angeben:

  • Der SMTP-Hostserver, den Sie zum Senden von E-Mails verwenden. Weitere Informationen finden Sie unter den Host Eigenschaften und Port .

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

  • Die E-Mail-Adresse des Absenders. Weitere Informationen finden Sie unter den Send Methoden und SendAsync , die einen from Parameter verwenden. Siehe auch die MailMessage.From -Eigenschaft.

  • Die E-Mail-Adresse oder die Adressen der Empfänger. Weitere Informationen finden Sie unter den Send Methoden und SendAsync , die einen recipient Parameter verwenden. Siehe auch die MailMessage.To -Eigenschaft.

  • Den Nachrichteninhalt Weitere Informationen finden Sie unter den Send Methoden und SendAsync , die einen body Parameter verwenden. Siehe auch die MailMessage.Body -Eigenschaft.

Um eine Anlage mit einer E-Mail-Nachricht einzuschließen, erstellen Sie zuerst die Anlage mithilfe der Attachment -Klasse, und fügen Sie sie dann der Nachricht mithilfe der MailMessage.Attachments -Eigenschaft hinzu. Abhängig vom E-Mail-Reader, der von den Empfängern verwendet wird, 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 alternative Ansichten mithilfe der MailMessage.AlternateViews -Eigenschaft 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 auf die Übertragung der E-Mail an den SMTP-Server gewartet wird. 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 wird. Um dieses Ereignis zu empfangen, 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 Send erneut anrufenSendAsync, erhalten Sie eine InvalidOperationException.

Die von der aktuellen Instanz der SmtpClient -Klasse hergestellte Verbindung mit dem SMTP-Server kann erneut 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. Das Authentifizieren und Einrichten einer TLS-Sitzung kann kostspielige Vorgänge sein. Die Anforderung, beim Senden einer großen Anzahl 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-Mail-Statusaktualisierungen, 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 abgeschlossen 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. Nach dem Aufrufen Disposevon müssen Sie alle Verweise auf das SmtpClient freigeben, damit der Garbage Collector den Arbeitsspeicher, den der SmtpClient belegt hat, freigeben kann.

Konstruktoren

SmtpClient()
Veraltet.

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

SmtpClient(String)
Veraltet.

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

SmtpClient(String, Int32)
Veraltet.

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

Eigenschaften

ClientCertificates
Veraltet.

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

Credentials
Veraltet.

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

DeliveryFormat
Veraltet.

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

DeliveryMethod
Veraltet.

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

EnableSsl
Veraltet.

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

Host
Veraltet.

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
Veraltet.

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

Port
Veraltet.

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

ServicePoint
Veraltet.

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

TargetName
Veraltet.

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

Timeout
Veraltet.

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

UseDefaultCredentials
Veraltet.

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

Methoden

Dispose()
Veraltet.

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)
Veraltet.

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)
Veraltet.

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

(Geerbt von Object)
GetHashCode()
Veraltet.

Fungiert als Standardhashfunktion.

(Geerbt von Object)
GetType()
Veraltet.

Ruft den Type der aktuellen Instanz ab.

(Geerbt von Object)
MemberwiseClone()
Veraltet.

Erstellt eine flache Kopie des aktuellen Object.

(Geerbt von Object)
OnSendCompleted(AsyncCompletedEventArgs)
Veraltet.

Löst das SendCompleted-Ereignis aus.

Send(MailMessage)
Veraltet.

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

Send(String, String, String, String)
Veraltet.

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)
Veraltet.

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)
Veraltet.

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()
Veraltet.

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

SendMailAsync(MailMessage)
Veraltet.

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

SendMailAsync(MailMessage, CancellationToken)
Veraltet.

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

SendMailAsync(String, String, String, String)
Veraltet.

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)
Veraltet.

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

ToString()
Veraltet.

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

(Geerbt von Object)

Ereignisse

SendCompleted
Veraltet.

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

Gilt für

Siehe auch