SmtpClient Klass

Definition

Skickar e-post med hjälp av SMTP (Simple Mail Transfer Protocol). Typen SmtpClient rekommenderas inte för ny utveckling. Mer information finns i avsnittet Anmärkningar.

public ref class SmtpClient
public ref class SmtpClient : IDisposable
public class SmtpClient
public class SmtpClient : IDisposable
type SmtpClient = class
type SmtpClient = class
    interface IDisposable
Public Class SmtpClient
Public Class SmtpClient
Implements IDisposable
Arv
SmtpClient
Implementeringar

Exempel

Följande kodexempel visar hur du skickar ett e-postmeddelande asynkront.


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

Kommentarer

Klassen SmtpClient används för att skicka e-post till en SMTP-server för leverans. SMTP-protokollet definieras i RFC 2821, som är tillgängligt på https://www.ietf.org.

Important

Vi rekommenderar inte att du använder SmtpClient klassen för ny utveckling eftersom SmtpClient den inte stöder många moderna protokoll. Använd MailKit eller andra bibliotek i stället. Mer information finns i SmtpClient bör inte användas.

Klassen SmtpClient är:

  • Ingår i .NET Standard 2.0 och senare versioner och måste därför ingå i alla .NET implementering som stöder dessa versioner.
  • Finns och kan användas i .NET Framework 4 via .NET Framework 4.8.
  • Kan användas i .NET (Core), men dess användning rekommenderas inte.

Klasserna som visas i följande tabell används för att skapa e-postmeddelanden som kan skickas med .SmtpClient

Class Description
Attachment Representerar bifogade filer. Med den här klassen kan du bifoga filer, strömmar eller text till ett e-postmeddelande.
MailAddress Representerar avsändarens och mottagarnas e-postadress.
MailMessage Representerar ett e-postmeddelande.

Om du vill skapa och skicka ett e-postmeddelande med hjälp SmtpClientav måste du ange följande information:

  • SMTP-värdservern som du använder för att skicka e-post. Host Se egenskaperna ochPort.
  • Autentiseringsuppgifter, om det krävs av SMTP-servern. Se egenskapen Credentials .
  • Avsändarens e-postadress. Se metoderna Send och SendAsync som tar en from parameter. Se även egenskapen MailMessage.From .
  • Mottagarnas e-postadress eller adresser. Se metoderna Send och SendAsync som tar en recipient parameter. Se även egenskapen MailMessage.To .
  • Meddelandeinnehållet. Se metoderna Send och SendAsync som tar en body parameter. Se även egenskapen MailMessage.Body .

Om du vill inkludera en bifogad fil med ett e-postmeddelande skapar du först den bifogade filen med hjälp Attachment av klassen och lägger sedan till den i meddelandet med hjälp MailMessage.Attachments av egenskapen . Beroende på vilken e-postläsare som används av mottagarna och filtypen för den bifogade filen kanske vissa mottagare inte kan läsa den bifogade filen. För klienter som inte kan visa den bifogade filen i sitt ursprungliga formulär kan du ange alternativa vyer med hjälp MailMessage.AlternateViews av egenskapen .

I .NET Framework kan du använda program- eller datorkonfigurationsfilerna för att ange standardvärden för värd, port och autentiseringsuppgifter för alla SmtpClient objekt. Mer information finns i <mailSettings-element> (nätverksinställningar). .NET Core stöder inte standardinställningar. Som en lösning måste du ange relevanta egenskaper SmtpClient direkt.

Om du vill skicka e-postmeddelandet och blockera i väntan på att e-postmeddelandet ska skickas till SMTP-servern använder du någon av de synkrona Send metoderna. Om du vill tillåta att programmets huvudtråd fortsätter att köras medan e-postmeddelandet överförs använder du någon av de asynkrona SendAsync metoderna. Händelsen SendCompleted utlöses när en SendAsync åtgärd slutförs. Om du vill ta emot den här händelsen måste du lägga till ett SendCompletedEventHandler ombud i SendCompleted. Ombudet SendCompletedEventHandler måste referera till en motringningsmetod som hanterar meddelanden om SendCompleted händelser. Om du vill avbryta en asynkron e-postöverföring använder du SendAsyncCancel metoden .

Note

Om det pågår en e-postöverföring och du ringer SendAsync eller Send igen får du en InvalidOperationException.

Anslutningen som upprättas av den aktuella instansen SmtpClient av klassen till SMTP-servern kan återanvändas om ett program vill skicka flera meddelanden till samma SMTP-server. Detta är särskilt användbart när autentisering eller kryptering används för att upprätta en anslutning till SMTP-servern. Det kan vara dyrt att autentisera och upprätta en TLS-session. Ett krav på att återupprätta en anslutning för varje meddelande när du skickar en stor mängd e-post till samma SMTP-server kan ha en betydande inverkan på prestandan. Det finns ett antal e-postprogram med stora volymer som skickar uppdateringar av e-poststatus, nyhetsbrevsdistributioner eller e-postaviseringar. Många e-postklientprogram stöder också ett off-line-läge där användarna kan skapa många e-postmeddelanden som skickas senare när en anslutning till SMTP-servern upprättas. Det är vanligt att en e-postklient skickar alla SMTP-meddelanden till en specifik SMTP-server (tillhandahålls av Internetleverantören) som sedan vidarebefordrar det här e-postmeddelandet till andra SMTP-servrar.

SMTP-anslutningarna SmtpClient för klassimplementeringspooler så att de kan undvika omkostnaderna för att återupprätta en anslutning för varje meddelande till samma server. Ett program kan återanvända samma SmtpClient objekt för att skicka många olika e-postmeddelanden till samma SMTP-server och till många olika SMTP-servrar. Därför finns det inget sätt att avgöra när ett program är klart med objektet SmtpClient och det bör rensas.

När en SMTP-session är klar och klienten vill avsluta anslutningen måste den skicka ett QUIT-meddelande till servern för att indikera att den inte har fler meddelanden att skicka. På så sätt kan servern frigöra resurser som är associerade med anslutningen från klienten och bearbeta de meddelanden som skickades av klienten.

Klassen SmtpClient har ingen Finalize metod, så ett program måste anropa Dispose för att uttryckligen frigöra resurser. Metoden Dispose itererar genom alla etablerade anslutningar till SMTP-servern som anges i Host egenskapen och skickar ett QUIT-meddelande följt av ett korrekt slut på TCP-anslutningen. Metoden Dispose släpper även de ohanterade resurser som används av Socket och kan också ta bort de hanterade resurserna.

Anropa Dispose när du är klar med .SmtpClient Metoden Dispose lämnar SmtpClient i ett oanvändbart tillstånd. När du har anropat Disposemåste du släppa alla referenser till så att SmtpClient skräpinsamlaren kan frigöra det minne som SmtpClient upptogs.

Konstruktorer

Name Description
SmtpClient()

Initierar en ny instans av SmtpClient klassen med hjälp av konfigurationsfilinställningar.

SmtpClient(String, Int32)

Initierar en ny instans av SmtpClient klassen som skickar e-post med hjälp av den angivna SMTP-servern och porten.

SmtpClient(String)

Initierar en ny instans av SmtpClient klassen som skickar e-post med hjälp av den angivna SMTP-servern.

Egenskaper

Name Description
ClientCertificates

Ange vilka certifikat som ska användas för att upprätta SSL-anslutningen (Secure Sockets Layer).

Credentials

Hämtar eller anger de autentiseringsuppgifter som används för att autentisera avsändaren.

DeliveryFormat

Hämtar eller anger det leveransformat som används av SmtpClient för att skicka e-post.

DeliveryMethod

Anger hur utgående e-postmeddelanden ska hanteras.

EnableSsl

Ange om SmtpClient använder SSL (Secure Sockets Layer) för att kryptera anslutningen.

Host

Hämtar eller anger namnet eller IP-adressen för värden som används för SMTP-transaktioner.

PickupDirectoryLocation

Hämtar eller anger mappen där program sparar e-postmeddelanden som ska bearbetas av den lokala SMTP-servern.

Port

Hämtar eller anger den port som används för SMTP-transaktioner.

ServicePoint

Hämtar nätverksanslutningen som används för att överföra e-postmeddelandet.

TargetName

Hämtar eller anger tjänstproviderns namn (SPN) som ska användas för autentisering när utökat skydd används.

Timeout

Hämtar eller anger ett värde som anger hur lång tid ett synkront Send samtal överskrider tidsgränsen.

UseDefaultCredentials

Hämtar eller anger ett Boolean värde som styr om DefaultCredentials skickas med begäranden.

Metoder

Name Description
Dispose()

Skickar ett QUIT-meddelande till SMTP-servern, avslutar TCP-anslutningen på ett korrekt sätt och släpper alla resurser som används av den aktuella instansen SmtpClient av klassen.

Dispose(Boolean)

Skickar ett QUIT-meddelande till SMTP-servern, avslutar TCP-anslutningen på ett korrekt sätt, släpper alla resurser som används av den aktuella instansen SmtpClient av klassen och tar eventuellt bort de hanterade resurserna.

Equals(Object)

Avgör om det angivna objektet är lika med det aktuella objektet.

(Ärvd från Object)
GetHashCode()

Fungerar som standard-hash-funktion.

(Ärvd från Object)
GetType()

Hämtar den aktuella instansen Type .

(Ärvd från Object)
MemberwiseClone()

Skapar en ytlig kopia av den aktuella Object.

(Ärvd från Object)
OnSendCompleted(AsyncCompletedEventArgs)

Genererar händelsen SendCompleted .

Send(MailMessage)

Skickar det angivna meddelandet till en SMTP-server för leverans.

Send(String, String, String, String)

Skickar det angivna e-postmeddelandet till en SMTP-server för leverans. Meddelandesändare, mottagare, ämne och meddelandetext anges med hjälp av String objekt.

SendAsync(MailMessage, Object)

Skickar det angivna e-postmeddelandet till en SMTP-server för leverans. Den här metoden blockerar inte den anropande tråden och tillåter anroparen att skicka ett objekt till den metod som anropas när åtgärden slutförs.

SendAsync(String, String, String, String, Object)

Skickar ett e-postmeddelande till en SMTP-server för leverans. Meddelandesändare, mottagare, ämne och meddelandetext anges med hjälp av String objekt. Den här metoden blockerar inte den anropande tråden och tillåter anroparen att skicka ett objekt till den metod som anropas när åtgärden slutförs.

SendAsyncCancel()

Avbryter en asynkron åtgärd för att skicka ett e-postmeddelande.

SendMailAsync(MailMessage)

Skickar det angivna meddelandet till en SMTP-server för leverans som en asynkron åtgärd.

SendMailAsync(String, String, String, String)

Skickar det angivna meddelandet till en SMTP-server för leverans som en asynkron åtgärd. Meddelandesändare, mottagare, ämne och meddelandetext anges med hjälp av String objekt.

ToString()

Returnerar en sträng som representerar det aktuella objektet.

(Ärvd från Object)

Händelser

Name Description
SendCompleted

Inträffar när en asynkron e-postsändningsåtgärd slutförs.

Gäller för

Se även