بهینه‌سازی اتصال به سرور SMTP

بهینه‌سازی اتصالات کلاینت ایمیل

کاربران اغلب به دلیل تنظیمات زمان‌سرب پیش‌فرض با تاخیر مواجه می‌شوند که می‌تواند به زمان‌های اتصال طولانی یا حتی تلاش‌های ناموفق منجر شود.

برای بهبود کارایی این اتصالات، Aspose.Email برای .NET ویژگی‌هایی مانند را ارائه می‌دهد زمان انتظار و GreetingTimeout. در حالی که Timeout ویژگی مدت زمان کلی عملیات ایمیل را مدیریت می‌کند، GreetingTimeout ویژگی به طور خاص زمان ارسال رشتهٔ خوش‌آمدگویی توسط سرور پس از اتصال را هدف می‌گیرد.

در بخش بعدی، نحوه پیکربندی این تنظیمات را بررسی می‌کنیم تا سرعت و قابلیت اطمینان اتصال کلاینت ایمیل شما افزایش یابد.

هنگام استفاده از Timeout ویژگی، مهم است که توجه داشته باشید مقادیر اختصاص داده‌شده به آن باید بازه‌های زمانی کافی برای پشتیبانی از عملیات‌های طولانی داشته باشند.

با این حال، اتکا صرف به این ویژگی ممکن است باعث شود برقراری اتصال بیش از حد انتظار طول بکشد. این می‌تواند زمانی رخ دهد که کلاینت ایمیل از حالت خودکار برای برقراری اتصال استفاده می‌کند. در این حالت، کلاینت بین پارامترهای مختلف اتصال چرخش می‌کند تا زمانی که اتصال برقرار شود.

هنگام اتصال به سرورهای SMTP، IMAP و POP3، پس از برقراری موفقیت‌آمیز اتصال، یک رشتهٔ خوش‌آمدگویی به کلاینت ارسال می‌شود. سرورها ممکن است از شروع اتصال SSL/TLS به صورت ضمنی یا صریح (START TLS) استفاده کنند. در مواردی که حالت اتصال مطابقت نداشته باشد (به‌عنوان مثال، سرور انتظار اتصال SSL ضمنی دارد در حالی که کلاینت سعی می‌کند اتصال غیرامن یا SSL صریح برقرار کند)، سرور رشتهٔ خوش‌آمدگویی را ارسال نخواهد کرد.

در نتیجه، کاربر ممکن است مدت زمان طولانی‌ای صبر کند تا زمان‌سرب تنظیم شده به پایان برسد و کلاینت به گزینهٔ بعدی اتصال منتقل شود.

برای رفع این مشکل، GreetingTimeout ویژگی معرفی شده است. این ویژگی به کاربران امکان می‌دهد تا زمان‌سرب برای رشتهٔ خوش‌آمدگویی تنظیم کنند، که زمان برقراری اتصال خودکار را کاهش می‌دهد. با پیاده‌سازی GreetingTimeout ویژگی، کاربران می‌توانند عملکرد کلاینت ایمیل خود را بهینه کنند و از زمان‌های طولانی انتظار در هنگام برقراری اتصال جلوگیری نمایند.

نمونه کد زیر نشان می‌دهد چگونه تنظیم شود EmailClient.GreetingTimeout ویژگی:

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

دریافت افزونه‌های سرور

این SmtpClient به شما اجازه می‌دهد افزونه‌های سروری که پشتیبانی می‌کند مانند IDLE، UNSELECT، QUOTA و غیره را دریافت کنید. این به شناسایی در دسترس بودن یک افزونه قبل از استفاده از کلاینت برای آن عملکرد خاص کمک می‌کند. GetCapabilities() متد انواع افزونه‌های پشتیبانی‌شده را به‌صورت آرایه‌ای از رشته‌ها برمی‌گرداند.

قطعه کد زیر نشان می‌دهد چگونه افزونه‌های سرور را بازیابی کنید.

اعتبارسنجی مدارک سرور ایمیل بدون ارسال ایمیل

API Aspose.Email امکان اعتبارسنجی مدارک سرور ایمیل را بدون ارسال ایمیل فراهم می‌کند. این کار می‌تواند با استفاده از 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 پشتیبانی از نسخه‌های 4، 4a و 5 پروتکل پراکسی SOCKS را فراهم می‌کند. برای ارسال ایمیل از طریق یک سرور پراکسی، مراحل زیر را انجام دهید:

  1. پروکسی را با اطلاعات مورد نیاز، یعنی آدرس پروکسی، پورت و نسخه SOCKS راه‌اندازی کنید.
  2. راه‌اندازی SmtpClient با آدرس میزبان، نام کاربری و رمز عبور و هر تنظیم دیگر.
  3. ویژگی Proxy کلاینت را به پروکسی شیء‌ای که قبلاً ایجاد شده است.

قطعه کد زیر نشان می‌دهد چگونه به سرور از طریق سرور پروکسی متصل شوید.

ارسال ایمیل از طریق سرور پراکسی HTTP

شناسایی روش‌های احراز هویت برای اتصال امن به SMTP

Aspose.Email ویژگی‌هایی ارائه می‌دهد که امکان بررسی روش‌های احراز هویت قابل استفاده برای برقراری اتصال امن با سرور SMTP پیش از ارسال ایمیل را فراهم می‌کند:

  • the SmtpClient.SupportedAuthentication ویژگی لیستی از روش‌های احراز هویت پشتیبانی‌شده توسط سرور SMTP را برمی‌گرداند.
  • the SmtpClient.AllowedAuthentication ویژگی لیستی از روش‌های احراز هویت تعریف‌شده توسط کاربر را برمی‌گرداند.
smtpClient.AllowedAuthentication = SmtpKnownAuthenticationType.Login;

بارگذاری اطلاعات احراز هویت SMTP از فایل CONFIG

برای اینکه Aspose.Email بتواند یک فایل پیکربندی را بخواند، باید در قالب صحیح باشد. در زیر، یک نمونهٔ فایل پیکربندی XML را به همراه کدی که آن را می‌خواند نشان می‌دهیم. بخش کد زیر نشان می‌دهد چگونه اطلاعات احراز هویت SMTP را از فایل CONFIG بارگذاری کنید.

پس از تعریف تنظیمات پیکربندی، این تنظیمات را مستقیماً به یک نمونهٔ SmtpClient کلاس با استفاده از یکی از سازنده‌های بارگذاری‌شدهٔ خود. بخش کد زیر نشان می‌دهد چگونه تنظیمات پیکربندی را از فایل پیکربندی بخوانید و مستقیماً به نمونهٔ SmtpClient.

متصل کردن کلاینت SMTP به آدرس IP خاص

امکان وجود پورت‌های متعدد در یک میزبان برای ارسال ایمیل نمی‌تواند رد شود. در چنین مواردی ممکن است نیاز به بستن مشتری ارسال ایمیل به یک پورت خاص در میزبان برای ارسال ایمیل‌ها پیش آید. این کار می‌تواند با استفاده از Aspose.Email API نیز با استفاده از SmtpClient BindIPEndPoint ویژگی بارگذاری کنید. API SmtpClient می‌تواند با تعیین IP Endpoint خاص، برای استفاده از یک آدرس IP مشخص در میزبان تنظیم شود. قطعه کد زیر نشان می‌دهد چگونه مشتری SMTP را به آدرس IP خاص در میزبان بایند کنید.

تنظیم زمان‌سرب برای عملیات‌های ایمیل

هر عملیات ایمیل بسته به عوامل متعددی (تاخیرهای شبکه، حجم داده، عملکرد سرور و غیره) مدتی طول می‌کشد. می‌توانید زمان انتظار (Timeout) را برای تمام عملیات ایمیل تنظیم کنید. مثال کد زیر نشان می‌دهد چگونه با استفاده از زمان انتظار ویژگی.

نکته: نباید مقادیر بزرگ تنظیم کنید تا از انتظارهای طولانی در برنامهٔ خود جلوگیری شود.

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 اگر از این متد استفاده شود، کلاینت ایمیل استثناها را پرتاب می‌کند.

احراز هویت SMTP با مکانیزم CRAM-MD5

مکانیزم احراز هویت CRAM-MD5 در Aspose.Email برای .NET لایهٔ اضافی امنیتی هنگام دسترسی به سرور فراهم می‌کند. بخش کد زیر نشان می‌دهد چگونه این ویژگی را در پروژه خود پیاده‌سازی کنید:

smtpClient.AllowedAuthentication = SmtpKnownAuthenticationType.CramMD5;