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.

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
type SmtpClient = class
    interface IDisposable
[<System.Runtime.Versioning.UnsupportedOSPlatform("browser")>]
type SmtpClient = class
    interface IDisposable
type SmtpClient = class
Public Class SmtpClient
Implements IDisposable
Public Class SmtpClient
Vererbung
SmtpClient
Attribute
Implementiert

Beispiele

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

#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 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:

Weitere Informationen