Работа с сообщениями с сервера
Получение данных почтового ящика
Мы можем получить информацию о почтовом ящике, такую как количество сообщений и размер почтового ящика, используя getMailBoxSize and getMailBoxInfo методы Pop3Client class.
- The getMailBoxSize метод возвращает размер почтового ящика в байтах.
- The 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
// Создайте экземпляр 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();
}
Получение сообщений электронной почты
The Pop3Client компонент класса предоставляет возможность извлекать сообщения электронной почты с сервера POP3 и преобразовывать их в MailMessage экземпляр с помощью MailMessage компоненты. MailMessage класс содержит несколько свойств и методов для управления содержимым электронной почты. Используя fetchMessage метод Pop3Client класс, вы можете получить MailMessage экземпляр непосредственно с сервера POP3. В следующем фрагменте кода показано, как получить полное сообщение электронной почты с сервера POP3.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Создайте экземпляр 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();
// Создайте экземпляр 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();
}
Получение сводной информации о сообщении с использованием уникального идентификатора
Клиент API POP3 может получать сводную информацию о сообщении с сервера, используя уникальный идентификатор сообщения. Это обеспечивает быстрый доступ к краткой информации о сообщении без предварительного получения полного сообщения с сервера. В следующем фрагменте кода показано, как получить сводную информацию о сообщении.
// 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
// Создайте экземпляр 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 class saveMessage функция. saveMessage функция не анализирует сообщение электронной почты, поэтому оно работает быстрее, чем fetchMessage функция. В следующем фрагменте кода показано, как сохранить сообщение по порядковому номеру, в данном случае — по номеру 1. 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";
// Создайте экземпляр 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/";
// Создайте экземпляр 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 метод, который принимает итерацию последовательных номеров или уникальных идентификаторов и возвращает список MailMessage. Следующий фрагмент кода демонстрирует использование fetchMessages метод получения сообщений по порядковым номерам и уникальному идентификатору.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Создайте экземпляр 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());
}
Фильтрация сообщений по отправителю, получателю или дате
The Pop3Client класс, описанный в Подключение к серверу POP3, предоставляет listMessages метод, который получает все сообщения из почтового ящика. Чтобы получать только сообщения, соответствующие определенному условию, используйте перегруженный listMessages метод, который принимает MailQuery в качестве аргумента. MailQuery класс предоставляет различные свойства для указания условий запроса, например дату, тему, отправитель, получатель и т. д. MailQueryBuilder класс используется для построения поискового выражения. Сначала задаются все условия и ограничения, а затем MailQuery заполняется запросом, разработанным MailQueryBuilder. MailQuery объект класса используется Pop3Client для извлечения отфильтрованной информации с сервера. В этой статье показано, как фильтровать сообщения электронной почты из почтового ящика. В первом примере показано, как фильтровать сообщения по дате и теме. Мы также покажем, как фильтровать по другим критериям и создавать более сложные запросы. Также показано применение фильтра даты и времени для извлечения определенных писем из почтового ящика. Кроме того, в нем также показано, как применять фильтрацию с учетом регистра символов.
Фильтрация сообщений из почтового ящика
Чтобы отфильтровать сообщения из почтового ящика, выполните следующие действия
- Подключение к серверу POP3 и вход на него.
- Создайте экземпляр MailQuery и задайте нужные свойства.
- Позвоните Сообщения POP3Client.List (запрос MailQuery) метод и передайте MailQuery в параметрах, чтобы получать только отфильтрованные сообщения.
В следующем фрагменте кода показано, как подключиться к почтовому ящику POP3 и получать сообщения, пришедшие сегодня и содержащие слово «информационный бюллетень» в теме.
// 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
В следующем фрагменте кода показано, как комбинировать запросы с 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 обеспечивает or метод, который требует двух MailQuery экземпляры в качестве параметров. Он получает сообщения, соответствующие любому из двух указанных условий. В следующем фрагменте кода показано, как фильтровать сообщения, в теме которых указано слово «test» или «noreply@host.com» в качестве отправителя. В следующем фрагменте кода показано, как комбинировать запросы с OR.
// 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 (строковое значение, логическое значение IgnoreCase)
- Метод StringComparisonField.equals (строковое значение, логическое значение IgnoreCase)
- Метод StringComparisonField.notContains (строка булева, логическое значение игнорирует регистр)
- Метод StringComparisonField.noEquals (строка логическое значение, логическое значение 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);