SmtpClient Osztály

Definíció

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

A következőre érvényes:

Lásd még