SMTP サーバー接続の最適化

メールクライアント接続の最適化

ユーザーはデフォルトのタイムアウト設定に起因する遅延に頻繁に直面し、それが接続時間の延長や失敗につながることがあります。

これらの接続の効率を向上させるため、Aspose.Email for .NET は次のようなプロパティを提供します。 タイムアウト および GreetingTimeout。ただし、 Timeout このプロパティは、メール操作全体の所要時間を管理します、 GreetingTimeout このプロパティは、接続時にサーバーが挨拶文字列を送信するまでの時間を対象としています。

次のセクションでは、これらの設定を構成してメールクライアントの接続速度と信頼性を向上させる方法を検討します。

使用時は Timeout プロパティでは、割り当てる値は長時間の操作を収容できるように十分な間隔を持たせる必要があることに注意してください。

しかし、このプロパティだけに依存すると、接続確立に予想以上に時間がかかることがあります。これは、メールクライアントが接続確立の自動モードを使用する場合に起こります。このモードでは、クライアントは接続が確立されるまでさまざまな接続パラメータを順に試行します。

SMTP、IMAP、POP3 サーバーに接続する際、接続が正常に確立されるとサーバーはクライアントに挨拶文字列を送信します。サーバーは暗黙的または明示的(START TLS)な SSL/TLS 接続開始を使用することがあります。接続モードが一致しない場合(例として、サーバーが暗黙的 SSL 接続を期待しているのに、クライアントが非暗号化または明示的 SSL 接続を試みた場合)、サーバーは挨拶文字列を送信しません。

結果として、ユーザーはタイムアウトが発生するまで長時間待機することになり、クライアントは次の接続オプションへ移ります。

この問題に対処するために、 GreetingTimeout プロパティが導入されました。このプロパティは、ユーザーが挨拶文字列のタイムアウトを設定できるようにし、自動接続の確立に要する時間を短縮します。実装することで GreetingTimeout プロパティを使用すると、ユーザーはメールクライアントのパフォーマンスを最適化し、接続確立時の長時間待機を回避できます。

以下のコードサンプルは、設定方法を示しています EmailClient.GreetingTimeout プロパティ:

using (SmtpClient client = new SmtpClient("localhost", 25, "username", "password"))
{
    client.GreetingTimeout = 4000;
}

サーバー拡張機能の取得

この SmtpClient サーバーがサポートする IDLE、UNSELECT、QUOTA などの拡張機能を取得できます。この機能は、特定の機能をクライアントで使用する前に拡張の利用可否を確認するのに役立ちます。 GetCapabilities() このメソッドは、サポートされている拡張タイプを文字列配列として返します。

以下のコードスニペットは、サーバー拡張機能を取得する方法を示しています。

SmtpClient client = new SmtpClient("smtp.gmail.com", "user@gmail.com", "password");
client.SecurityOptions = SecurityOptions.SSLExplicit;
client.Port = 587;

try
{
    string[] caps = client.GetCapabilities();

    foreach (string str in caps)
        Console.WriteLine(str);
}
catch (Exception ex)
{
    Console.WriteLine(ex.Message);
}

メールを送信せずにメールサーバーの認証情報を検証

Aspose.Email API は、メールを送信せずにメールサーバーの認証情報を検証する機能を提供します。これは次のものを使用して実現できます: ValidateCredentials このメソッドは、サーバー接続時に認証に使用される提供されたメール認証情報の真正性と正確性を検証する役割を担います。

このメソッドは、ユーザー名やパスワードなどの提供されたメール認証情報が有効であり、クライアントがサーバーへの接続に成功できることを確認します。この認証情報の検証により、顧客がメールアカウントに安全にアクセスし、メール送信などの様々な操作を行えるようになります。

using (SmtpClient client = new SmtpClient(server.SmtpUrl, server.SmtpPort, "username", "password", SecurityOptions.Auto))
{
    client.Timeout = 4000;
   
    if (client.ValidateCredentials())
    {
        //to do something
    }
}

このメソッドの別バージョンもあります ValidateCredentialsAsync 非同期操作を実行するために。

SOCKS プロキシサーバー経由でメールを送信

このような場合、メールクライアントはプロキシアドレスを指定しない限りインターネット上で通信できません。Aspose.Email は SOCKS プロキシプロトコルのバージョン 4、4a、5 をサポートしています。プロキシサーバー経由でメールを送信するには、以下の手順を実行してください:

  1. 必要な情報、つまりプロキシアドレス、ポート、SOCKSバージョンを使用してプロキシを初期化します。
  2. 初期化 SmtpClient ホストアドレス、ユーザー名、パスワード、その他の設定とともに。
  3. クライアントの Proxy プロパティを次のように設定します: Proxy 以前に作成したオブジェクト。

以下のコードスニペットは、プロキシサーバー経由でサーバーに接続する方法を示しています。

SmtpClient client = new SmtpClient("smtp.domain.com", "username", "password");
client.SecurityOptions = SecurityOptions.SSLImplicit;
string proxyAddress = "192.168.203.142"; // proxy address
int proxyPort = 1080; // proxy port
SocksProxy proxy = new SocksProxy(proxyAddress, proxyPort, SocksVersion.SocksV5);
client.Proxy = proxy;
client.Send(new MailMessage("sender@domain.com", "receiver@domain.com", "Sending Email via proxy", "Implement socks proxy protocol for versions 4, 4a, 5 (only Username/Password authentication)"));

HTTP プロキシサーバー経由でメールを送信

HttpProxy proxy = new HttpProxy("18.222.124.59", 8080);
using (SmtpClient client = new SmtpClient("host", 587, "username", "password"))
{
    client.Proxy = proxy;
    client.Send(new MailMessage(
        "from@domain.com",
        "to@domain.com",
        "NETWORKNET-34226 - " + Guid.NewGuid().ToString(),
        "NETWORKNET-34226 Implement socks proxy protocol for versions 4, 4a, 5 (only Username/Password authentication)"));
}

安全な SMTP 接続のための認証方式の特定

Aspose.Email は、メールを送信する前に SMTP サーバーとの安全な接続を確立するために使用できる認証方式を確認できるプロパティを提供します:

smtpClient.AllowedAuthentication = SmtpKnownAuthenticationType.Login;

CONFIG ファイルから SMTP 認証情報をロード

Aspose.Email が設定ファイルを読み取るためには、正しい形式である必要があります。以下に XML 設定ファイルの例とそれを読み取るコードを示します。次のコードスニペットは、CONFIG ファイルから SMTP 認証情報をロードする方法を示しています。

<system.net>
	<mailSettings>
		<smtp from="from@gmail.com">
			<network host="smtp.gmail.com" port="587" userName="sender@gmail.com" password="*******"/>
		</smtp>
	</mailSettings>
</system.net>

構成設定が定義されたら、これらの設定を直接インスタンスにロードします。 SmtpClient クラスはオーバーロードされたコンストラクタのいずれかを使用します。次のコードスニペットは、設定ファイルから構成設定を読み取り、直接クラスのインスタンスにロードする方法を示しています。 SmtpClient.

// Create an instance of SmtpClient class and load SMTP Authentication settings from Config file
SmtpClient client = new SmtpClient(ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None));

SMTP クライアントを特定の IP アドレスにバインド

メール送信クライアントをホスト上の特定のポートにバインドしてメールを送信する必要が生じる場合があります。これは、Aspose.Email API を使用しても実現できます。 SmtpClient BindIPEndPoint プロパティです。API の SmtpClient 特定のIPエンドポイントを指定することで、ホスト上の特定のIPアドレスを使用するように設定できます。以下のコードスニペットは、ホスト上の特定のIPアドレスにSMTPクライアントをバインドする方法を示しています。

public static void Run()
{
    using (SmtpClient client = new SmtpClient("smtp.gmail.com", 587, "your.email@gmail.com", "your.Password", SecurityOptions.Auto))
    {
        // set callback
        client.BindIPEndPoint += BindIPEndPointCallback;
        client.Noop();
    }
}

// get local endpoint callbak
private static IPEndPoint BindIPEndPointCallback(IPEndPoint remoteEndPoint)
{
    return new IPEndPoint(IPAddress.Any, 0);
}

メール操作のタイムアウト設定

メール操作は、ネットワーク遅延、データサイズ、サーバー性能など多数の要因により時間がかかります。すべてのメール操作にタイムアウトを設定できます。以下のコード例は、次のものを使用してその方法を示しています。 タイムアウト プロパティです。

※ アプリケーションで長時間待機しないように、大きな値を設定しないでください。

using (SmtpClient smtpClient = new SmtpClient("host", 587, "username", "password", SecurityOptions.SSLExplicit))
{
    smtpClient.Timeout = 60000; // 60 seconds

    // some code...
}

暗号プロトコルの使用

Aspose.Email は、通信セキュリティを提供するために SSL(旧式)および TLS 暗号プロトコルをサポートしています。アプリケーションとメールサーバー間のデータ交換を保護するために暗号化を有効にできます。

注意: .NET Framework がサポートするプロトコルのバージョンのみを設定してください。現在の .NET Framework でサポートされていない暗号プロトコルのバージョンは無視され、スキップされます。この場合、例外は生成されません。以下を使用してください SetSupportedEncryptionUnsafe 互換性チェックなしでプロトコルを設定したい場合のメソッドです。

以下のコード例は、TLS 1.3 を設定する方法を示しています。 SmtpClient クラスのインスタンスです。

using (SmtpClient smtpClient = new SmtpClient("host", 587, "username", "password", SecurityOptions.SSLExplicit))
{
    smtpClient.SupportedEncryption = EncryptionProtocols.Tls13;

    // some code...
}

指定された暗号化プロトコルが現在の .NET Framework バージョンでサポートされていない場合、次の間で動作の違いがあります SetSupportedEncryptionUnsafe メソッドと SupportedEncryption プロパティは次のとおりです:

  • もし SupportedEncryption このプロパティが使用されると、メールクライアントは暗号化プロトコルをサポートされたレベルにダウングレードします。
  • もし SetSupportedEncryptionUnsafe このメソッドが使用されると、メールクライアントは例外をスローします。

CRAM-MD5 メカニズムによる SMTP 認証

Aspose.Email for .NET の CRAM-MD5 認証メカニズムは、サーバーへのアクセス時に追加のセキュリティ層を提供します。次のコードスニペットは、この機能をプロジェクトに実装する方法を示しています:

smtpClient.AllowedAuthentication = SmtpKnownAuthenticationType.CramMD5;