Aracılığıyla paylaş


SmtpClient Sınıf

Tanım

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 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'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.

Şunlara uygulanır

Ayrıca bkz.