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í.
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. |