SmtpClient Třída
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Odešle e-mail pomocí protokolu SMTP (Simple Mail Transfer Protocol). Typ SmtpClient se nedoporučuje pro nový vývoj. Další informace najdete v části Poznámky.
public ref class SmtpClient : IDisposable
public ref class SmtpClient
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
public class SmtpClient : IDisposable
public class SmtpClient : IDisposable
public class SmtpClient
[<System.Runtime.Versioning.UnsupportedOSPlatform("browser")>]
type SmtpClient = class
interface IDisposable
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í odeslání e-mailové zprávy.
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)
{
client.SendAsyncCancel();
}
// Clean up.
message.Dispose();
client.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()
client.Dispose()
Console.WriteLine("Goodbye.")
End Sub
End Class
End Namespace
Poznámky
Třída SmtpClient slouží k odesílání e-mailů na server SMTP pro doručování. Protokol SMTP je definován v RFC 2821, který je k dispozici na https://www.ietf.orgadrese .
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 naleznete v tématu SmtpClient by nemělo být použito.
Třída SmtpClient 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.
- Prezentace a lze ji použít v rozhraní .NET Framework 4 až .NET Framework 4.8.
- Použitelné v .NET (Core), ale jeho použití se nedoporučuje.
Třídy uvedené v následující tabulce slouží k vytvoření e-mailových zpráv, které lze odeslat pomocí SmtpClient.
| Třída | Description |
|---|---|
| Attachment | Představuje přílohy souborů. Tato třída umožňuje připojit soubory, streamy nebo text k e-mailové zprávě. |
| 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í SmtpClient, je nutné zadat následující informace:
- Hostitelský server SMTP, který používáte k odesílání e-mailů. Podívejte se na vlastnosti Host a Port vlastnosti.
- 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 SendSendAsync metody, které přebírají
fromparametr. Také se podívejte na MailMessage.From vlastnost. - E-mailová adresa nebo adresy příjemců Podívejte se na SendSendAsync metody, které přebírají
recipientparametr. Také se podívejte na MailMessage.To vlastnost. - Obsah zprávy. Podívejte se na SendSendAsync metody, které přebírají
bodyparametr. Také se podívejte na MailMessage.Body vlastnost.
Pokud chcete zahrnout přílohu s e-mailovou zprávou, nejprve vytvořte přílohu pomocí Attachment třídy a pak ji přidejte do zprávy pomocí MailMessage.Attachments vlastnosti. V závislosti na tom, jakou čtečku e-mailu používají příjemci a typ 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ím formuláři, 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 určit 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 nastavit relevantní vlastnosti SmtpClient přímo.
Pokud chcete odeslat e-mailovou zprávu a blokovat 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 programu pokračovalo v provádění při přenosu e-mailu, použijte jednu z asynchronních SendAsync metod. Událost SendCompleted se vyvolá po SendAsync dokončení operace. Chcete-li přijmout tuto událost, musíte přidat SendCompletedEventHandler delegáta do SendCompleted. Delegát SendCompletedEventHandler musí odkazovat na metodu zpětného volání, která zpracovává oznámení SendCompleted událostí. Pokud chcete zrušit asynchronní přenos e-mailu, použijte metodu SendAsyncCancel .
Poznámka:
Pokud probíhá přenos e-mailu a budete volat SendAsync nebo Send znovu, 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 k navázání připojení k serveru SMTP používá ověřování nebo šifrování. Proces ověřování a vytvoření 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 řada e-mailových aplikací s velkým objemem, které odesílají aktualizace stavu e-mailu, distribuce bulletinů nebo e-mailové výstrahy. Mnoho e-mailových klientských aplikací podporuje také offline režim, kdy uživatelé mohou vytvářet mnoho e-mailových zpráv, které se posílají později při navázání připojení k serveru SMTP. E-mailový klient obvykle odesílá všechny zprávy SMTP na konkrétní server SMTP (poskytovaný poskytovatelem internetových služeb), který pak tento e-mail předává jiným serverům SMTP.
Implementační SmtpClient třída fondy připojení SMTP, aby se zabránilo režii opětovného navazování připojení pro každou zprávu na stejném 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 pomocí objektu SmtpClient a měla by být vyčištěna.
Po dokončení relace SMTP a klient chce ukončit připojení, musí na server odeslat zprávu QUIT, která indikuje, ž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ě uvolnit prostředky. Metoda Dispose iteruje všechna navázáná připojení k serveru SMTP zadanému ve Host vlastnosti a odešle zprávu QUIT následovanou řádně ukončením připojení TCP. Metoda Dispose také uvolní nespravované prostředky používané Socket a volitelně odstraní spravované prostředky.
Volání Dispose po dokončení používání funkce SmtpClient. Metoda Dispose ponechá SmtpClient nepoužitelný stav. Po volání Disposeje nutné uvolnit všechny odkazy na, SmtpClient aby systém uvolňování paměti mohl uvolnit paměť, kterou SmtpClient zabírala.
Konstruktory
| Name | Description |
|---|---|
| SmtpClient() |
Inicializuje novou instanci třídy pomocí nastavení konfiguračního SmtpClient souboru. |
| SmtpClient(String, Int32) |
Inicializuje novou instanci SmtpClient třídy, která odesílá e-maily pomocí zadaného serveru SMTP a portu. |
| SmtpClient(String) |
Inicializuje novou instanci SmtpClient třídy, která odesílá e-maily pomocí zadaného serveru SMTP. |
Vlastnosti
| Name | Description |
|---|---|
| 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 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, kde aplikace ukládají poštovní zprávy, které mají být zpracovány místním serverem SMTP. |
| Port |
Získá nebo nastaví port použitý 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 Zprostředkovatele 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 odeslány s požadavky. |
Metody
| Name | Description |
|---|---|
| Dispose() |
Odešle zprávu QUIT na server 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čuje, zda je zadaný objekt roven aktuálnímu objektu. (Zděděno od Object) |
| GetHashCode() |
Slouží jako výchozí funkce hash. (Zděděno od Object) |
| GetType() |
Získá Type aktuální instance. (Zděděno od Object) |
| MemberwiseClone() |
Vytvoří mělkou kopii aktuálního Object. (Zděděno od Object) |
| OnSendCompleted(AsyncCompletedEventArgs) |
SendCompleted Vyvolá událost. |
| Send(MailMessage) |
Odešle zadanou zprávu na server SMTP pro doručení. |
| Send(String, String, String, String) |
Odešle zadanou e-mailovou zprávu na server SMTP pro 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 na server SMTP pro 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 pro 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 pro odeslání e-mailové zprávy. |
| SendMailAsync(MailMessage, CancellationToken) |
Odešle zadanou zprávu na server SMTP pro doručení jako asynchronní operaci. |
| SendMailAsync(MailMessage) |
Odešle zadanou zprávu na server SMTP pro doručení jako asynchronní operaci. |
| SendMailAsync(String, String, String, String, CancellationToken) |
Odešle zadanou zprávu na server SMTP pro doručení jako asynchronní operaci pomocí zadaného odesílatele, příjemců, předmětu a textových řetězců. |
| SendMailAsync(String, String, String, String) |
Odešle zadanou zprávu na server SMTP pro doručení jako asynchronní operaci. Odesílatel zprávy, příjemci, předmět a text zprávy se zadají pomocí String objektů. |
| ToString() |
Vrátí řetězec, který představuje aktuální objekt. (Zděděno od Object) |
Událost
| Name | Description |
|---|---|
| SendCompleted |
Nastane, když se dokončí asynchronní operace odeslání e-mailu. |