SmtpClient クラス

定義

注意事項

SmtpClient and its network of types are poorly designed, we strongly recommend you use https://github.com/jstedfast/MailKit and https://github.com/jstedfast/MimeKit instead

アプリケーションが SMTP (簡易メール転送プロトコル) を使用して電子メールを送信できるようにします。 SmtpClient 型は廃止されました。

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
[System.Obsolete("SmtpClient and its network of types are poorly designed, we strongly recommend you use https://github.com/jstedfast/MailKit and https://github.com/jstedfast/MimeKit instead")]
public class SmtpClient : IDisposable
type SmtpClient = class
    interface IDisposable
[<System.Runtime.Versioning.UnsupportedOSPlatform("browser")>]
type SmtpClient = class
    interface IDisposable
type SmtpClient = class
[<System.Obsolete("SmtpClient and its network of types are poorly designed, we strongly recommend you use https://github.com/jstedfast/MailKit and https://github.com/jstedfast/MimeKit instead")>]
type SmtpClient = class
    interface IDisposable
Public Class SmtpClient
Implements IDisposable
Public Class SmtpClient
継承
SmtpClient
属性
実装

次のコード例は、電子メールメッセージを非同期に送信する方法を示しています。

#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

注釈

クラスは、 SmtpClient 配信のために電子メールを SMTP サーバーに送信するために使用されます。 SMTP プロトコルは、RFC 2821 で定義されています。これは、で入手でき https://www.ietf.org ます。

重要

新しい開発にクラスを使用することはお勧めしません SmtpClient 。では、 SmtpClient 多くの最新のプロトコルがサポートされていません。 代わりに Mailkit またはその他のライブラリを使用してください。 詳細については、GitHub で Smtpclient を使用しないこと をお勧めします。

クラスは、 SmtpClient Xamarin では互換性のために残されています。 ただし

  • これは .NET Standard 2.0 以降のバージョンに含まれているため、これらのバージョンをサポートする .NET 実装の一部である必要があります。
  • このファイルは存在し、.NET Framework 4 ~ .NET Framework 4.8 で使用できます。
  • .NET Core で使用できますが、その使用は推奨されていません。

次の表に示すクラスは、を使用して送信できる電子メールメッセージを作成するために使用され SmtpClient ます。

クラス 説明
Attachment 添付ファイルを表します。 このクラスを使用すると、ファイル、ストリーム、またはテキストを電子メールメッセージに添付できます。
MailAddress 送信者と受信者の電子メールアドレスを表します。
MailMessage 電子メールメッセージを表します。

を使用して電子メールメッセージを作成および送信するには SmtpClient 、次の情報を指定する必要があります。

  • 電子メールの送信に使用する SMTP ホストサーバー。 プロパティとプロパティを参照してください Host Port

  • 認証用の資格情報 (SMTP サーバーで必要な場合)。 Credentials プロパティをご覧ください。

  • 送信者の電子メール アドレス。 Send SendAsync パラメーターを受け取るメソッドとメソッドを参照してください from 。 プロパティも参照してください MailMessage.From

  • 受信者の電子メールアドレス。 Send SendAsync パラメーターを受け取るメソッドとメソッドを参照してください recipient 。 プロパティも参照してください MailMessage.To

  • メッセージのコンテンツ。 Send SendAsync パラメーターを受け取るメソッドとメソッドを参照してください body 。 プロパティも参照してください MailMessage.Body

電子メールメッセージと共に添付ファイルを含めるには、まずクラスを使用して添付ファイルを作成 Attachment し、次にプロパティを使用してメッセージに追加し MailMessage.Attachments ます。 受信者と添付ファイルのファイルの種類によって使用される電子メールリーダーによっては、一部の受信者が添付ファイルを読み取ることができない場合があります。 添付ファイルを元の形式で表示できないクライアントの場合、プロパティを使用して代替ビューを指定でき MailMessage.AlternateViews ます。

.NET Framework では、アプリケーションまたはコンピューターの構成ファイルを使用して、すべてのオブジェクトの既定のホスト、ポート、および資格情報の値を指定でき SmtpClient ます。 詳細については、「 < mailsettings > 要素 (ネットワーク設定)」を参照してください。 .NET Core では、設定の既定値はサポートされていません。 回避策として、関連するプロパティをに直接設定する必要があり SmtpClient ます。

電子メールが SMTP サーバーに送信されるのを待機している間に電子メールメッセージとブロックを送信するには、いずれかの同期方法を使用し Send ます。 電子メールの送信中にプログラムのメインスレッドの実行を継続できるようにするには、いずれかの非同期メソッドを使用し SendAsync ます。 SendCompleted操作が完了すると、イベントが発生し SendAsync ます。 このイベントを受信するには、デリゲートをに追加する必要があり SendCompletedEventHandler SendCompleted ます。 デリゲートは、 SendCompletedEventHandler イベントの通知を処理するコールバックメソッドを参照する必要があり SendCompleted ます。 非同期の電子メール送信をキャンセルするには、メソッドを使用し SendAsyncCancel ます。

注意

電子メールの送信が進行中で、またはを呼び出すと SendAsync Send 、が表示され InvalidOperationException ます。

SmtpClientアプリケーションが同じ smtp サーバーに複数のメッセージを送信する場合は、クラスの現在のインスタンスによって確立された smtp サーバーへの接続を再利用できます。 これは、認証または暗号化を使用して SMTP サーバーへの接続を確立する場合に特に便利です。 TLS セッションの認証と確立のプロセスは、コストのかかる操作になることがあります。 多数の電子メールを同じ SMTP サーバーに送信するときに、各メッセージの接続を再確立する必要があることが、パフォーマンスに大きな影響を与える可能性があります。 電子メールの状態の更新、ニュースレターの配布、または電子メールのアラートを送信する大量の電子メールアプリケーションがあります。 また、多くの電子メールクライアントアプリケーションはオフラインモードをサポートしています。このモードでは、SMTP サーバーへの接続が確立されたときに、後で送信される多くの電子メールメッセージをユーザーが構成できます。 通常は、電子メールクライアントがすべての SMTP メッセージを (インターネットサービスプロバイダーによって提供される) 特定の SMTP サーバーに送信し、その後、この電子メールを他の SMTP サーバーに転送します。

SmtpClientクラス実装は、すべてのメッセージの接続を同じサーバーに再確立するオーバーヘッドを回避できるように、SMTP 接続をプールします。 アプリケーションは同じオブジェクトを再利用して、 SmtpClient 同じ smtp サーバーおよびさまざまな smtp サーバーに多数の異なる電子メールを送信できます。 このため、オブジェクトの使用がいつ完了したかを判断する方法はなく、アプリケーションをクリーンアップする必要があり SmtpClient ます。

SMTP セッションが完了し、クライアントが接続を終了する場合は、送信するメッセージがなくなったことを示すために、サーバーに終了メッセージを送信する必要があります。 これにより、サーバーは、クライアントからの接続に関連付けられたリソースを解放し、クライアントから送信されたメッセージを処理することができます。

SmtpClientクラスにはメソッドがない Finalize ため、アプリケーションはを呼び出して Dispose リソースを明示的に解放する必要があります。 メソッドは、 Dispose プロパティで指定した SMTP サーバーに対して確立されたすべての接続を反復処理 Host し、終了メッセージを送信してから、TCP 接続を適切に終了します。 Disposeまた、メソッドは、によって使用されているアンマネージリソースを解放 Socket し、オプションでマネージリソースも破棄します。

Dispose を使い終わったら SmtpClient を呼び出します。 Disposeメソッドによって、SmtpClient は使用不可の状態になります。 Dispose呼び出し後は、SmtpClientによって占有されていたメモリをガベージ コレクターがクリアできるよう、SmtpClient へのすべての参照を解放する必要があります。

コンストラクター

SmtpClient()

構成ファイルの設定を使用して SmtpClient クラスの新しいインスタンスを初期化します。

SmtpClient(String)

指定した SMTP サーバーを使用して電子メールを送信する SmtpClient クラスの新しいインスタンスを初期化します。

SmtpClient(String, Int32)

指定した SMTP サーバーとポートを使用して電子メールを送信する SmtpClient クラスのインスタンスを初期化します。

プロパティ

ClientCertificates

SSL (Secure Sockets Layer) 接続を確立するために使用する必要のある証明書を指定します。

Credentials

差出人の認証に使用する資格情報を取得または設定します。

DeliveryFormat

電子メールを送信するために SmtpClient によって使用される配信形式を取得または設定します。

DeliveryMethod

送信メッセージの処理方法を指定します。

EnableSsl

SmtpClient が、接続を暗号化するために SSL (Secure Sockets Layer) を使用するかどうかを指定します。

Host

SMTP トランザクションで使用されるホストの名前または IP アドレスを取得または設定します。

PickupDirectoryLocation

ローカルの SMTP サーバーによって処理される電子メール メッセージをアプリケーションが保存するフォルダーを取得または設定します。

Port

SMTP トランザクションで使用されるポートを取得または設定します。

ServicePoint

電子メール メッセージの送信に使用するネットワーク接続を取得します。

TargetName

拡張保護を使用するときの認証に使用するサービス プロバイダー名 (SPN: Service Provider Name) を取得または設定します。

Timeout

同期的な Send 呼び出しがタイムアウトになるまでの時間を指定する値を取得または設定します。

UseDefaultCredentials

Boolean が要求と共に送信されるかどうかを制御する DefaultCredentials 値を取得または設定します。

メソッド

Dispose()

QUIT メッセージを SMTP サーバーに送信し、TCP 接続を適切に終了して、SmtpClient クラスの現在のインスタンスで使用されているすべてのリソースを解放します。

Dispose(Boolean)

QUIT メッセージを SMTP サーバーに送信し、TCP 接続を適切に終了して、SmtpClient クラスの現在のインスタンスで使用されているすべてのリソースを解放します。オプションでマネージド リソースも破棄します。

Equals(Object)

指定されたオブジェクトが現在のオブジェクトと等しいかどうかを判断します。

(継承元 Object)
GetHashCode()

既定のハッシュ関数として機能します。

(継承元 Object)
GetType()

現在のインスタンスの Type を取得します。

(継承元 Object)
MemberwiseClone()

現在の Object の簡易コピーを作成します。

(継承元 Object)
OnSendCompleted(AsyncCompletedEventArgs)

SendCompleted イベントを発生させます。

Send(MailMessage)

指定したメッセージを、配信用 SMTP サーバーに送信します。

Send(String, String, String, String)

指定した電子メール メッセージを、配信用 SMTP サーバーに送信します。 メッセージの差出人、受信者、件名、およびメッセージ本文は、String オブジェクトを使用して指定されます。

SendAsync(MailMessage, Object)

指定した電子メール メッセージを、配信用 SMTP サーバーに送信します。 このメソッドは、呼び出し元のスレッドをブロックしません。また、呼び出し元は、操作の完了時に呼び出されるメソッドにオブジェクトを渡すことができます。

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

電子メール メッセージを、配信用 SMTP サーバーに送信します。 メッセージの差出人、受信者、件名、およびメッセージ本文は、String オブジェクトを使用して指定されます。 このメソッドは、呼び出し元のスレッドをブロックしません。また、呼び出し元は、操作の完了時に呼び出されるメソッドにオブジェクトを渡すことができます。

SendAsyncCancel()

電子メール メッセージを送信する非同期操作をキャンセルします。

SendMailAsync(MailMessage)

非同期操作として、指定したメッセージを配信用 SMTP サーバーに送信します。

SendMailAsync(MailMessage, CancellationToken)

非同期操作として、指定したメッセージを配信用 SMTP サーバーに送信します。

SendMailAsync(String, String, String, String)

非同期操作として、指定したメッセージを配信用 SMTP サーバーに送信します。 メッセージの差出人、受信者、件名、およびメッセージ本文は、String オブジェクトを使用して指定されます。

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

指定された差出人、受信者、件名、本文の文字列を使用し、非同期操作として、指定されたメッセージを配信のために SMTP サーバーに送信します。

ToString()

現在のオブジェクトを表す文字列を返します。

(継承元 Object)

イベント

SendCompleted

電子メールの非同期的な送信操作が完了した場合に発生します。

適用対象

こちらもご覧ください