Робота з повідомленнями з сервера

Contents
[ ]

Отримання інформації про скриньку

Ми можемо отримати інформацію про скриньку, таку як кількість повідомлень та розмір скриньки, використовуючи getMailBoxSize і getMailBoxInfo методи Pop3Client клас.

Також можливо отримати кількість повідомлень за допомогою MessageCount властивість та розмір за допомогою OccupiedSize властивість Pop3MailBoxInfo клас. Наступний приклад коду показує, як отримати інформацію про скриньку. Він показує, як:

  1. Створіть Pop3Client.
  2. Підключитися до POP3 сервера.
  3. Отримати розмір скриньки.
  4. Отримати інформацію про скриньку.
  5. Отримати кількість повідомлень у скриньці.
  6. Отримати зайнятий розмір.
// 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();
}

Отримання електронних листів

The 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 функція. 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";

// 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 метод, який приймає ітерабельну колекцію номерів послідовності або унікальних ідентифікаторів і повертає список 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());
}

Фільтрація повідомлень за відправником, отримувачем або датою

The Pop3Client клас, описаний у Підключення до POP3‑сервера, надає listMessages метод, який отримує всі повідомлення зі скриньки. Щоб отримати лише повідомлення, що відповідають певній умові, використовуйте перевантажений listMessages метод, який приймає MailQuery як аргумент. MailQuery клас надає різні властивості для вказання умов запиту, наприклад, дата, тема, відправник, отримувач тощо.  MailQueryBuilder клас використовується для створення виразу пошуку. Спочатку встановлюються всі умови та обмеження, а потім MailQuery заповнюється запитом, розробленим MailQueryBuilder. The MailQuery об’єкт класу використовується Pop3Client для витягнення відфільтрованої інформації з сервера. У цій статті показано, як фільтрувати електронні листи зі скриньки. Перший приклад ілюструє фільтрацію повідомлень за датою та темою. Ми також показуємо, як фільтрувати за іншими критеріями та як будувати більш складні запити. Також демонструється застосування фільтру дати і часу для отримання конкретних листів зі скриньки. Крім того, показано, як застосовувати чутливе до регістру фільтрування.

Фільтрація повідомлень зі скриньки

Щоб фільтрувати повідомлення зі скриньки:

  1. Підключитися та ввійти в POP3 сервер.
  2. Створіть екземпляр MailQuery і встановити потрібні властивості.
  3. Викличте 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

Наступний фрагмент коду показує, як поєднувати запити за допомогою 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". Наступний фрагмент коду показує, як поєднувати запити за допомогою 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(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);