SmtpClient Třída

Definice

Umožňuje aplikacím odesílat e-maily pomocí protokolu SMTP (Simple Mail Transfer Protocol). Typ SmtpClient je na některých platformách zastaralý a na jiných se nedoporučuje. Další informace najdete v části Poznámky.

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
Dědičnost
SmtpClient
Atributy
Implementuje

Příklady

Následující příklad kódu ukazuje asynchronní odesílání e-mailové zprávy.

#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

Poznámky

Třída se SmtpClient používá k odesílání e-mailů na server SMTP k doručení. Protokol SMTP je definován v dokumentu RFC 2821, který je k dispozici na adrese https://www.ietf.org.

Důležité

Nedoporučujeme používat SmtpClient třídu pro nový vývoj, protože SmtpClient nepodporuje mnoho moderních protokolů. Místo toho použijte MailKit nebo jiné knihovny. Další informace najdete v tématu SmtpClient by se neměl používat na GitHubu.

Třída SmtpClient je v Xamarinu zastaralá. Mějte však na paměti následující:

  • Je součástí .NET Standard 2.0 a novějších verzí, a proto musí být součástí jakékoli implementace .NET, která tyto verze podporuje.
  • Je k dispozici a lze ji použít v rozhraní .NET Framework 4 až .NET Framework 4.8.
  • Je použitelný v .NET Core, ale nedoporučuje se.

Třídy uvedené v následující tabulce slouží k vytváření e-mailových zpráv, které lze odesílat pomocí SmtpClient.

Třída Popis
Attachment Představuje přílohy souborů. Tato třída umožňuje připojit k e-mailové zprávě soubory, streamy nebo texty.
MailAddress Představuje e-mailovou adresu odesílatele a příjemců.
MailMessage Představuje e-mailovou zprávu.

Chcete-li vytvořit a odeslat e-mailovou zprávu pomocí SmtpClientnástroje , je nutné zadat následující informace:

  • Hostitelský server SMTP, který používáte k odesílání e-mailů. Podívejte se na Host vlastnosti a Port .

  • Přihlašovací údaje pro ověřování, pokud to vyžaduje server SMTP. Podívejte se na Credentials vlastnost.

  • E-mailová adresa odesílatele. Podívejte se na Send metody a SendAsync , které přebírají from parametr. Podívejte se také na MailMessage.From vlastnost.

  • E-mailová adresa nebo adresy příjemců. Podívejte se na Send metody a SendAsync , které přebírají recipient parametr. Podívejte se také na MailMessage.To vlastnost.

  • Obsah zprávy. Podívejte se na Send metody a SendAsync , které přebírají body parametr. Podívejte se také na MailMessage.Body vlastnost.

Pokud chcete k e-mailové zprávě zahrnout přílohu, nejprve ji vytvořte pomocí Attachment třídy a pak ji přidejte do zprávy pomocí MailMessage.Attachments vlastnosti . V závislosti na tom, kterou čtečku e-mailu příjemci používají, a typu souboru přílohy nemusí být někteří příjemci schopni přílohu přečíst. Pro klienty, kteří nemohou zobrazit přílohu v původní podobě, můžete pomocí vlastnosti zadat alternativní zobrazení MailMessage.AlternateViews .

V rozhraní .NET Framework můžete pomocí konfiguračních souborů aplikace nebo počítače zadat výchozí hodnoty hostitele, portu a přihlašovacích údajů pro všechny SmtpClient objekty. Další informace najdete v tématu <element mailSettings> (nastavení sítě). .NET Core nepodporuje nastavení výchozích hodnot. Jako alternativní řešení je nutné nastavit příslušné vlastnosti přímo na SmtpClient .

Pokud chcete odeslat e-mailovou zprávu a zablokovat ji při čekání na odeslání e-mailu na server SMTP, použijte jednu ze synchronních Send metod. Pokud chcete, aby hlavní vlákno vašeho programu pokračovalo v provádění během přenosu e-mailu, použijte jednu z asynchronních SendAsync metod. Událost SendCompleted je vyvolána po SendAsync dokončení operace. Chcete-li tuto událost přijmout, musíte přidat delegáta SendCompletedEventHandler do SendCompleted. Delegát SendCompletedEventHandler musí odkazovat na metodu zpětného volání, která zpracovává oznámení událostí SendCompleted . Pokud chcete zrušit asynchronní přenos e-mailů, použijte metodu SendAsyncCancel .

Poznámka

Pokud probíhá přenos e-mailu a vy zavoláte SendAsync nebo Send znovu zavoláte, obdržíte zprávu InvalidOperationException.

Připojení vytvořené aktuální instancí SmtpClient třídy k serveru SMTP může být znovu použito, pokud aplikace chce odeslat více zpráv na stejný server SMTP. To je užitečné zejména v případě, že se používá ověřování nebo šifrování navazují připojení k serveru SMTP. Proces ověřování a navazování relace PROTOKOLU TLS může být nákladný. Požadavek na opětovné navázání připojení pro každou zprávu při odesílání velkého množství e-mailů na stejný server SMTP může mít významný dopad na výkon. Existuje celá řada hromadných e-mailových aplikací, které odesílají e-mailové aktualizace stavu, distribuce bulletinů nebo e-mailová upozornění. Mnoho e-mailových klientských aplikací také podporuje off-line režim, ve kterém uživatelé můžou vytvářet mnoho e-mailových zpráv, které se odesílají později při navázání připojení k serveru SMTP. Je typické, že e-mailový klient odesílá všechny zprávy SMTP na konkrétní server SMTP (poskytovaný poskytovatelem internetových služeb), který pak předá tento e-mail jiným serverům SMTP.

Implementace SmtpClient třídy sdružuje připojení SMTP, aby se zabránilo režii opětovného navazování připojení pro každou zprávu ke stejnému serveru. Aplikace může znovu použít stejný SmtpClient objekt k odesílání mnoha různých e-mailů na stejný server SMTP a na mnoho různých serverů SMTP. V důsledku toho neexistuje způsob, jak určit, kdy je aplikace dokončena s použitím objektu SmtpClient a měla by se vyčistit.

Když je relace SMTP dokončena a klient chce ukončit připojení, musí na server odeslat zprávu QUIT, která znamená, že nemá žádné další zprávy k odeslání. To umožňuje serveru uvolnit prostředky přidružené k připojení z klienta a zpracovat zprávy odeslané klientem.

Třída SmtpClient nemá žádnou Finalize metodu, takže aplikace musí volat Dispose , aby explicitně uvolnila prostředky. Metoda Dispose iteruje všechna navázaná připojení k serveru SMTP zadanému Host ve vlastnosti a odešle zprávu QUIT následovanou řádném ukončením připojení TCP. Metoda Dispose také uvolní nespravované prostředky používané Socket a volitelně odstraní spravované prostředky.

Až skončíte s používáním , zavolejte Dispose ho.SmtpClient Metoda Dispose ponechá objekt SmtpClient v nepoužitelném stavu. Po volání Disposeje nutné uvolnit všechny odkazy na SmtpClient , aby systém uvolňování paměti mohl uvolnit paměť, která SmtpClient byla obsazena.

Konstruktory

SmtpClient()

Inicializuje novou instanci třídy pomocí nastavení konfiguračního SmtpClient souboru.

SmtpClient(String)

Inicializuje novou instanci SmtpClient třídy, která odesílá e-mail pomocí zadaného serveru SMTP.

SmtpClient(String, Int32)

Inicializuje novou instanci SmtpClient třídy, která odesílá e-mail pomocí zadaného serveru SMTP a portu.

Vlastnosti

ClientCertificates

Určete, které certifikáty se mají použít k navázání připojení SSL (Secure Sockets Layer).

Credentials

Získá nebo nastaví přihlašovací údaje použité k ověření odesílatele.

DeliveryFormat

Získá nebo nastaví formát doručení používaný SmtpClient k odeslání e-mailu.

DeliveryMethod

Určuje způsob zpracování odchozích e-mailových zpráv.

EnableSsl

Určete, jestli se SmtpClient k šifrování připojení používá protokol SSL (Secure Sockets Layer).

Host

Získá nebo nastaví název nebo IP adresu hostitele používaného pro transakce SMTP.

PickupDirectoryLocation

Získá nebo nastaví složku, do které aplikace ukládají poštovní zprávy, aby byly zpracovány místním serverem SMTP.

Port

Získá nebo nastaví port používaný pro transakce SMTP.

ServicePoint

Získá síťové připojení použité k přenosu e-mailové zprávy.

TargetName

Získá nebo nastaví název poskytovatele služeb (SPN) pro ověřování při použití rozšířené ochrany.

Timeout

Získá nebo nastaví hodnotu, která určuje dobu, po které synchronní Send volání vyprší.

UseDefaultCredentials

Získá nebo nastaví Boolean hodnotu, která určuje, zda DefaultCredentials jsou odesílány s požadavky.

Metody

Dispose()

Odešle zprávu QUIT serveru SMTP, řádně ukončí připojení TCP a uvolní všechny prostředky používané aktuální instancí SmtpClient třídy.

Dispose(Boolean)

Odešle zprávu QUIT serveru SMTP, řádně ukončí připojení TCP, uvolní všechny prostředky používané aktuální instancí SmtpClient třídy a volitelně odstraní spravované prostředky.

Equals(Object)

Určí, zda se zadaný objekt rovná aktuálnímu objektu.

(Zděděno od Object)
GetHashCode()

Slouží jako výchozí hashovací funkce.

(Zděděno od Object)
GetType()

Získá aktuální Type instanci.

(Zděděno od Object)
MemberwiseClone()

Vytvoří mělkou kopii aktuálního Objectsouboru .

(Zděděno od Object)
OnSendCompleted(AsyncCompletedEventArgs)

SendCompleted Vyvolá událost.

Send(MailMessage)

Odešle zadanou zprávu serveru SMTP k doručení.

Send(String, String, String, String)

Odešle zadanou e-mailovou zprávu serveru SMTP k doručení. Odesílatel, příjemci, předmět a text zprávy se zadají pomocí String objektů.

SendAsync(MailMessage, Object)

Odešle zadanou e-mailovou zprávu serveru SMTP k doručení. Tato metoda neblokuje volající vlákno a umožňuje volajícímu předat objekt metodě, která je vyvolána po dokončení operace.

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

Odešle e-mailovou zprávu serveru SMTP k doručení. Odesílatel, příjemci, předmět a text zprávy se zadají pomocí String objektů. Tato metoda neblokuje volající vlákno a umožňuje volajícímu předat objekt metodě, která je vyvolána po dokončení operace.

SendAsyncCancel()

Zruší asynchronní operaci odeslání e-mailové zprávy.

SendMailAsync(MailMessage)

Odešle zadanou zprávu serveru SMTP k doručení jako asynchronní operaci.

SendMailAsync(MailMessage, CancellationToken)

Odešle zadanou zprávu serveru SMTP k doručení jako asynchronní operaci.

SendMailAsync(String, String, String, String)

Odešle zadanou zprávu serveru SMTP k doručení jako asynchronní operaci. Odesílatel, příjemci, předmět a text zprávy se zadají pomocí String objektů.

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

Odešle zadanou zprávu na server SMTP k doručení jako asynchronní operaci pomocí zadaného odesílatele, příjemců, předmětu a základního řetězce.

ToString()

Vrátí řetězec, který představuje aktuální objekt.

(Zděděno od Object)

Událost

SendCompleted

Nastane při dokončení operace asynchronního odeslání e-mailu.

Platí pro

Viz také