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 nicht für andere 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 an einen SMTP-Server zur Übermittlung zu senden. Das SMTP-Protokoll wird in RFC 2821 definiert, das unter https://www.ietf.org".

Wichtig

Wir empfehlen nicht, dass Sie die SmtpClient Klasse für neue Entwicklung verwenden, da SmtpClient viele moderne Protokolle nicht unterstützt werden. Verwenden Sie stattdessen MailKit oder andere Bibliotheken. Weitere Informationen finden Sie unter SmtpClient, die nicht für GitHub verwendet werden sollen.

Die SmtpClient Klasse ist in Xamarin veraltet. Allerdings:

  • Es ist in den .NET Standard 2.0- und höher-Versionen enthalten und muss daher Teil einer .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 ist in .NET Core nutzbar, aber die Verwendung wird nicht empfohlen.

Die in der folgenden Tabelle dargestellten Klassen werden verwendet, um E-Mail-Nachrichten zu erstellen, die mithilfe SmtpClientvon E-Mail-Nachrichten gesendet werden können.

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 empfängers dar.
MailMessage Stellt eine E-Mail-Nachricht dar.

Um mithilfe einer E-Mail-Nachricht SmtpClienteine E-Mail 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 Host Eigenschaften an Port .

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

  • Die E-Mail-Adresse des Absenders. Sehen Sie sich die Methoden anSendAsync, die Send einen from Parameter verwenden. Siehe auch die MailMessage.From Eigenschaft.

  • Die E-Mail-Adresse oder -Adressen der Empfänger. Sehen Sie sich die Methoden anSendAsync, die Send einen recipient Parameter verwenden. Siehe auch die MailMessage.To Eigenschaft.

  • Den Nachrichteninhalt Sehen Sie sich die Methoden anSendAsync, die Send 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 mithilfe der MailMessage.Attachments Eigenschaft zur Nachricht hinzu. Je nachdem, welche E-Mail-Leser von den Empfängern und dem Dateityp der Anlage verwendet werden, können einige Empfänger möglicherweise die Anlage nicht lesen. Für Clients, die die Anlage nicht in ihrem ursprünglichen Formular 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> (Network Einstellungen). .NET Core unterstützt keine Standardeinstellungen. Als Problemumgehung müssen Sie die relevanten Eigenschaften SmtpClient direkt festlegen.

Um die E-Mail-Nachricht zu senden und zu blockieren, während sie darauf warten, dass die E-Mail an den SMTP-Server übertragen werden soll, verwenden Sie eine der synchronen Send Methoden. Verwenden Sie eine der asynchronen SendAsync Methoden, um den Hauptthread Ihres Programms weiterhin auszuführen, 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 SendCompletedhinzufügen. Der SendCompletedEventHandler Stellvertretung muss auf eine Rückrufmethode verweisen, die Benachrichtigungen von SendCompleted Ereignissen behandelt. Um eine asynchrone E-Mail-Übertragung abzubrechen, verwenden Sie die SendAsyncCancel Methode.

Hinweis

Wenn es eine E-Mail-Übertragung gibt, und Sie anrufen SendAsync oder Send erneut, erhalten Sie eine InvalidOperationException.

Die von der aktuellen Instanz der SmtpClient Klasse mit dem SMTP-Server erstellte Verbindung kann erneut verwendet werden, wenn eine Anwendung mehrere Nachrichten an denselben SMTP-Server senden möchte. Dies ist besonders nützlich, wenn die Authentifizierung oder Verschlüsselung verwendet wird, 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 Einrichten einer Verbindung für jede Nachricht beim Senden einer großen Anzahl von E-Mails an den gleichen SMTP-Server könnte eine erhebliche Auswirkung auf die Leistung haben. Es gibt eine Reihe von hochvolumigen E-Mail-Anwendungen, die E-Mail-Statusupdates, Newsletterverteilungen oder E-Mail-Warnungen 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 eingerichtet wird. Es ist typisch für einen E-Mail-Client, alle SMTP-Nachrichten an einen bestimmten SMTP-Server (bereitgestellt vom Internetdienstanbieter) zu senden, der diese E-Mail dann an andere SMTP-Server weiterleitet.

Die SmtpClient Klassenimplementierungpools SMTP-Verbindungen, damit sie den Aufwand für die erneute Einrichtung einer Verbindung für jede Nachricht auf demselben Server vermeiden 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 aufräumen sollte.

Wenn eine SMTP-Sitzung abgeschlossen ist und der Client die Verbindung beenden möchte, muss es eine QUIT-Nachricht an den Server senden, um anzugeben, dass es keine weiteren Nachrichten zum Senden hat. Dadurch kann der Server Ressourcen freizugeben, die der Verbindung vom Client zugeordnet sind, und die Nachrichten verarbeiten, die vom Client gesendet wurden.

Die SmtpClient Klasse hat keine Finalize Methode, sodass eine Anwendung explizit Dispose Ressourcen freizugeben muss. Die Dispose Methode durchläuft alle eingerichteten 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 Disposemüssen Sie alle Verweise auf die SmtpClient Veröffentlichung freigeben, sodass der Garbage Collector den Speicher zurückfordert, den die SmtpClient Datei besetzt hat.

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:

Siehe auch