SmtpClient Klass
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
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
fromparameter. Se även egenskapen MailMessage.From . - Mottagarnas e-postadress eller adresser. Se metoderna Send och SendAsync som tar en
recipientparameter. Se även egenskapen MailMessage.To . - Meddelandeinnehållet. Se metoderna Send och SendAsync som tar en
bodyparameter. 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. |