Работа със съобщения от сървъра

Contents
[ ]

Получаване на информация за пощенската кутия

Можем да получим информация за пощенската кутия, като броя на съобщенията и размера й, използвайки getMailBoxSize и getMailBoxInfo методи на Pop3Client клас.

  • Този getMailBoxSize метод, който връща размера на пощенската кутия в байтове.
  • Този getMailBoxInfo метод, който връща обект от тип Pop3MailBoxInfo.

Също така е възможно да се получи броя на съобщенията, използвайки 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();
}

Извличане на имейл съобщения

Този 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 може да извлече кратка информация за съобщение от сървъра, използвайки уникалното ID на съобщението. Това осигурява бърз достъп до кратка информация за съобщението, без първо да се извлича цялото съобщение от сървъра. Следният кодов пример показва как да извлечете кратка информация за съобщението.

// 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());
}

Филтриране на съобщения по изпращач, получател или дата

Този 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);