اتصال به سرور IMAP

این ImapClient کلاس به برنامه‌ها اجازه می‌دهد صندوق‌های ایمیل IMAP را با استفاده از پروتکل IMAP مدیریت کنند. ImapClient کلاس برای اتصال به سرورهای ایمیل IMAP و مدیریت ایمیل‌ها در پوشه‌های ایمیل IMAP استفاده می‌شود. برای اتصال به سرور IMAP

  1. یک نمونه از ImapClient کلاس.
  2. نام میزبان، نام کاربری و گذرواژه را در سازنده ImapClient.

زمانی که ImapClient نمونه ایجاد می‌شود، فراخوانی بعدی هر عمل با این نمونه به سرور متصل می‌شود. کد زیر نشان می‌دهد چگونه با استفاده از مراحل فوق به سرور IMAP متصل شویم.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Create an imapclient with host, user and password
ImapClient client = new ImapClient("localhost", "user", "password");

اتصال به سرور IMAP با SSL فعال

اتصال به سرور IMAP نحوهٔ اتصال به سرور IMAP را در چهار گام ساده توضیح دادیم:

  1. یک نمونه از ImapClient کلاس.
  2. نام میزبان، نام کاربری و گذرواژه را مشخص کنید.
  3. پورت را مشخص کنید.
  4. مشخص کنید گزینه‌های امنیتی.

فرآیند اتصال به سرور IMAP با SSL فعال مشابه است اما نیاز دارد چند ویژگی دیگر تنظیم شود:

کد زیر نشان می‌دهد چگونه

  1. نام کاربری، گذرواژه و پورت را تنظیم کنید.
  2. تنظیم گزینه امنیتی.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Create an instance of the ImapClient class
ImapClient client = new ImapClient("imap.domain.com", 993, "user@domain.com", "pwd");

// Set the security mode to implicit
client.setSecurityOptions(SecurityOptions.SSLImplicit);

اتصال به سرور از طریق پروکسی

سرورهای پروکسی معمولاً برای ارتباط با دنیای بیرون استفاده می‌شوند. در این شرایط، کلاینت‌های ایمیل بدون تعیین آدرس پروکسی نمی‌توانند از اینترنت ارتباط برقرار کنند. Aspose.Email پشتیبانی از نسخه‌های 4، 4a و 5 پروتکل پروکسی SOCKS را فراهم می‌کند. این مقاله نمونهٔ عملی دسترسی به صندوق پست با استفاده از سرور پروکسی ایمیل را ارائه می‌دهد. برای دسترسی به صندوق پست از طریق سرور پروکسی:

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

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

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Connect and log in to IMAP and set SecurityOptions
ImapClient client = new ImapClient("imap.domain.com", "username", "password");
client.setSecurityOptions(SecurityOptions.Auto);

String proxyAddress = "192.168.203.142"; // proxy address
int proxyPort = 1080; // proxy port
SocksProxy proxy = new SocksProxy(proxyAddress, proxyPort, SocksVersion.SocksV5);

// Set the proxy
client.setProxy(proxy);

try {
    client.selectFolder("Inbox");
} catch (java.lang.RuntimeException ex) {
    System.out.println(ex.getMessage());
}

اتصال به سرور از طریق پروکسی HTTP

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
HttpProxy proxy = new HttpProxy("18.222.124.59", 8080);
final ImapClient client = new ImapClient("imap.domain.com", "username", "password");
try {
    client.setProxy(proxy);
    client.selectFolder("Inbox");
} finally {
    if (client != null)
        client.dispose();
}

سفارشی‌سازی مکانیزم احراز هویت

دریافت فهرست مکانیزم‌های احراز هویتی که توسط سرور IMAP پشتیبانی می‌شوند با استفاده از getSupportedAuthentication متد از ImapClient کلاس. این متد به کلاینت اجازه می‌دهد تا تعیین کند کدام روش‌های احراز هویت برای برقراری اتصال امن با سرور موجود هستند. سپس، با استفاده از setAllowedAuthentication روشی که فهرست (یا تنظیم) انواع احراز هویت مجاز توسط کاربر را برمی‌گرداند، مکانیزم احراز هویت مناسب‌ترین برای ارتباط کلاینت‑سرور را انتخاب می‌کند. این امکان را می‌دهد تا روش احراز هویت مشتری ایمیل را به‌صورت صریح تنظیم کنید.

نمونه کد زیر نشان می‌دهد چگونه احراز هویت مشتری ایمیل را سفارشی کنید:

imapClient.setAllowedAuthentication(ImapKnownAuthenticationType.Plain);

اتصال به سرور در حالت فقط‑خواندنی

این ImapClient کلاس یک ReadOnly ویژگی که هنگامی که به true تنظیم شود، نشان می‌دهد که هیچ تغییری در وضعیت دائمی صندوق پست اعمال نشود. نمونه کد زیر استفاده از ImapClient.ReadOnly ویژگی. تعداد پیام‌های نخوانده را میگیرد، سپس یک پیام را واکشی می‌کند و دوباره تعداد پیام‌های نخوانده را در حالت فقط‑خواندنی میگیرد. تعداد پیام‌های نخوانده همان‌جا می‌ماند که نشان می‌دهد وضعیت دائمی صندوق پست تغییر نکرده است.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
ImapClient imapClient = new ImapClient();
imapClient.setHost("<HOST>");
imapClient.setPort(993);
imapClient.setUsername("<USERNAME>");
imapClient.setPassword("<PASSWORD>");
imapClient.setSupportedEncryption(EncryptionProtocols.Tls);
imapClient.setSecurityOptions(SecurityOptions.SSLImplicit);

ImapQueryBuilder imapQueryBuilder = new ImapQueryBuilder();
imapQueryBuilder.hasNoFlags(ImapMessageFlags.isRead()); /* get unread messages. */
MailQuery query = imapQueryBuilder.getQuery();

imapClient.setReadOnly(true);
imapClient.selectFolder("Inbox");
ImapMessageInfoCollection messageInfoCol = imapClient.listMessages(query);
System.out.println("Initial Unread Count: " + messageInfoCol.size());
if (messageInfoCol.size() > 0) {
    imapClient.fetchMessage(messageInfoCol.get_Item(0).getSequenceNumber());

    messageInfoCol = imapClient.listMessages(query);
    // This count will be equal to the initial count
    System.out.println("Updated Unread Count: " + messageInfoCol.size());
} else {
    System.out.println("No unread messages found");
}

استفاده از احراز هویت CRAM-MD5 برای اتصال به یک سرور

برای اطمینان از احراز هویت و ارتباط ایمن با سرور IMAP، می‌توانید استفاده از CRAM-MD5 را به عنوان روش احراز هویت مجاز برای کلاینت IMAP مشخص و اعمال کنید. کد زیر نشان می‌دهد چگونه نوع احراز هویت مجاز را برای ImapClient:

imapClient.setAllowedAuthentication(ImapKnownAuthenticationType.CramMD5);

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

گاهی لازم است اعتبارسنجی اعتبارها بدون ارسال ایمیل انجام شود. Aspose.Email فراهم می‌کند validateCredentials() متد برای انجام این عملیات. اگر اعتبارسنجی موفق باشد، کد داخل شرط if اجرا می‌شود که معمولاً برای انجام اقدامات بیشتر یا دریافت داده‌ها از سرور IMAP استفاده می‌شود. قطعه کد زیر اعتبار اعتبارنامه‌ها را بدون ارسال ایمیل نشان می‌دهد:

try (ImapClient imapClient = new ImapClient(
        server.ImapUrl, server.ImapPort, "username", "password", SecurityOptions.Auto)) {
    imapClient.setTimeout(4000);

    if (imapClient.validateCredentials()) {
        // to do something
    }
}

نحوه تنظیم زمان انتظار برای عملیات ایمیل

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

try (ImapClient imapClient = new ImapClient("host", 993, "username", "password", SecurityOptions.SSLImplicit))
{
    imapClient.setTimeout(60000); // 60 seconds

    // some code...
}

چگونه زمان‌سنجی خوشامدگویی را محدود کنیم

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

ImapClient imapClient = new ImapClient();
imapClient.setGreetingTimeout(4000);