Aracılığıyla paylaş


SmtpClient Sınıf

Tanım

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.

Şunlara uygulanır

Ayrıca bkz.