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.
Uygulamaların Basit Posta Aktarım Protokolü(SMTP) kullanarak e-posta göndermesine izin verir. Bu SmtpClient tür bazı platformlarda eskidir ve bazı platformlarda önerilmez; daha fazla bilgi için Açıklamalar bölümüne bakın.
public ref class SmtpClient : IDisposable
public ref class SmtpClient
public class SmtpClient : IDisposable
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
public class SmtpClient : IDisposable
public class SmtpClient
type SmtpClient = class
interface IDisposable
[<System.Runtime.Versioning.UnsupportedOSPlatform("browser")>]
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 e-posta iletisi göndermeyi gösterir.
#using <System.dll>
using namespace System;
using namespace System::Net;
using namespace System::Net::Mail;
using namespace System::Net::Mime;
using namespace System::Threading;
using namespace System::ComponentModel;
static bool mailSent;
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 != nullptr)
{
Console::WriteLine("[{0}] {1}", token,
e->Error->ToString());
} else
{
Console::WriteLine("Message sent.");
}
mailSent = true;
}
int main(array<String^>^ args)
{
if (args->Length > 1)
{
// Command-line argument must be the SMTP host.
SmtpClient^ client = gcnew SmtpClient(args[1]);
// Specify the email sender.
// Create a mailing address that includes a UTF8
// character in the display name.
MailAddress^ from = gcnew MailAddress("jane@contoso.com",
"Jane " + (wchar_t)0xD8 + " Clayton",
System::Text::Encoding::UTF8);
// Set destinations for the email message.
MailAddress^ to = gcnew MailAddress("ben@contoso.com");
// Specify the message content.
MailMessage^ message = gcnew 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 = gcnew String(gcnew array<wchar_t>{L'\u2190',
L'\u2191', L'\u2192', L'\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 += gcnew
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->ToLower()->StartsWith("c") && mailSent == false)
{
client->SendAsyncCancel();
}
// Clean up.
delete message;
client = nullptr;
Console::WriteLine("Goodbye.");
}
else
{
Console::WriteLine("Please give SMTP server name!");
}
}
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 == false)
{
client.SendAsyncCancel();
}
// Clean up.
message.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()
Console.WriteLine("Goodbye.")
End Sub
End Class
End Namespace
Açıklamalar
SmtpClient
sınıfı, teslim için bir SMTP sunucusuna e-posta göndermek için kullanılır. SMTP protokolü, adresinde bulunan RFC 2821'de https://www.ietf.orgtanımlanır.
Önemli
Çok sayıda modern protokolü desteklemediğinden sınıfını SmtpClient
yeni geliştirme SmtpClient
için kullanmanızı önermeyiz. Bunun yerine MailKit veya diğer kitaplıkları kullanın. Daha fazla bilgi için bkz . SmtpClient GitHub'da kullanılmamalıdır.
SmtpClient
Sınıf, Xamarin'de kullanımdan kaldırıldı. Ancak:
- .NET Standard 2.0 ve sonraki sürümlerde bulunur ve bu nedenle bu sürümleri destekleyen herhangi bir .NET uygulamasının parçası olmalıdır.
- Mevcut olup .NET Framework 4 ile .NET Framework 4.8 arasında kullanılabilir.
- .NET Core'da 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
from
ve 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
recipient
ve SendAsync yöntemlerine bakın. Ayrıca özelliğine MailMessage.To bakın.İleti içeriği. Send Parametre alan
body
ve 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'da, 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 üzerinde SmtpClient ayarlamanız gerekir.
E-posta iletisini göndermek ve e-postanın SMTP sunucusuna aktarılmasını beklerken 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. Olay SendCompleted , bir SendAsync işlem tamamlandığında oluşturulur. 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 e-posta iletimini iptal etmek için yöntemini kullanın SendAsyncCancel .
Not
Devam eden bir e-posta iletimi varsa ve veya yeniden ararsanız SendAsyncSend , bir InvalidOperationExceptionalırsınız.
Bir uygulama aynı SMTP sunucusuna birden çok ileti göndermek isterse, sınıfın geçerli örneği SmtpClient 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 kurma 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ştirmeleri, bülten dağıtımları veya e-posta uyarıları 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 daha sonra SMTP sunucusuna bağlantı kurulduğunda gönderilen çok sayıda e-posta iletisi oluşturabileceği bir off-line modunu destekler. Bir e-posta istemcisinin tüm SMTP iletilerini belirli bir SMTP sunucusuna (İnternet servis sağlayıcısı tarafından sağlanır) göndermesi normaldir ve bu e-postayı diğer SMTP sunucularına iletir.
SmtpClient Sınıf uygulaması SMTP bağlantılarını havuza alır, böylece her ileti için aynı sunucuya yeniden bağlantı kurma yükünden kaçınabilir. 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 kullanarak ne zaman biteceğini belirlemenin SmtpClient bir yolu yoktur ve temizlenmelidir.
Bir SMTP oturumu tamamlandığında ve istemci bağlantıyı sonlandırmak istediğinde, sunucuya gönderilecek başka ileti olmadığını belirtmek için bir QUIT iletisi göndermelidir. 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ı yineler ve BIR QUIT iletisi gönderir ve ardından TCP bağlantısını düzgün bir şekilde sonlandırır. yöntemi ayrıca Dispose 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. Dispose yöntemi, öğesini SmtpClient kullanılamaz durumda bırakır. çağrısından Disposesonra, çöp toplayıcısının SmtpClient kaplayan belleği SmtpClient geri kazanabilmesi için tüm başvurularını serbest bırakmanız gerekir.
Oluşturucular
SmtpClient() |
Yapılandırma dosyası ayarlarını kullanarak sınıfının yeni bir örneğini SmtpClient başlatır. |
SmtpClient(String) |
Belirtilen SMTP sunucusunu kullanarak e-posta gönderen 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ın yeni bir örneğini SmtpClient başlatır. |
Özellikler
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şleneceklerini 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 kaydettiği klasörü yerel SMTP sunucusu tarafından işlenecek şekilde 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 |
İsteklerle gönderilip gönderilmediğini DefaultCredentials denetleen bir Boolean değer alır veya ayarlar. |
Yöntemler
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 SmtpClient geçerli örneği 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ı atılır. |
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() |
Type Geçerli örneğini alır. (Devralındığı yer: Object) |
MemberwiseClone() |
Geçerli Objectöğesinin sığ 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 nesnesi 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 nesnesi geçirmesine izin verir. |
SendAsyncCancel() |
E-posta iletisi göndermek için zaman uyumsuz işlemi iptal eder. |
SendMailAsync(MailMessage) |
Belirtilen iletiyi bir SMTP sunucusuna teslim edilmek üzere zaman uyumsuz bir işlem olarak gönderir. |
SendMailAsync(MailMessage, CancellationToken) |
Belirtilen iletiyi bir SMTP sunucusuna teslim edilmek üzere zaman uyumsuz bir işlem olarak 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. |
SendMailAsync(String, String, String, String, CancellationToken) |
Belirtilen iletiyi, belirtilen göndereni, alıcıları, konuyu ve gövde dizelerini kullanarak zaman uyumsuz bir işlem olarak teslim etmek üzere SMTP sunucusuna gönderir. |
ToString() |
Geçerli nesneyi temsil eden dizeyi döndürür. (Devralındığı yer: Object) |
Ekinlikler
SendCompleted |
Zaman uyumsuz bir e-posta gönderme işlemi tamamlandığında gerçekleşir. |