Sdílet prostřednictvím


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 odeslání e-mailové zprávy asynchronně.

#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 SmtpClient se 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 vytvoření e-mailových zpráv, které lze odeslat pomocí SmtpClient.

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

Pokud chcete vytvořit a odeslat e-mailovou zprávu pomocí SmtpClient, musíte zadat následující informace:

  • Hostitelský server SMTP, který používáte k odesílání e-mailů. Projděte si Host vlastnosti a Port .

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

  • E-mailová adresa odesílatele. Projděte si 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ů Projděte si Send metody a SendAsync , které přebírají recipient parametr. Podívejte se také na MailMessage.To vlastnost .

  • Obsah zprávy. Projděte si 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ě přidat přílohu, vytvořte nejprve přílohu Attachment pomocí třídy a pak ji přidejte do zprávy pomocí MailMessage.Attachments vlastnosti . V závislosti na čtenáři e-mailu používaném příjemci a typu souboru přílohy nemusí být někteří příjemci schopni přílohu přečíst. Pro klienty, kteří nemůžou zobrazit přílohu v původní podobě, můžete určit alternativní zobrazení pomocí MailMessage.AlternateViews vlastnosti .

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 <mailSettings> – element (nastavení sítě). .NET Core nepodporuje nastavení výchozích hodnot. Jako alternativní řešení musíte příslušné vlastnosti nastavit přímo na SmtpClient .

Pokud chcete odeslat e-mailovou zprávu a blokovat ji při čekání na přenos e-mailu na server SMTP, použijte jednu z synchronních Send metod. Pokud chcete, aby hlavní vlákno vašeho programu pokračovalo v provádění při přenosu e-mailu, použijte jednu z asynchronních SendAsync metod. Událost SendCompleted je vyvolána po SendAsync dokončení operace. Pokud chcete 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 zavoláte SendAsync nebo Send znovu, obdržíte .InvalidOperationException

Připojení navázané aktuální instancí SmtpClient třídy k serveru SMTP lze znovu použít, 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í navazování 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ý vliv na výkon. Existuje řada hromadných e-mailových aplikací, které odesílají e-mailové aktualizace stavu, distribuci bulletinů nebo e-mailová upozornění. Mnoho e-mailových klientských aplikací také podporuje offline režim, ve kterém mohou uživatelé vytvářet mnoho e-mailových zpráv, které se odešlou 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žíváním objektu SmtpClient , a měla by se vyčistit.

Když je relace SMTP dokončena a klient chce ukončit připojení, musí odeslat na server zprávu UKONČENÍ, která bude znamenat, ž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 explicitní uvolnění prostředků. 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ž budete hotovi s použitím příkazu , zavolejte Dispose .SmtpClient Metoda Dispose ponechá objekt SmtpClient v nepoužitelném stavu. Po volání Disposemusíte uvolnit všechny odkazy na SmtpClient objekt, aby systém uvolňování paměti mohl uvolnit paměť, kterou SmtpClient zabírala.

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ý k SmtpClient odeslání e-mailu.

DeliveryMethod

Určuje, jak se budou zpracovávat odchozí e-mailové zprávy.

EnableSsl

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

Host

Získá nebo nastaví název nebo IP adresu hostitele pro transakce SMTP.

PickupDirectoryLocation

Získá nebo nastaví složku, do které aplikace ukládají e-mailové zprávy, které mají být zpracovány místním serverem SMTP.

Port

Získá nebo nastaví port 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žby (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í časový limit.

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í instance 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()

Type Získá z aktuální instance.

(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 zprávy, 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 při dokončení operace.

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

Odešle e-mailovou zprávu na server SMTP k doručení. Odesílatel zprávy, 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 při 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 zprávy, 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 serveru SMTP k doručení jako asynchronní operaci pomocí zadaných řetězců odesílatele, příjemců, předmětu a textu.

ToString()

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

(Zděděno od Object)

Událost

SendCompleted

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

Platí pro

Viz také