Работа с сообщениями с сервера
Получение информации о ящике
Мы можем получить информацию о ящике, например количество сообщений и размер ящика, используя getMailBoxSize и getMailBoxInfo методы Pop3Client класс.
- Этот getMailBoxSize метод возвращает размер ящика в байтах.
- Этот getMailBoxInfo метод возвращает объект типа Pop3MailBoxInfo.
Также можно получить количество сообщений с помощью MessageCount свойство и размер с использованием OccupiedSize свойство Pop3MailBoxInfo класс. В следующем примере кода показано, как получить информацию о ящике. Показано, как:
- Создайте Pop3Client.
- Подключиться к серверу POP3.
- Получить размер ящика.
- Получить информацию о ящике.
- Получить количество сообщений в ящике.
- Получить занятый размер.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
Pop3Client client = new Pop3Client();
// Specify host, username, password, Port and SecurityOptions for your client
client.setHost("pop.gmail.com");
client.setUsername("your.username@gmail.com");
client.setPassword("your.password");
client.setPort(995);
client.setSecurityOptions(SecurityOptions.Auto);
// Get the size of the mailbox, Get mailbox info, number of messages in the mailbox
long nSize = client.getMailboxSize();
System.out.println("Mailbox size is " + nSize + " bytes.");
Pop3MailboxInfo info = client.getMailboxInfo();
int nMessageCount = info.getMessageCount();
System.out.println("Number of messages in mailbox are " + nMessageCount);
long nOccupiedSize = info.getOccupiedSize();
System.out.println("Occupied size is " + nOccupiedSize);
Получение количества писем в ящике
В следующем фрагменте кода показано, как подсчитать сообщения электронной почты в почтовом ящике.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
Pop3Client client = new Pop3Client("pop3.server.com", "username", "password");
try {
client.setSecurityOptions(SecurityOptions.Auto);
int i = client.getMessageCount();
System.out.println("Message count: " + i);
} catch (Pop3Exception ex) {
System.out.println("Error:" + ex.toString());
}
Aspose.Email позволяет разработчикам работать с электронными письмами различными способами. Например, они могут получить информацию о заголовках перед решением о загрузке письма. Либо они могут получить письма с сервера и сохранить их без разбора (быстрее) или после разбора (медленнее). В этой статье показано, как получать и конвертировать письма.
Получение информации о заголовках письма
Заголовки письма могут предоставить информацию о сообщении, которую можно использовать для решения, получать ли всё письмо целиком. Как правило, в заголовках содержатся отправитель, тема, дата получения и т.д. (Подробное описание заголовков писем находится в Настройка заголовков электронной почты. Эта тема специально о отправке письма через SMTP, но информация о заголовках письма остаётся актуальной для писем POP3). Следующие примеры показывают, как получить заголовки писем с POP3‑сервера по номеру последовательности сообщения.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Create an instance of the Pop3Client class
Pop3Client client = new Pop3Client();
// Specify host, username. password, Port and SecurityOptions for your client
client.setHost("pop.gmail.com");
client.setUsername("your.username@gmail.com");
client.setPassword("your.password");
client.setPort(995);
client.setSecurityOptions(SecurityOptions.Auto);
try {
HeaderCollection headers = client.getMessageHeaders(1);
for (int i = 0; i < headers.size(); i++) {
// Display key and value in the header collection
System.out.print(headers.getKey(i));
System.out.print(" : ");
System.out.println(headers.get(i));
}
} catch (Exception ex) {
System.out.println(ex.getMessage());
} finally {
client.dispose();
}
Получение сообщений электронной почты
Этот Pop3Client компонент класса предоставляет возможность получать сообщения электронной почты с сервера POP3 и разбирать их в MailMessage экземпляр с помощью MailMessage компоненты. The MailMessage класс содержит несколько свойств и методов для работы с содержимым письма. Используя fetchMessage метод Pop3Client класс, вы можете получить MailMessage экземпляр напрямую с POP3‑сервера. Следующий фрагмент кода показывает, как получить полное электронное сообщение с POP3‑сервера.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Create an instance of the Pop3Client class
Pop3Client client = new Pop3Client();
// Specify host, username, password, Port and SecurityOptions for your client
client.setHost("pop.gmail.com");
client.setUsername("your.username@gmail.com");
client.setPassword("your.password");
client.setPort(995);
client.setSecurityOptions(SecurityOptions.Auto);
try {
int messageCount = client.getMessageCount();
// Create an instance of the MailMessage class and Retrieve message
MailMessage message;
for (int i = 1; i <= messageCount; i++) {
message = client.fetchMessage(i);
System.out.println("From:" + message.getFrom());
System.out.println("Subject:" + message.getSubject());
System.out.println(message.getHtmlBody());
}
} catch (Exception ex) {
System.out.println(ex.getMessage());
} finally {
client.dispose();
}
Получение краткой информации о сообщении с использованием уникального Id
POP3‑клиент API может получать краткую информацию о сообщении с сервера, используя уникальный идентификатор сообщения. Это обеспечивает быстрый доступ к короткой информации о сообщении без предварительного получения полного сообщения с сервера. Следующий фрагмент кода показывает, как получить краткую информацию о сообщении.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
String uniqueId = "unique id of a message from server";
Pop3Client client = new Pop3Client("host.domain.com", 456, "username", "password");
client.setSecurityOptions(SecurityOptions.Auto);
Pop3MessageInfo messageInfo = client.getMessageInfo(uniqueId);
if (messageInfo != null) {
System.out.println(messageInfo.getSubject());
System.out.println(messageInfo.getDate());
}
Получение сообщений с MultiConnection
Pop3Client предоставляет UseMultiConnection Свойство, которое может использоваться для создания нескольких соединений при тяжёлых операциях. Вы также можете задать количество соединений, используемых в режиме мультисоединения, используя Pop3Client.ConnectionsQuantity. Следующий фрагмент кода демонстрирует использование режима многоподключения для получения списка сообщений и сравнивает его производительность с режимом одно подключение.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Create an instance of the Pop3Client class
Pop3Client pop3Client = new Pop3Client();
pop3Client.setHost("<HOST>");
pop3Client.setPort(995);
pop3Client.setUsername("<USERNAME>");
pop3Client.setPassword("<PASSWORD>");
pop3Client.setConnectionsQuantity(5);
pop3Client.setUseMultiConnection(MultiConnectionMode.Enable);
long multiConnectionModeStartTime = System.currentTimeMillis();
Pop3MessageInfoCollection messageInfoCol1 = pop3Client.listMessages();
long multiConnectionModeTimeSpan = System.currentTimeMillis() - multiConnectionModeStartTime;
pop3Client.setUseMultiConnection(MultiConnectionMode.Disable);
long singleConnectionModeStartTime = System.currentTimeMillis();
Pop3MessageInfoCollection messageInfoCol2 = pop3Client.listMessages();
long singleConnectionModeTimeSpan = System.currentTimeMillis() - singleConnectionModeStartTime;
System.out.println("multyConnectionModeTimeSpan: " + multiConnectionModeTimeSpan);
System.out.println("singleConnectionModeTimeSpan: " + singleConnectionModeTimeSpan);
double performanceRelation = singleConnectionModeTimeSpan / multiConnectionModeTimeSpan;
System.out.println("Performance Relation: " + performanceRelation);
Получение сообщений с сервера и сохранение на диск
Сохранить сообщение на диск без разбора
Если вы хотите загружать сообщения электронной почты с POP3‑сервера без их разбора, используйте Pop3Client класс saveMessage функция. The saveMessage функция не разбирает сообщение электронной почты, поэтому она быстрее, чем fetchMessage функция. Следующий фрагмент кода показывает, как сохранить сообщение по его номеру последовательности, в данном случае номер 1. The saveMessage метод сохраняет сообщение в оригинальном формате EML без разбора.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// The path to the File directory.
String dataDir = "pop3/";
String dstEmail = dataDir + "InsertHeaders.eml";
// Create an instance of the Pop3Client class
Pop3Client client = new Pop3Client();
// Specify host, username, password, Port and SecurityOptions for your client
client.setHost("pop.gmail.com");
client.setUsername("your.username@gmail.com");
client.setPassword("your.password");
client.setPort(995);
client.setSecurityOptions(SecurityOptions.Auto);
try {
// Save message to disk by message sequence number
client.saveMessage(1, dstEmail);
client.dispose();
} catch (Exception ex) {
System.out.println(ex.getMessage());
}
System.out.println("Retrieved email messages using POP3 ");
Разобрать сообщение перед сохранением
В следующем фрагменте кода используется Pop3Client fetchMessage метод для получения сообщения с POP3‑сервера по номеру последовательности, затем сохранения сообщения на диск с использованием темы как имени файла.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// The path to the File directory.
String dataDir = "pop3/";
// Create an instance of the Pop3Client class
Pop3Client client = new Pop3Client();
// Specify host, username and password, Port and SecurityOptions for your client
client.setHost("pop.gmail.com");
client.setUsername("your.username@gmail.com");
client.setPassword("your.password");
client.setPort(995);
client.setSecurityOptions(SecurityOptions.Auto);
try {
// Fetch the message by its sequence number and Save the message using its subject as the file name
MailMessage msg = client.fetchMessage(1);
msg.save(dataDir + "first-message_out.eml", SaveOptions.getDefaultEml());
client.dispose();
} catch (Exception ex) {
System.out.println(ex.getMessage());
} finally {
client.dispose();
}
Групповое получение сообщений
Pop3Client предоставляет fetchMessages метод, который принимает итерируемый набор номеров последовательности или уникальных ID и возвращает список MailMessage. Следующий фрагмент кода демонстрирует использование fetchMessages метод для получения сообщений по номерам последовательности и уникальному идентификатору.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Create an instance of the Pop3Client class
Pop3Client pop3Client = new Pop3Client();
pop3Client.setHost("<HOST>");
pop3Client.setPort(995);
pop3Client.setUsername("<USERNAME>");
pop3Client.setPassword("<PASSWORD>");
Pop3MessageInfoCollection messageInfoCol = pop3Client.listMessages();
System.out.println("ListMessages Count: " + messageInfoCol.size());
List<Integer> sequenceNumberAr = new ArrayList<Integer>();
List<String> uniqueIdAr = new ArrayList<String>();
for (Pop3MessageInfo mi : messageInfoCol) {
sequenceNumberAr.add(mi.getSequenceNumber());
uniqueIdAr.add(mi.getUniqueId());
}
for (MailMessage m : pop3Client.fetchMessagesBySequences(sequenceNumberAr)) {
System.out.println("FetchMessages-sequenceNumberAr : " + m.getSubject());
}
for (MailMessage m : pop3Client.fetchMessagesByUids(uniqueIdAr)) {
System.out.println("FetchMessages-uniqueIdAr : " + m.getSubject());
}
Фильтрация сообщений по отправителю, получателю или дате
Этот Pop3Client класс, описанный в Подключение к POP3‑серверу, предоставляет listMessages метод, который получает все сообщения из ящика. Чтобы получить только сообщения, соответствующие некоторому условию, используйте перегруженный listMessages метод, который принимает MailQuery в качестве аргумента. The MailQuery класс предоставляет различные свойства для указания условий поиска, например, дата, тема, отправитель, получатель и т.д. The MailQueryBuilder класс используется для построения поискового выражения. Сначала задаются все условия и ограничения, а затем MailQuery заполняется запросом, разработанным MailQueryBuilder. Это MailQuery объект класса используется Pop3Client для извлечения отфильтрованной информации с сервера. В этой статье показано, как фильтровать электронные сообщения из ящика. Первый пример иллюстрирует фильтрацию сообщений по дате и теме. Мы также показываем, как фильтровать по другим критериям и как строить более сложные запросы. Кроме того, демонстрируется применение фильтра даты и времени для получения конкретных писем из ящика. Кроме того, показано, как применять чувствительную к регистру фильтрацию.
Фильтрация сообщений из ящика
Чтобы отфильтровать сообщения из ящика:
- Подключиться и войти на POP3‑сервер.
- Создайте экземпляр MailQuery и задать нужные свойства.
- Вызвать Pop3Client.listMessages(MailQuery query) метод и передайте MailQuery в параметрах, чтобы получить только отфильтрованные сообщения.
В следующем фрагменте кода показано, как подключиться к POP3‑ящику и получить сообщения, пришедшие сегодня и содержащие слово "newsletter" в теме.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Connect and log in to POP3
String host = "host";
int port = 110;
String username = "user@host.com";
String password = "password";
Pop3Client client = new Pop3Client(host, port, username, password);
// Set conditions, Subject contains "Newsletter", Emails that arrived today
MailQueryBuilder builder = new MailQueryBuilder();
builder.getSubject().contains("Newsletter");
builder.getInternalDate().on(new Date());
// Build the query and Get list of messages
MailQuery query = builder.getQuery();
Pop3MessageInfoCollection messages = client.listMessages(query);
System.out.println("Pop3: " + messages.size() + " message(s) found.");
Получение сообщений, соответствующих определённым критериям
Приведённые выше образцы кода фильтрует сообщения по теме письма и дате. Мы также можем использовать другие свойства для задания поддерживаемых условий. Ниже приведены несколько примеров установки условий с использованием MailQuery.
Следующие фрагменты кода показывают, как фильтровать письма по другим критериям:
- Найти письма, доставленные сегодня.
- Найти письма, полученные в диапазоне.
- Найти письма от конкретного отправителя.
- Найти письма, отправленные с конкретного домена.
- Найти письма, отправленные конкретному получателю.
Сегодняшняя дата
В следующем фрагменте кода показано, как найти письма, доставленные сегодня.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Emails that arrived today
MailQueryBuilder builder = new MailQueryBuilder();
builder.getInternalDate().on(new Date());
Диапазон дат
В следующем фрагменте кода показано, как найти письма, полученные в диапазоне.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Emails that arrived in last 7 days
Calendar calendar = Calendar.getInstance();
builder.getInternalDate().before(calendar.getTime());
calendar.add(Calendar.DATE, -7);
builder.getInternalDate().since(calendar.getTime());
Конкретный отправитель
В следующем фрагменте кода показано, как найти письма от конкретного отправителя.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Get emails from specific sender
builder.getFrom().contains("saqib.razzaq@127.0.0.1");
Конкретный домен
В следующем фрагменте кода показано, как найти письма, отправленные с конкретного домена.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Get emails from specific domain
builder.getFrom().contains("SpecificHost.com");
Конкретный получатель
В следующем фрагменте кода показано, как найти письма, отправленные конкретному получателю.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Get emails sent to specific recipient
builder.getTo().contains("recipient");
Создание сложных запросов
Если разные MailQueryBuilder свойства задаются в отдельных операторах, затем все условия будут совпадать. Например, если мы хотим получить сообщения в диапазоне дат и от конкретного хоста, нам нужно написать три оператора.
Комбинирование запросов с AND
В следующем фрагменте кода показано, как комбинировать запросы с помощью И.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Emails from specific host, get all emails that arrived before today and all emails that arrived since 7 days ago
builder.getFrom().contains("SpecificHost.com");
Calendar calendar = Calendar.getInstance();
builder.getInternalDate().before(calendar.getTime());
calendar.add(Calendar.DATE, -7);
builder.getInternalDate().since(calendar.getTime());
Комбинирование запросов с OR
MailQueryBuilder предоставляет или метод, принимающий два MailQuery экземпляры в качестве параметров. Он получает сообщения, которые соответствуют любому из двух указанных условий. В следующем фрагменте кода показано, как фильтровать сообщения, у которых в теме присутствует "test" или отправителем является "noreply@host.com". Далее показано, как комбинировать запросы с помощью ИЛИ.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Specify OR condition
builder.or(builder.getSubject().contains("test"), builder.getFrom().contains("noreply@host.com"));
Применение чувствительных к регистру фильтров
API также предоставляет возможность фильтровать письма из ящика на основе чувствительных к регистру критериев. Следующие методы позволяют выполнять поиск писем с указанием флага чувствительности к регистру.
- Метод StringComparisonField.contains(String value, boolean ignoreCase)
- Метод StringComparisonField.equals(String value, boolean ignoreCase)
- Метод StringComparisonField.notContains(String boolean, bool ignoreCase)
- Метод StringComparisonField.notEquals(String boolean, bool ignoreCase)
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// IgnoreCase is True
MailQueryBuilder builder1 = new MailQueryBuilder();
builder1.getFrom().contains("tesT", true);
MailQuery query1 = builder1.getQuery();
Pop3MessageInfoCollection messageInfoCol1 = client.listMessages(query1);