SmtpClient Sınıf
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
Basit Posta Aktarım Protokolü(SMTP) kullanarak e-posta gönderir. Yeni SmtpClient geliştirme için tür önerilmez; daha fazla bilgi için Açıklamalar bölümüne bakın.
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
- Devralma
-
SmtpClient
- Öznitelikler
- Uygulamalar
Örnekler
Aşağıdaki kod örneği, zaman uyumsuz olarak bir e-posta iletisi göndermeyi gösterir.
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
Açıklamalar
SmtpClient sınıfı, teslim için smtp sunucusuna e-posta göndermek için kullanılır. SMTP protokolü, konumunda bulunan RFC 2821'de https://www.ietf.orgtanımlanır.
Önemli
Çok sayıda modern protokolü desteklemediğinden sınıfını yeni geliştirme SmtpClient için kullanmanızı SmtpClient önermiyoruz. Bunun yerine MailKit veya diğer kitaplıkları kullanın. Daha fazla bilgi için bkz. SmtpClient kullanılmamalıdır.
sınıfı SmtpClient şöyledir:
- .NET Standard 2.0 ve sonraki sürümlerde yer alır ve bu nedenle bu sürümleri destekleyen herhangi bir .NET uygulamasının parçası olmalıdır.
- .NET Framework 4 ile .NET Framework 4.8 arasında mevcut ve kullanılabilir.
- .NET'te (Core) kullanılabilir, ancak kullanılması önerilmez.
Aşağıdaki tabloda gösterilen sınıflar kullanılarak SmtpClientgönderilebilen e-posta iletileri oluşturmak için kullanılır.
| Sınıf | Açıklama |
|---|---|
| Attachment | Dosya eklerini temsil eder. Bu sınıf, e-posta iletisine dosya, akış veya metin eklemenize olanak tanır. |
| MailAddress | Gönderenin ve alıcıların e-posta adresini temsil eder. |
| MailMessage | E-posta iletisini temsil eder. |
kullanarak SmtpClientbir e-posta iletisi oluşturmak ve göndermek için aşağıdaki bilgileri belirtmeniz gerekir:
- E-posta göndermek için kullandığınız SMTP ana bilgisayar sunucusu. ve Port özelliklerine Host bakın.
- SMTP sunucusu için gerekiyorsa kimlik doğrulaması için kimlik bilgileri. Özelliğine Credentials bakın.
- Gönderenin e-posta adresi.
Send Parametre alan
fromve SendAsync yöntemlerine bakın. Ayrıca özelliğine MailMessage.From bakın. - Alıcıların e-posta adresi veya adresleri.
Send Parametre alan
recipientve SendAsync yöntemlerine bakın. Ayrıca özelliğine MailMessage.To bakın. - İleti içeriği.
Send Parametre alan
bodyve SendAsync yöntemlerine bakın. Ayrıca özelliğine MailMessage.Body bakın.
E-posta iletisine ek eklemek için önce sınıfını Attachment kullanarak eki oluşturun ve ardından özelliğini kullanarak iletiye MailMessage.Attachments ekleyin. Alıcılar tarafından kullanılan e-posta okuyucuya ve ekin dosya türüne bağlı olarak, bazı alıcılar eki okuyamayabilir. Eki özgün biçiminde görüntüleyemeyen istemciler için özelliğini kullanarak MailMessage.AlternateViews alternatif görünümler belirtebilirsiniz.
.NET Framework'te, tüm SmtpClient nesneler için varsayılan konak, bağlantı noktası ve kimlik bilgileri değerlerini belirtmek üzere uygulama veya makine yapılandırma dosyalarını kullanabilirsiniz. Daha fazla bilgi için bkz <. mailSettings> Öğesi (Ağ Ayarları). .NET Core varsayılan ayarları desteklemez. Geçici bir çözüm olarak, ilgili özellikleri doğrudan olarak SmtpClient ayarlamanız gerekir.
E-postanın SMTP sunucusuna iletilmesini beklerken e-posta iletisini göndermek ve engellemek için zaman uyumlu Send yöntemlerden birini kullanın. E-posta iletilirken programınızın ana iş parçacığının yürütülmeye devam etmesi için zaman uyumsuz SendAsync yöntemlerden birini kullanın. bir SendCompleted işlem tamamlandığında olay oluşturulur SendAsync . Bu olayı almak için öğesine bir SendCompletedEventHandler temsilci SendCompletedeklemeniz gerekir. Temsilci, SendCompletedEventHandler olayların bildirimini işleyen bir geri çağırma yöntemine SendCompleted başvurmalıdır. Zaman uyumsuz bir e-posta iletimini SendAsyncCancel iptal etmek için yöntemini kullanın.
Uyarı
Devam eden bir e-posta iletimi varsa ve veya tekrar ararsanız SendAsyncSend , bir InvalidOperationExceptionalırsınız.
Bir uygulama aynı SMTP sunucusuna birden çok ileti göndermek isterse, sınıfın SmtpClient geçerli örneği tarafından SMTP sunucusuna kurulan bağlantı yeniden kullanılabilir. Bu, özellikle kimlik doğrulaması veya şifreleme kullanıldığında SMTP sunucusuna bağlantı kurarken kullanışlıdır. TLS oturumunun kimliğini doğrulama ve oluşturma işlemi pahalı işlemler olabilir. Aynı SMTP sunucusuna büyük miktarda e-posta gönderirken her ileti için yeniden bağlantı kurma gereksinimi, performansı önemli ölçüde etkileyebilir. E-posta durum güncelleştirmelerini, bülten dağıtımlarını veya e-posta uyarılarını gönderen çok sayıda yüksek hacimli e-posta uygulaması vardır. Ayrıca birçok e-posta istemci uygulaması, kullanıcıların SMTP sunucusuna bir bağlantı kurulduğunda daha sonra gönderilen birçok e-posta iletisi oluşturabileceği bir off-line modunu destekler. Bir e-posta istemcisinin tüm SMTP iletilerini belirli bir SMTP sunucusuna (İnternet hizmet sağlayıcısı tarafından sağlanan) göndermesi ve ardından bu e-postayı diğer SMTP sunucularına iletmesi normaldir.
SmtpClient Sınıf uygulaması SMTP bağlantılarını havuza alır, böylece aynı sunucuya yönelik her ileti için yeniden bağlantı kurma yükünü önleyebilir. Bir uygulama aynı SmtpClient SMTP sunucusuna ve birçok farklı SMTP sunucusuna birçok farklı e-posta göndermek için aynı nesneyi yeniden kullanabilir. Sonuç olarak, bir uygulamanın nesnesini kullanmayı ne zaman bitirdiğini ve temizlenmesi gerektiğini belirlemenin SmtpClient bir yolu yoktur.
BIR SMTP oturumu tamamlandığında ve istemci bağlantıyı sonlandırmak istediğinde, gönderilecek başka ileti olmadığını belirtmek için sunucuya bir QUIT iletisi göndermesi gerekir. Bu, sunucunun istemciden bağlantıyla ilişkili kaynakları boşaltmasına ve istemci tarafından gönderilen iletileri işlemesine olanak tanır.
sınıfının SmtpClient yöntemi yoktur Finalize , bu nedenle bir uygulamanın kaynakları açıkça boşaltmak için çağrısı Dispose yapması gerekir. yöntemi, Dispose özelliğinde Host belirtilen SMTP sunucusuna kurulan tüm bağlantılar aracılığıyla yinelenir ve ardından TCP bağlantısını düzgün bir şekilde sonlandıran bir QUIT iletisi gönderir.
Dispose yöntemi ayrıca tarafından Socket kullanılan yönetilmeyen kaynakları serbest bırakır ve isteğe bağlı olarak yönetilen kaynakları atılır.
kullanmayı bitirdiğinizde öğesini çağırın DisposeSmtpClient. yöntemi, Dispose öğesini SmtpClient kullanılamaz durumda bırakır. çağrısından Disposesonra, çöp toplayıcının SmtpClient , yer kaplayan belleği geri kazanabilmesi için tüm başvurularını SmtpClient serbest bırakmanız gerekir.
Oluşturucular
| Name | Description |
|---|---|
| SmtpClient() |
Yapılandırma dosyası ayarlarını kullanarak sınıfının yeni bir örneğini SmtpClient başlatır. |
| SmtpClient(String, Int32) |
Belirtilen SMTP sunucusunu ve bağlantı noktasını kullanarak e-posta gönderen sınıfın yeni bir örneğini SmtpClient başlatır. |
| SmtpClient(String) |
Belirtilen SMTP sunucusunu kullanarak e-posta gönderen sınıfın yeni bir örneğini SmtpClient başlatır. |
Özellikler
| Name | Description |
|---|---|
| ClientCertificates |
Güvenli Yuva Katmanı (SSL) bağlantısı kurmak için hangi sertifikaların kullanılacağını belirtin. |
| Credentials |
Gönderenin kimliğini doğrulamak için kullanılan kimlik bilgilerini alır veya ayarlar. |
| DeliveryFormat |
Tarafından SmtpClient e-posta göndermek için kullanılan teslim biçimini alır veya ayarlar. |
| DeliveryMethod |
Giden e-posta iletilerinin nasıl işleneceğini belirtir. |
| EnableSsl |
öğesinin SmtpClient bağlantıyı şifrelemek için Güvenli Yuva Katmanı (SSL) kullanıp kullanmadığını belirtin. |
| Host |
SMTP işlemleri için kullanılan konağın adını veya IP adresini alır veya ayarlar. |
| PickupDirectoryLocation |
Uygulamaların posta iletilerini yerel SMTP sunucusu tarafından işlenecek şekilde kaydettiği klasörü alır veya ayarlar. |
| Port |
SMTP işlemleri için kullanılan bağlantı noktasını alır veya ayarlar. |
| ServicePoint |
E-posta iletisini iletmek için kullanılan ağ bağlantısını alır. |
| TargetName |
Genişletilmiş koruma kullanılırken kimlik doğrulaması için kullanılacak Hizmet Sağlayıcısı Adını (SPN) alır veya ayarlar. |
| Timeout |
Zaman uyumlu Send çağrının zaman aşımına uğradıktan sonraki süresini belirten bir değer alır veya ayarlar. |
| UseDefaultCredentials |
öğesinin isteklerle gönderilip gönderilmediğini DefaultCredentials denetleyebilen bir Boolean değer alır veya ayarlar. |
Yöntemler
| Name | Description |
|---|---|
| Dispose() |
SMTP sunucusuna bir QUIT iletisi gönderir, TCP bağlantısını düzgün bir şekilde sonlandırır ve sınıfın geçerli örneği SmtpClient tarafından kullanılan tüm kaynakları serbest bırakır. |
| Dispose(Boolean) |
SMTP sunucusuna BIR QUIT iletisi gönderir, TCP bağlantısını düzgün bir şekilde sonlandırır, sınıfın SmtpClient geçerli örneği tarafından kullanılan tüm kaynakları serbest bırakır ve isteğe bağlı olarak yönetilen kaynakları atar. |
| Equals(Object) |
Belirtilen nesnenin geçerli nesneye eşit olup olmadığını belirler. (Devralındığı yer: Object) |
| GetHashCode() |
Varsayılan karma işlevi işlevi görür. (Devralındığı yer: Object) |
| GetType() |
Geçerli örneğin Type alır. (Devralındığı yer: Object) |
| MemberwiseClone() |
Geçerli Objectbasit bir kopyasını oluşturur. (Devralındığı yer: Object) |
| OnSendCompleted(AsyncCompletedEventArgs) |
Olayı tetikler SendCompleted . |
| Send(MailMessage) |
Belirtilen iletiyi teslim için bir SMTP sunucusuna gönderir. |
| Send(String, String, String, String) |
Belirtilen e-posta iletisini teslim için bir SMTP sunucusuna gönderir. İletiyi gönderen, alıcılar, konu ve ileti gövdesi nesneler kullanılarak String belirtilir. |
| SendAsync(MailMessage, Object) |
Belirtilen e-posta iletisini teslim için bir SMTP sunucusuna gönderir. Bu yöntem çağıran iş parçacığını engellemez ve çağıranın işlem tamamlandığında çağrılan yönteme bir nesne geçirmesine izin verir. |
| SendAsync(String, String, String, String, Object) |
Teslim için smtp sunucusuna bir e-posta iletisi gönderir. İletiyi gönderen, alıcılar, konu ve ileti gövdesi nesneler kullanılarak String belirtilir. Bu yöntem çağıran iş parçacığını engellemez ve çağıranın işlem tamamlandığında çağrılan yönteme bir nesne geçirmesine izin verir. |
| SendAsyncCancel() |
E-posta iletisi göndermek için zaman uyumsuz işlemi iptal eder. |
| SendMailAsync(MailMessage, CancellationToken) |
Belirtilen iletiyi bir SMTP sunucusuna teslim edilmek üzere zaman uyumsuz bir işlem olarak gönderir. |
| SendMailAsync(MailMessage) |
Belirtilen iletiyi bir SMTP sunucusuna teslim edilmek üzere zaman uyumsuz bir işlem olarak gönderir. |
| SendMailAsync(String, String, String, String, CancellationToken) |
Belirtilen iletiyi, belirtilen göndereni, alıcıları, konu ve gövde dizelerini kullanarak zaman uyumsuz bir işlem olarak teslim etmek üzere SMTP sunucusuna gönderir. |
| SendMailAsync(String, String, String, String) |
Belirtilen iletiyi bir SMTP sunucusuna teslim edilmek üzere zaman uyumsuz bir işlem olarak gönderir. İletiyi gönderen, alıcılar, konu ve ileti gövdesi nesneler kullanılarak String belirtilir. |
| ToString() |
Geçerli nesneyi temsil eden bir dize döndürür. (Devralındığı yer: Object) |
Ekinlikler
| Name | Description |
|---|---|
| SendCompleted |
Zaman uyumsuz bir e-posta gönderme işlemi tamamlandığında gerçekleşir. |