SmtpClient Kelas

Definisi

Memungkinkan aplikasi mengirim email dengan menggunakan Simple Mail Transfer Protocol (SMTP). SmtpClient Jenis ini usang pada beberapa platform dan tidak direkomendasikan pada orang lain; untuk informasi selengkapnya, lihat bagian Keterangan.

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
Warisan
SmtpClient
Atribut
Penerapan

Contoh

Contoh kode berikut menunjukkan pengiriman pesan email secara asinkron.

#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

Keterangan

Kelas SmtpClient ini digunakan untuk mengirim email ke server SMTP untuk pengiriman. Protokol SMTP ditentukan dalam RFC 2821, yang tersedia di https://www.ietf.org.

Penting

Kami tidak menyarankan Anda menggunakan SmtpClient kelas untuk pengembangan baru karena SmtpClient tidak mendukung banyak protokol modern. Gunakan MailKit atau pustaka lain sebagai gantinya. Untuk informasi selengkapnya, lihat SmtpClient tidak boleh digunakan di GitHub.

Kelas SmtpClient sudah usang di Xamarin. Akan tetapi:

  • Ini termasuk dalam .NET Standard 2.0 dan versi yang lebih baru dan oleh karena itu harus menjadi bagian dari implementasi .NET apa pun yang mendukung versi tersebut.
  • Ini ada dan dapat digunakan dalam .NET Framework 4 hingga .NET Framework 4.8.
  • Ini dapat digunakan di .NET Core, tetapi penggunaannya tidak disarankan.

Kelas yang ditunjukkan dalam tabel berikut digunakan untuk membuat pesan email yang dapat dikirim menggunakan SmtpClient.

Kelas Deskripsi
Attachment Mewakili lampiran file. Kelas ini memungkinkan Anda melampirkan file, aliran, atau teks ke pesan email.
MailAddress Mewakili alamat email pengirim dan penerima.
MailMessage Mewakili pesan email.

Untuk membuat dan mengirim pesan email dengan menggunakan SmtpClient, Anda harus menentukan informasi berikut:

  • Server host SMTP yang Anda gunakan untuk mengirim email. Host Lihat properti dan Port .

  • Kredensial untuk autentikasi, jika diperlukan oleh server SMTP. Credentials Lihat properti .

  • Alamat email pengirim. Send Lihat metode dan SendAsync yang mengambil from parameter. MailMessage.From Lihat juga properti .

  • Alamat email atau alamat penerima. Send Lihat metode dan SendAsync yang mengambil recipient parameter. MailMessage.To Lihat juga properti .

  • Isi pesan. Send Lihat metode dan SendAsync yang mengambil body parameter. MailMessage.Body Lihat juga properti .

Untuk menyertakan lampiran dengan pesan email, pertama-tama buat lampiran dengan menggunakan Attachment kelas , lalu tambahkan ke pesan dengan menggunakan MailMessage.Attachments properti . Bergantung pada pembaca email yang digunakan oleh penerima dan jenis file lampiran, beberapa penerima mungkin tidak dapat membaca lampiran. Untuk klien yang tidak dapat menampilkan lampiran dalam bentuk aslinya, Anda dapat menentukan tampilan alternatif dengan menggunakan MailMessage.AlternateViews properti .

Dalam .NET Framework, Anda dapat menggunakan file konfigurasi aplikasi atau mesin untuk menentukan nilai host, port, dan kredensial default untuk semua SmtpClient objek. Untuk informasi selengkapnya, lihat <Elemen MailSettings> (Pengaturan Jaringan). .NET Core tidak mendukung pengaturan default. Sebagai solusinya, Anda harus mengatur properti yang relevan secara SmtpClient langsung.

Untuk mengirim pesan email dan memblokir sambil menunggu email dikirimkan ke server SMTP, gunakan salah satu metode sinkron Send . Agar utas utama program Anda dapat terus dieksekusi saat email dikirimkan, gunakan salah satu metode asinkron SendAsync . Peristiwa SendCompleted dinaikkan ketika SendAsync operasi selesai. Untuk menerima peristiwa ini, Anda harus menambahkan SendCompletedEventHandler delegasi ke SendCompleted. Delegasi SendCompletedEventHandler harus mereferensikan metode panggilan balik yang menangani pemberitahuan SendCompleted peristiwa. Untuk membatalkan transmisi email asinkron, gunakan metode .SendAsyncCancel

Catatan

Jika ada transmisi email yang sedang berlangsung dan Anda menelepon SendAsync atau Send lagi, Anda akan menerima InvalidOperationException.

Koneksi yang dibuat oleh instans SmtpClient kelas saat ini ke server SMTP dapat digunakan kembali jika aplikasi ingin mengirim beberapa pesan ke server SMTP yang sama. Ini sangat berguna ketika autentikasi atau enkripsi digunakan untuk membuat koneksi ke server SMTP. Proses autentikasi dan pembentukan sesi TLS bisa menjadi operasi yang mahal. Persyaratan untuk membuat ulang koneksi untuk setiap pesan saat mengirim email dalam jumlah besar ke server SMTP yang sama dapat berdampak signifikan pada performa. Ada sejumlah aplikasi email volume tinggi yang mengirim pembaruan status email, distribusi buletin, atau pemberitahuan email. Juga banyak aplikasi klien email yang mendukung mode off-line di mana pengguna dapat membuat banyak pesan email yang dikirim nanti ketika koneksi ke server SMTP dibuat. Biasanya klien email mengirim semua pesan SMTP ke server SMTP tertentu (disediakan oleh penyedia layanan Internet) yang kemudian meneruskan email ini ke server SMTP lainnya.

Implementasi SmtpClient kelas mengumpulkan koneksi SMTP sehingga dapat menghindari overhead membangun kembali koneksi untuk setiap pesan ke server yang sama. Aplikasi dapat menggunakan kembali objek yang sama SmtpClient untuk mengirim banyak email yang berbeda ke server SMTP yang sama dan ke banyak server SMTP yang berbeda. Akibatnya, tidak ada cara untuk menentukan kapan aplikasi selesai menggunakan SmtpClient objek dan harus dibersihkan.

Ketika sesi SMTP selesai dan klien ingin mengakhiri koneksi, ia harus mengirim pesan QUIT ke server untuk menunjukkan bahwa ia tidak memiliki lebih banyak pesan untuk dikirim. Ini memungkinkan server untuk membebaskan sumber daya yang terkait dengan koneksi dari klien dan memproses pesan yang dikirim oleh klien.

Kelas SmtpClient tidak Finalize memiliki metode, jadi aplikasi harus memanggil Dispose untuk secara eksplisit membebaskan sumber daya. Metode ini Dispose melakukan iterasi melalui semua koneksi yang dibuat ke server SMTP yang ditentukan dalam Host properti dan mengirim pesan QUIT diikuti dengan mengakhiri koneksi TCP dengan lancar. Metode ini Dispose juga merilis sumber daya yang tidak dikelola yang digunakan oleh Socket dan secara opsional membuang sumber daya terkelola.

Panggil Dispose ketika Anda selesai menggunakan SmtpClient. Metode Dispose ini meninggalkan SmtpClient dalam keadaan tidak dapat digunakan. Setelah memanggil Dispose, Anda harus merilis semua referensi ke SmtpClient sehingga pengumpul sampah dapat mengklaim kembali memori yang SmtpClient diduduki.

Konstruktor

SmtpClient()

Menginisialisasi instans SmtpClient baru kelas dengan menggunakan pengaturan file konfigurasi.

SmtpClient(String)

Menginisialisasi instans SmtpClient baru kelas yang mengirim email dengan menggunakan server SMTP yang ditentukan.

SmtpClient(String, Int32)

Menginisialisasi instans SmtpClient baru kelas yang mengirim email dengan menggunakan server dan port SMTP yang ditentukan.

Properti

ClientCertificates

Tentukan sertifikat mana yang harus digunakan untuk membuat koneksi Secure Sockets Layer (SSL).

Credentials

Mendapatkan atau mengatur kredensial yang digunakan untuk mengautentikasi pengirim.

DeliveryFormat

Mendapatkan atau mengatur format pengiriman yang digunakan oleh SmtpClient untuk mengirim email.

DeliveryMethod

Menentukan bagaimana pesan email keluar akan ditangani.

EnableSsl

Tentukan apakah SmtpClient menggunakan Secure Sockets Layer (SSL) untuk mengenkripsi koneksi.

Host

Mendapatkan atau mengatur nama atau alamat IP host yang digunakan untuk transaksi SMTP.

PickupDirectoryLocation

Mendapatkan atau mengatur folder tempat aplikasi menyimpan pesan email untuk diproses oleh server SMTP lokal.

Port

Mendapatkan atau mengatur port yang digunakan untuk transaksi SMTP.

ServicePoint

Mendapatkan koneksi jaringan yang digunakan untuk mengirimkan pesan email.

TargetName

Mendapatkan atau mengatur Nama Penyedia Layanan (SPN) yang akan digunakan untuk autentikasi saat menggunakan perlindungan yang diperluas.

Timeout

Mendapatkan atau menetapkan nilai yang menentukan jumlah waktu setelah waktu panggilan sinkron Send habis.

UseDefaultCredentials

Mendapatkan atau menetapkan Boolean nilai yang mengontrol apakah DefaultCredentials dikirim dengan permintaan.

Metode

Dispose()

Mengirim pesan QUIT ke server SMTP, dengan anggun mengakhiri koneksi TCP, dan merilis semua sumber daya yang digunakan oleh instans SmtpClient kelas saat ini.

Dispose(Boolean)

Mengirim pesan QUIT ke server SMTP, dengan anggun mengakhiri koneksi TCP, merilis semua sumber daya yang digunakan oleh instans SmtpClient kelas saat ini, dan secara opsional membuang sumber daya terkelola.

Equals(Object)

Menentukan apakah objek yang ditentukan sama dengan objek saat ini.

(Diperoleh dari Object)
GetHashCode()

Berfungsi sebagai fungsi hash default.

(Diperoleh dari Object)
GetType()

Mendapatkan instans Type saat ini.

(Diperoleh dari Object)
MemberwiseClone()

Membuat salinan dangkal dari yang saat ini Object.

(Diperoleh dari Object)
OnSendCompleted(AsyncCompletedEventArgs)

Memunculkan kejadian SendCompleted.

Send(MailMessage)

Mengirim pesan yang ditentukan ke server SMTP untuk pengiriman.

Send(String, String, String, String)

Mengirim pesan email yang ditentukan ke server SMTP untuk pengiriman. Pengirim pesan, penerima, subjek, dan isi pesan ditentukan menggunakan String objek.

SendAsync(MailMessage, Object)

Mengirim pesan email yang ditentukan ke server SMTP untuk pengiriman. Metode ini tidak memblokir utas panggilan dan memungkinkan pemanggil untuk meneruskan objek ke metode yang dipanggil ketika operasi selesai.

SendAsync(String, String, String, String, Object)

Mengirim pesan email ke server SMTP untuk pengiriman. Pengirim pesan, penerima, subjek, dan isi pesan ditentukan menggunakan String objek. Metode ini tidak memblokir utas panggilan dan memungkinkan pemanggil untuk meneruskan objek ke metode yang dipanggil ketika operasi selesai.

SendAsyncCancel()

Membatalkan operasi asinkron untuk mengirim pesan email.

SendMailAsync(MailMessage)

Mengirim pesan yang ditentukan ke server SMTP untuk pengiriman sebagai operasi asinkron.

SendMailAsync(MailMessage, CancellationToken)

Mengirim pesan yang ditentukan ke server SMTP untuk pengiriman sebagai operasi asinkron.

SendMailAsync(String, String, String, String)

Mengirim pesan yang ditentukan ke server SMTP untuk pengiriman sebagai operasi asinkron. Pengirim pesan, penerima, subjek, dan isi pesan ditentukan menggunakan String objek.

SendMailAsync(String, String, String, String, CancellationToken)

Mengirim pesan yang ditentukan ke server SMTP untuk pengiriman sebagai operasi asinkron, menggunakan pengirim, penerima, subjek, dan string isi yang ditentukan.

ToString()

Mengembalikan string yang mewakili objek saat ini.

(Diperoleh dari Object)

Acara

SendCompleted

Terjadi ketika operasi pengiriman email asinkron selesai.

Berlaku untuk

Lihat juga