Подключение к IMAP‑серверу
Этот ImapClient класс позволяет приложениям управлять IMAP‑почтовыми ящиками с помощью протокола IMAP. ImapClient класс используется для подключения к IMAP‑почтовым серверам и управления письмами в IMAP‑папках. Чтобы подключиться к IMAP‑серверу
- Создать экземпляр ImapClient класс.
- Укажите имя хоста, имя пользователя и пароль в Конструктор 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‑серверу в четыре простых шага:
- Создать экземпляр ImapClient класс.
- Укажите имя хоста, имя пользователя и пароль.
- Укажите порт.
- Укажите Параметры безопасности.
Процесс подключения к IMAP‑серверу с включённым SSL похож, но требует задать несколько дополнительных свойств:
- Установить Параметры безопасности к SSLImplicit.
Ниже показан фрагмент кода, демонстрирующий, как
- Установите имя пользователя, пароль и порт.
- Установите параметр безопасности.
// 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‑прокси. В этой статье приведён рабочий пример доступа к ящику с помощью прокси‑почтового сервера. Чтобы получить доступ к ящику через прокси‑сервер:
- Инициализировать SocksProxy с требуемой информацией, то есть адресом прокси, портом и версией SOCKS.
- Инициализировать ImapClient с адресом хоста, именем пользователя, паролем и другими настройками.
- Установите клиент 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
}
}
Как установить тайм‑аут для почтовых операций
Каждая почтовая операция занимает время, зависящее от множества факторов (сетевые задержки, размер данных, производительность сервера и т.д.). Вы можете установить тайм‑аут для всех почтовых операций. Пример кода ниже показывает, как это сделать с помощью Тайм‑аут свойство. Примечание: не следует задавать большие значения, чтобы избежать длительного ожидания в приложении.
try (ImapClient imapClient = new ImapClient("host", 993, "username", "password", SecurityOptions.SSLImplicit))
{
imapClient.setTimeout(60000); // 60 seconds
// some code...
}
Как ограничить тайм‑аут приветствия
IMAP‑клиент может использовать автоматический режим для установления соединения. В этом режиме клиент перебирает все возможные параметры соединения, пока соединение не будет установлено. При корректном соединении IMAP‑сервер отправляет клиенту строку приветствия. Серверы могут использовать неявное или явное (START TLS) инициализацию SSL/TLS соединения. Если режим соединения не совпадает (например, сервер ожидает неявное SSL‑соединение, а клиент пытается установить незащищённое или явное SSL‑соединение), сервер не отправит строку приветствия, и пользователь будет ждать длительное время, пока не сработает тайм‑аут, после чего клиент перейдёт к следующему варианту соединения. Чтобы избежать этой проблемы, был введён параметр GreetingTimeout. Этот параметр позволяет задать тайм‑аут для строки приветствия и сократить время автоматического установления соединения.
ImapClient imapClient = new ImapClient();
imapClient.setGreetingTimeout(4000);