Kết nối tới máy chủ IMAP
Cái ImapClient lớp cho phép các ứng dụng quản lý hộp thư IMAP bằng giao thức IMAP. ImapClient lớp được sử dụng để kết nối tới máy chủ thư IMAP và quản lý email trong các thư mục email IMAP. Để kết nối tới máy chủ IMAP
- Tạo một đối tượng của ImapClient lớp.
- Xác định tên máy, tên người dùng và mật khẩu trong ImapClient constructor.
Khi ImapClient phiên bản được khởi tạo, lần gọi tiếp theo tới bất kỳ thao tác nào sử dụng phiên bản này sẽ kết nối tới máy chủ. Đoạn mã sau cho bạn thấy cách kết nối tới máy chủ IMAP bằng các bước trên.
// 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");
Kết nối với máy chủ IMAP hỗ trợ SSL
Kết nối với máy chủ IMAP mô tả cách kết nối tới máy chủ IMAP trong bốn bước đơn giản:
- Tạo một đối tượng của ImapClient lớp.
- Xác định tên máy, tên người dùng và mật khẩu.
- Xác định cổng.
- Chỉ định Các tùy chọn bảo mật.
Quá trình kết nối tới máy chủ IMAP hỗ trợ SSL tương tự nhưng yêu cầu bạn đặt một vài thuộc tính khác:
- Thiết lập Các tùy chọn bảo mật đến SSLImplicit.
Đoạn mã sau cho thấy cách
- Đặt tên người dùng, mật khẩu và cổng.
- Đặt tùy chọn bảo mật.
// 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);
Kết nối tới Máy chủ qua Proxy
Các máy chủ proxy thường được dùng để giao tiếp với bên ngoài. Trong các trường hợp như vậy, các khách hàng email không thể giao tiếp qua Internet nếu không chỉ định địa chỉ proxy. Aspose.Email hỗ trợ các phiên bản 4, 4a và 5 của giao thức proxy SOCKS. Bài viết này cung cấp một mẫu thực tế về cách truy cập hộp thư bằng máy chủ proxy. Để truy cập hộp thư qua máy chủ proxy:
- Khởi tạo SocksProxy với thông tin cần thiết, bao gồm địa chỉ proxy, cổng và phiên bản SOCKS.
- Khởi tạo ImapClient với địa chỉ host, tên người dùng, mật khẩu và bất kỳ cài đặt nào khác.
- Thiết lập máy khách SocksProxy thuộc tính cho SocksProxy đối tượng được tạo ở trên.
Đoạn mã sau cho bạn thấy cách truy xuất hộp thư qua máy chủ proxy.
// 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());
}
Kết nối tới máy chủ qua 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();
}
Tùy chỉnh Cơ chế Xác thực
Lấy danh sách các cơ chế xác thực được máy chủ IMAP hỗ trợ bằng cách sử dụng getSupportedAuthentication phương thức của ImapClient lớp. Phương thức này cho phép client xác định những phương thức xác thực nào có sẵn để thiết lập kết nối bảo mật với máy chủ. Sau đó, bằng cách sử dụng setAllowedAuthentication phương thức lấy (hoặc đặt) danh sách các kiểu xác thực mà người dùng cho phép, chọn cơ chế xác thực phù hợp nhất cho giao tiếp client‑server. Điều này cho phép bạn đặt phương thức xác thực cho client mail một cách rõ ràng.
Đoạn mã mẫu dưới đây cho thấy cách tùy chỉnh xác thực client email:
imapClient.setAllowedAuthentication(ImapKnownAuthenticationType.Plain);
Kết nối tới máy chủ ở chế độ chỉ đọc
Cái ImapClient lớp cung cấp một ReadOnly thuộc tính khi được đặt thành true, chỉ ra rằng không nên thay đổi trạng thái cố định của hộp thư. Mẫu mã sau minh họa việc sử dụng ImapClient.ReadOnly thuộc tính. Nó lấy số lượng tin nhắn chưa đọc, sau đó lấy một tin nhắn và lại lấy số lượng tin nhắn chưa đọc trong chế độ chỉ đọc. Số lượng tin nhắn chưa đọc vẫn giữ nguyên cho thấy trạng thái cố định của hộp thư không bị thay đổi.
// 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");
}
Sử dụng xác thực CRAM-MD5 để Kết nối tới Máy chủ
Để đảm bảo xác thực và giao tiếp an toàn với máy chủ IMAP, bạn có thể chỉ định và buộc sử dụng CRAM-MD5 làm phương thức xác thực cho phép cho máy khách IMAP. Đoạn mã sau cho thấy cách cấu hình kiểu xác thực cho phép cho ImapClient:
imapClient.setAllowedAuthentication(ImapKnownAuthenticationType.CramMD5);
Xác Thực Thông Tin Đăng Nhập Máy Chủ Mail mà Không Gửi Email
Đôi khi cần xác minh thông tin đăng nhập mà không gửi email. Aspose.Email cung cấp validateCredentials() phương thức thực hiện thao tác này. Nếu việc xác thực thành công, đoạn mã bên trong câu lệnh if sẽ được thực thi, thường được dùng để thực hiện các hành động tiếp theo hoặc lấy dữ liệu từ máy chủ IMAP. Đoạn mã sau minh họa việc xác thực thông tin đăng nhập mà không gửi email:
try (ImapClient imapClient = new ImapClient(
server.ImapUrl, server.ImapPort, "username", "password", SecurityOptions.Auto)) {
imapClient.setTimeout(4000);
if (imapClient.validateCredentials()) {
// to do something
}
}
Cách Đặt Thời Gian Chờ cho Các Thao Tác Mail
Mỗi thao tác mail mất một khoảng thời gian tùy thuộc vào nhiều yếu tố (độ trễ mạng, kích thước dữ liệu, hiệu suất máy chủ, v.v.). Bạn có thể đặt thời gian chờ cho tất cả các thao tác mail. Ví dụ mã dưới đây cho bạn thấy cách thực hiện điều đó bằng cách sử dụng Thời gian chờ thuộc tính. Lưu ý: bạn không nên đặt giá trị quá lớn để tránh thời gian chờ lâu trong ứng dụng của bạn.
try (ImapClient imapClient = new ImapClient("host", 993, "username", "password", SecurityOptions.SSLImplicit))
{
imapClient.setTimeout(60000); // 60 seconds
// some code...
}
Cách hạn chế thời gian chờ Greeting
Máy khách IMAP có thể sử dụng chế độ tự động để thiết lập kết nối. Trong chế độ này, máy khách IMAP sẽ thử tất cả các tham số kết nối có thể cho đến khi kết nối được thiết lập. Một máy chủ IMAP trong trường hợp kết nối đúng sẽ gửi một chuỗi chào tới máy khách. Các máy chủ có thể sử dụng khởi tạo kết nối SSL/TLS ngầm định hoặc rõ ràng (START TLS). Nếu chế độ kết nối không khớp (ví dụ, máy chủ chờ một kết nối SSL ngầm định nhưng máy khách cố gắng thiết lập một kết nối không bảo mật hoặc SSL rõ ràng), máy chủ sẽ không gửi chuỗi chào và người dùng sẽ phải chờ lâu cho đến khi hết thời gian chờ và máy khách chuyển sang tùy chọn kết nối tiếp theo. Để tránh vấn đề này, đã giới thiệu thuộc tính GreetingTimeout. Thuộc tính này cho phép bạn đặt thời gian chờ cho chuỗi chào, giảm thời gian thiết lập kết nối tự động.
ImapClient imapClient = new ImapClient();
imapClient.setGreetingTimeout(4000);