SmtpClient Osztály
Definíció
Fontos
Egyes információk olyan, kiadás előtti termékekre vonatkoznak, amelyek a kiadásig még jelentősen módosulhatnak. A Microsoft nem vállal kifejezett vagy törvényi garanciát az itt megjelenő információért.
E-mailt küld a Simple Mail Transfer Protocol (SMTP) használatával. Ez SmtpClient a típus nem ajánlott az új fejlesztéshez; további információkért lásd a Megjegyzések szakaszt.
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
- Öröklődés
-
SmtpClient
- Attribútumok
- Megvalósítás
Példák
Az alábbi példakód egy e-mail aszinkron küldését mutatja be.
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
Megjegyzések
Az SmtpClient osztály e-mail küldésére szolgál egy SMTP-kiszolgálónak kézbesítés céljából. Az SMTP protokoll az RFC 2821-ben van definiálva, amely a következő címen https://www.ietf.orgérhető el: .
Important
Nem javasoljuk, hogy az SmtpClient osztályt új fejlesztéshez használja, mert SmtpClient nem támogat sok modern protokollt. Használja inkább a MailKitet vagy más kódtárakat. További információ: SmtpClient nem használható.
Az SmtpClient osztály a következő:
- A .NET Standard 2.0-s és újabb verzióiban szerepel, ezért minden olyan .NET implementáció részét kell képeznie, amely támogatja ezeket a verziókat.
- .NET Framework 4-ben és .NET Framework 4.8-on keresztül használható.
- Használható .NET (Core), de használata nem ajánlott.
Az alábbi táblázatban látható osztályok a használatával küldhető SmtpCliente-mailek létrehozására szolgálnak.
| osztály | Leírás |
|---|---|
| Attachment | Fájlmellékleteket jelöl. Ebben az osztályban fájlokat, streameket vagy szöveget csatolhat egy e-mailhez. |
| MailAddress | A feladó és a címzett e-mail-címét jelöli. |
| MailMessage | Egy e-mail-üzenetet jelöl. |
Ha e-mail-üzenetet szeretne létrehozni és küldeni a használatával SmtpClient, meg kell adnia a következő információkat:
- Az e-mailek küldéséhez használt SMTP-gazdakiszolgáló. Tekintse meg a tulajdonságokat és Host a Port tulajdonságokat.
- Hitelesítő adatok hitelesítéshez, ha az SMTP-kiszolgáló szükséges. Tekintse meg a tulajdonságot Credentials .
- A feladó e-mail-címe. Tekintse meg a Send paramétert használó metódusokat és SendAsync metódusokat
from. Tekintse meg a tulajdonságot MailMessage.From is. - A címzettek e-mail-címe vagy címe. Tekintse meg a Send paramétert használó metódusokat és SendAsync metódusokat
recipient. Tekintse meg a tulajdonságot MailMessage.To is. - Az üzenet tartalma. Tekintse meg a Send paramétert használó metódusokat és SendAsync metódusokat
body. Tekintse meg a tulajdonságot MailMessage.Body is.
Ha e-mail-mellékletet szeretne mellékelni, először hozza létre a mellékletet az Attachment osztály használatával, majd adja hozzá az üzenethez a MailMessage.Attachments tulajdonság használatával. A címzettek által használt e-mail-olvasótól és a melléklet fájltípusától függően előfordulhat, hogy egyes címzettek nem tudják elolvasni a mellékletet. Azoknak az ügyfeleknek, amelyek nem tudják megjeleníteni a mellékletet az eredeti formájukban, alternatív nézeteket is megadhat a MailMessage.AlternateViews tulajdonság használatával.
A .NET-keretrendszerben az alkalmazás- vagy gépkonfigurációs fájlokkal megadhatja az összes SmtpClient objektum alapértelmezett gazdagép-, port- és hitelesítőadat-értékeit. További információ: <mailSettings> Elem (Hálózati beállítások). .NET Core nem támogatja az alapértelmezett beállításokat. Kerülő megoldásként közvetlenül kell beállítania a releváns tulajdonságokat SmtpClient .
Ha el szeretné küldeni az e-mailt, és blokkolni szeretné az e-mail smtp-kiszolgálóra való továbbítását, használja az egyik szinkron Send metódust. Annak érdekében, hogy a program fő szála továbbra is végrehajthassa a végrehajtást az e-mail továbbítása közben, használja az egyik aszinkron SendAsync metódust. Az SendCompleted esemény akkor jön létre, amikor egy SendAsync művelet befejeződik. Az esemény fogadásához hozzá kell adnia egy meghatalmazottat SendCompletedEventHandler a programhoz SendCompleted. A SendCompletedEventHandler meghatalmazottnak egy visszahívási módszerre kell hivatkoznia, amely kezeli az eseményekről szóló SendCompleted értesítéseket. Az aszinkron e-mail-továbbítás megszakításához használja a metódust SendAsyncCancel .
Note
Ha egy e-mail-továbbítás folyamatban van, és ön hívja SendAsync vagy Send újra, kapni fog egy InvalidOperationException.
Az osztály aktuális példánya SmtpClient által létrehozott kapcsolat az SMTP-kiszolgálóval újra használható, ha egy alkalmazás több üzenetet szeretne küldeni ugyanarra az SMTP-kiszolgálóra. Ez különösen akkor hasznos, ha hitelesítés vagy titkosítás használatával létesít kapcsolatot az SMTP-kiszolgálóval. A TLS-munkamenet hitelesítésének és létrehozásának folyamata költséges műveletek lehetnek. A nagy mennyiségű e-mail ugyanazon SMTP-kiszolgálóra való küldésekor az egyes üzenetekhez való újracsatlakozás követelménye jelentős hatással lehet a teljesítményre. Számos nagy mennyiségű e-mail-alkalmazás küld e-mail-állapotfrissítéseket, hírlevél-disztribúciókat vagy e-mail-riasztásokat. Emellett számos levelezőügyfél-alkalmazás támogatja az off-line módot is, ahol a felhasználók számos e-mailt írhatnak, amelyeket később küldenek az SMTP-kiszolgálóval való kapcsolat létesítésekor. Az e-mail-ügyfél általában az összes SMTP-üzenetet egy adott SMTP-kiszolgálóra küldi (amelyet az internetszolgáltató biztosít), majd továbbítja ezt az e-mailt más SMTP-kiszolgálóknak.
Az SmtpClient osztály implementációja az SMTP-kapcsolatokat készletezi, így elkerülhető, hogy minden üzenethez újra létrejöjjön egy kapcsolat ugyanarra a kiszolgálóra. Az alkalmazások ugyanazt az SmtpClient objektumot használhatják arra, hogy sok különböző e-mailt küldjenek ugyanahhoz az SMTP-kiszolgálóhoz és számos különböző SMTP-kiszolgálóhoz. Ennek eredményeképpen nem lehet megállapítani, hogy egy alkalmazás mikor lett befejezve az SmtpClient objektum használatával, és meg kell tisztítani.
Ha egy SMTP-munkamenet befejeződött, és az ügyfél meg szeretné szüntetni a kapcsolatot, egy QUIT üzenetet kell küldenie a kiszolgálónak, amely jelzi, hogy nincs több elküldendő üzenete. Ez lehetővé teszi a kiszolgáló számára, hogy felszabadítsa a kapcsolathoz társított erőforrásokat az ügyféltől, és feldolgozhassa az ügyfél által küldött üzeneteket.
Az SmtpClient osztálynak nincs Finalize metódusa, ezért az alkalmazásnak fel kell hívnia Dispose az erőforrások explicit felszabadítására. A Dispose metódus végigvezeti a tulajdonságban Host megadott SMTP-kiszolgálóhoz létesített összes kapcsolaton, és egy QUIT üzenetet küld, amelyet a TCP-kapcsolat kecses lezárása követ. A Dispose metódus a felügyelt erőforrások által Socket használt nem felügyelt erőforrásokat is felszabadítja, és opcionálisan a felügyelt erőforrásokat is megsemmisíti.
HívásDispose, ha befejezte a használatát.SmtpClient A Dispose metódus használhatatlan állapotban hagyja a SmtpClient metódust. A hívás Disposeután fel kell szabadítania az összes hivatkozást a SmtpClient szemétgyűjtőre, hogy visszanyerhesse a memóriát, amelyet az SmtpClient éppen foglalt.
Konstruktorok
| Name | Description |
|---|---|
| SmtpClient() |
Inicializálja az osztály új példányát a SmtpClient konfigurációs fájlbeállítások használatával. |
| SmtpClient(String, Int32) |
Inicializálja az SmtpClient osztály új példányát, amely a megadott SMTP-kiszolgáló és port használatával küld e-mailt. |
| SmtpClient(String) |
Inicializálja az SmtpClient osztály új példányát, amely a megadott SMTP-kiszolgáló használatával küld e-mailt. |
Tulajdonságok
| Name | Description |
|---|---|
| ClientCertificates |
Adja meg, hogy mely tanúsítványokat kell használni a Secure Sockets Layer (SSL) kapcsolat létrehozásához. |
| Credentials |
Lekéri vagy beállítja a feladó hitelesítéséhez használt hitelesítő adatokat. |
| DeliveryFormat |
Lekéri vagy beállítja az e-mailek küldéséhez SmtpClient használt kézbesítési formátumot. |
| DeliveryMethod |
Meghatározza, hogy a rendszer hogyan kezelje a kimenő e-maileket. |
| EnableSsl |
Adja meg, hogy a SmtpClient secure Sockets Layer (SSL) használatával titkosítja-e a kapcsolatot. |
| Host |
Lekéri vagy beállítja az SMTP-tranzakciókhoz használt gazdagép nevét vagy IP-címét. |
| PickupDirectoryLocation |
Lekéri vagy beállítja azt a mappát, amelyben az alkalmazások mentik az e-maileket, hogy a helyi SMTP-kiszolgáló feldolgozhassa őket. |
| Port |
Lekéri vagy beállítja az SMTP-tranzakciókhoz használt portot. |
| ServicePoint |
Lekéri az e-mail továbbításához használt hálózati kapcsolatot. |
| TargetName |
Lekéri vagy beállítja a szolgáltató nevét (SPN) a hitelesítéshez kiterjesztett védelem használata esetén. |
| Timeout |
Lekéri vagy beállít egy értéket, amely megadja azt az időt, amely után egy szinkron Send hívás túllépi az időkorlátot. |
| UseDefaultCredentials |
Lekéri vagy beállítja Boolean azt az értéket, amely meghatározza, hogy a rendszer kérésekkel küldi-e el azokat DefaultCredentials . |
Metódusok
| Name | Description |
|---|---|
| Dispose() |
Kilépési üzenetet küld az SMTP-kiszolgálónak, zökkenőmentesen megszakítja a TCP-kapcsolatot, és felszabadítja az osztály aktuális példánya által használt összes erőforrást SmtpClient . |
| Dispose(Boolean) |
QUIT üzenetet küld az SMTP-kiszolgálónak, kecsesen megszakítja a TCP-kapcsolatot, felszabadítja az SmtpClient osztály aktuális példánya által használt összes erőforrást, és opcionálisan megsemmisíti a felügyelt erőforrásokat. |
| Equals(Object) |
Meghatározza, hogy a megadott objektum egyenlő-e az aktuális objektummal. (Öröklődés forrása Object) |
| GetHashCode() |
Ez az alapértelmezett kivonatoló függvény. (Öröklődés forrása Object) |
| GetType() |
Lekéri az Type aktuális példányt. (Öröklődés forrása Object) |
| MemberwiseClone() |
Az aktuális Objectpéldány sekély másolatát hozza létre. (Öröklődés forrása Object) |
| OnSendCompleted(AsyncCompletedEventArgs) |
Az eseményt emeli SendCompleted ki. |
| Send(MailMessage) |
Elküldi a megadott üzenetet egy SMTP-kiszolgálónak kézbesítés céljából. |
| Send(String, String, String, String) |
Elküldi a megadott e-mailt egy SMTP-kiszolgálónak kézbesítés céljából. Az üzenet feladója, a címzettek, a tárgy és az üzenettörzs objektumokkal String van megadva. |
| SendAsync(MailMessage, Object) |
Elküldi a megadott e-mailt egy SMTP-kiszolgálónak kézbesítés céljából. Ez a metódus nem blokkolja a hívó szálat, és lehetővé teszi, hogy a hívó átadjon egy objektumot a művelet befejezésekor meghívott metódusnak. |
| SendAsync(String, String, String, String, Object) |
E-mailt küld egy SMTP-kiszolgálónak kézbesítés céljából. Az üzenet feladója, a címzettek, a tárgy és az üzenettörzs objektumokkal String van megadva. Ez a metódus nem blokkolja a hívó szálat, és lehetővé teszi, hogy a hívó átadjon egy objektumot a művelet befejezésekor meghívott metódusnak. |
| SendAsyncCancel() |
Megszakít egy aszinkron műveletet egy e-mail küldéséhez. |
| SendMailAsync(MailMessage, CancellationToken) |
A megadott üzenetet aszinkron műveletként küldi el egy SMTP-kiszolgálónak kézbesítés céljából. |
| SendMailAsync(MailMessage) |
A megadott üzenetet aszinkron műveletként küldi el egy SMTP-kiszolgálónak kézbesítés céljából. |
| SendMailAsync(String, String, String, String, CancellationToken) |
A megadott üzenetet aszinkron műveletként küldi el egy SMTP-kiszolgálónak a megadott feladó, címzettek, tárgy és törzssztringek használatával. |
| SendMailAsync(String, String, String, String) |
A megadott üzenetet aszinkron műveletként küldi el egy SMTP-kiszolgálónak kézbesítés céljából. Az üzenet feladója, a címzettek, a tárgy és az üzenettörzs objektumokkal String van megadva. |
| ToString() |
Az aktuális objektumot jelképező sztringet ad vissza. (Öröklődés forrása Object) |
esemény
| Name | Description |
|---|---|
| SendCompleted |
Az aszinkron e-mail-küldési művelet befejeződésekor fordul elő. |