เชื่อมต่อกับเซิร์ฟเวอร์ IMAP

นี้ ImapClient คลาสนี้อนุญาตให้แอปพลิเคชันจัดการกล่องเมล IMAP ด้วยโปรโตคอล IMAP. ImapClient คลาสนี้ใช้เชื่อมต่อกับเซิร์ฟเวอร์เมล IMAP และจัดการอีเมลในโฟลเดอร์ IMAP เพื่อเชื่อมต่อกับเซิร์ฟเวอร์ IMAP

  1. สร้างอินสแตนซ์ของ ImapClient คลาส.
  2. ระบุ hostname, username, และ password ใน คอนสตรัคเตอร์ 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. ระบุ hostname, username, และ password.
  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);

เชื่อมต่อกับเซิร์ฟเวอร์ผ่าน Proxy

เซิร์ฟเวอร์พร็อกซีมักใช้ในการสื่อสารกับภายนอก ในกรณีดังกล่าว ไคลเอนต์อีเมลไม่สามารถสื่อสารผ่านอินเทอร์เน็ตได้หากไม่ได้ระบุที่อยู่พร็อกซี Aspose.Email ให้การสนับสนุนเวอร์ชัน 4, 4a และ 5 ของโปรโตคอล SOCKS Proxy บทความนี้ให้ตัวอย่างการเข้าถึงกล่องจดหมายโดยใช้เซิร์ฟเวอร์เมลพร็อกซี เพื่อเข้าถึงกล่องจดหมายผ่านเซิร์ฟเวอร์พร็อกซี:

  1. Initialize SocksProxy ด้วยข้อมูลที่ต้องการ ได้แก่ ที่อยู่พร็อกซี, พอร์ต, และเวอร์ชันของ SOCKS
  2. Initialize 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 Proxy

// 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 class. วิธีการนี้ทำให้ไคลเอนต์สามารถกำหนดว่ามีวิธีการรับรองความถูกต้องใดบ้างที่ใช้ได้สำหรับการสร้างการเชื่อมต่อที่ปลอดภัยกับเซิร์ฟเวอร์ จากนั้นโดยใช้ setAllowedAuthentication method ที่รับ (หรือกำหนด) การ列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列列ต่อ…

ตัวอย่างโค้ดต่อไปนี้แสดงวิธีปรับแต่งการรับรองความถูกต้องของไคลเอนต์อีเมล:

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...
}

วิธีจำกัด Greeting Timeout

ไคลเอนต์ IMAP อาจใช้โหมดอัตโนมัติเพื่อสร้างการเชื่อมต่อ ในโหมดนี้ ไคลเอนต์ IMAP จะลองพารามิเตอร์การเชื่อมต่อทั้งหมดจนกว่าจะเชื่อมต่อสำเร็จ เซิร์ฟเวอร์ IMAP หากเชื่อมต่อถูกต้องจะส่งสตริงทักทายไปยังไคลเอนต์ เซิร์ฟเวอร์อาจใช้การเริ่มต้นการเชื่อมต่อ SSL/TLS แบบโดยอัตโนมัติหรือแบบชัดแจ้ง (START TLS) หากโหมดการเชื่อมต่อไม่ตรงกัน (เช่น เซิร์ฟเวอร์รอการเชื่อมต่อ SSL แบบโดยอัตโนมัติแต่ไคลเอนต์พยายามเชื่อมต่อแบบไม่ปลอดภัยหรือ SSL แบบชัดแจ้ง) เซิร์ฟเวอร์จะไม่ส่งสตริงทักทายและผู้ใช้จะต้องรอจนถึงเวลาหมดเวลาเพื่อให้สตริงทักทายปรากฏ แล้วไคลเอนต์จะลองตัวเลือกการเชื่อมต่อถัดไป เพื่อหลีกเลี่ยงปัญหานี้ ได้มีการแนะนำ GreetingTimeout คุณสมบัตินี้ช่วยให้ตั้งค่าเวลา timeout สำหรับสตริงทักทายและลดระยะเวลาการเชื่อมต่ออัตโนมัติ

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