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 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é
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro