Práce se zprávami ze serveru

Získání informací o poštovní schránce

Můžeme získat informace o poštovní schránce, například počet zpráv a velikost schránky, pomocí getMailBoxSize a getMailBoxInfo metody z Pop3Client třída.

Je také možné získat počet zpráv pomocí MessageCount vlastnost a velikost pomocí OccupiedSize vlastnost třídy Pop3MailBoxInfo třída. Následující ukázkový kód ukazuje, jak získat informace o poštovní schránce. Ukazuje, jak:

  1. Vytvořte Pop3Client.
  2. Připojit se k POP3 serveru.
  3. Získat velikost poštovní schránky.
  4. Získat informace o poštovní schránce.
  5. Získat počet zpráv v poštovní schránce.
  6. Získat obsazenou velikost.
// 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);

Získání počtu e‑mailů v poštovní schránce

Následující úryvek kódu ukazuje, jak spočítat e‑mailové zprávy v poštovní schránce.

// 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 umožňuje vývojářům pracovat s e‑maily různými způsoby. Například mohou získat informace z hlavičky před rozhodnutím, zda e‑mail stáhnout. Nebo mohou e‑maily ze serveru načíst a uložit je bez parsování (rychlejší) nebo po parsování (pomalejší). Tento článek ukazuje, jak e‑maily načíst a převést.

Získání informací o e‑mailových hlavičkách

E‑mailové hlavičky nám mohou poskytnout informace o e‑mailové zprávě, které můžeme použít k rozhodnutí, zda stáhnout celou zprávu nebo ne. Typicky hlavičky obsahují odesílatele, předmět, datum přijetí atd. (E‑mailové hlavičky jsou podrobně popsány v Přizpůsobení e‑mailových hlaviček. Toto téma se konkrétně zabývá odesíláním e‑mailu pomocí SMTP, ale informace o hlavičkách e‑mailu zůstávají platné i pro POP3 e‑maily). Následující příklady ukazují, jak získat hlavičky e‑mailů z POP3 serveru pomocí sekvenčního čísla zprávy.

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

Načítání e‑mailových zpráv

The Pop3Client třída komponenta poskytuje schopnost načíst e‑mailové zprávy z POP3 serveru a rozparsovat je do MailMessage instance s pomocí MailMessage komponenty. MailMessage třída obsahuje několik vlastností a metod pro manipulaci s obsahem e‑mailu. Používáním fetchMessage metoda třídy Pop3Client třída, můžete získat MailMessage instanci přímo z POP3 serveru. Následující úryvek kódu ukazuje, jak získat kompletní e‑mailovou zprávu z POP3 serveru.

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

Získání souhrnných informací o zprávě pomocí jedinečného ID

POP3 klient API může získat souhrnné informace o zprávě ze serveru pomocí jedinečného ID zprávy. To poskytuje rychlý přístup k stručným informacím o zprávě, aniž by bylo nejprve nutné získat celou zprávu ze serveru. Následující úryvek kódu ukazuje, jak získat souhrnné informace o zprávě.

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

Výpis zpráv s více spojeními

Pop3Client poskytuje UseMultiConnection vlastnost, která může být použita k vytvoření více spojení pro náročné operace. Počet spojení, která budou použita během režimu multipojení, můžete také nastavit pomocí Pop3Client.ConnectionsQuantity. Následující úryvek kódu demonstruje použití režimu více spojení pro výpis zpráv a porovnává jeho výkon s režimem jednoho spojení.

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

Načítání zpráv ze serveru a jejich ukládání na disk

Uložit zprávu na disk bez parsování

Pokud chcete stáhnout e‑mailové zprávy z POP3 serveru bez jejich parsování, použijte Pop3Client třída saveMessage funkce. saveMessage funkce neparsuje e‑mailovou zprávu, takže je rychlejší než fetchMessage funkce. Následující úryvek kódu ukazuje, jak uložit zprávu podle jejího sekvenčního čísla, v tomto případě čísla 1. saveMessage metoda uloží zprávu v původním formátu EML bez parsování.

// 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 ");

Analyzovat zprávu před uložením

Následující úryvek kódu používá Pop3Client fetchMessage metoda pro načtení zprávy z POP3 serveru podle jejího sekvenčního čísla a následné uložení zprávy na disk s předmětem jako názvem souboru.

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

Skupinové načítání zpráv

Pop3Client poskytuje fetchMessages metoda, která přijímá iterovatel sekvenčních čísel nebo unikátní ID a vrací seznam MailMessage. Následující úryvek kódu demonstruje použití fetchMessages metoda pro načtení zpráv podle sekvenčních čísel a unikátního ID.

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

Filtrování zpráv podle odesílatele, příjemce nebo data

The Pop3Client třída, popsaná v Připojení k POP3 serveru, poskytuje listMessages metoda, která získá všechny zprávy z poštovní schránky. Pro získání jen zpráv, které splňují určitou podmínku, použijte přetíženou listMessages metoda, která přijímá MailQuery jako argument. MailQuery třída poskytuje různé vlastnosti pro specifikaci podmínek dotazu, například datum, předmět, odesílatel, příjemce a tak dále.  MailQueryBuilder třída se používá k vytvoření vyhledávacího výrazu. Nejprve jsou nastaveny všechny podmínky a omezení a poté MailQuery je vyplněn dotazem vytvořeným MailQueryBuilder. Třída MailQuery objekt třídy je používán Pop3Client k získání filtrovaných informací ze serveru. Tento článek ukazuje, jak filtrovat e‑mailové zprávy ze schránky. První příklad ilustruje, jak filtrovat zprávy podle data a předmětu. Také ukazujeme, jak filtrovat podle dalších kritérií a jak vytvořit složitější dotazy. Dále ukazuje použití filtru data a času k získání konkrétních e‑mailů ze schránky. Navíc ukazuje, jak aplikovat filtrování rozlišující velikost písmen.

Filtrování zpráv ze schránky

Pro filtrování zpráv ze schránky:

  1. Připojit se a přihlásit k POP3 serveru.
  2. Vytvořte instanci MailQuery a nastavit požadované vlastnosti.
  3. Zavolejte Pop3Client.listMessages(MailQuery query) metoda a předat MailQuery v parametrech pro získání pouze filtrovaných zpráv.

Následující úryvek kódu ukazuje, jak se připojit k POP3 poštovní schránce a získat zprávy, které dorazily dnes a mají ve předmětu slovo "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.");

Získání zpráv splňujících konkrétní kritéria

Výše uvedené ukázky kódu filtruje zprávy na základě předmětu e‑mailu a data. Můžeme také použít další vlastnosti k nastavení dalších podporovaných podmínek. Níže jsou některé příklady nastavení podmínek pomocí MailQuery.

Následující úryvky kódu ukazují, jak filtrovat e‑maily podle dalších kritérií:

  • Najděte e‑maily doručené dnes.
  • Najděte e‑maily přijaté v rozmezí.
  • Najděte e‑maily od konkrétního odesílatele.
  • Najděte e‑maily odeslané z konkrétní domény.
  • Najděte e‑maily odeslané konkrétnímu příjemci.

Dnešní datum

Následující úryvek kódu ukazuje, jak najít e‑maily doručené dnes.

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

Rozmezí dat

Následující úryvek kódu ukazuje, jak najít e‑maily přijaté v určitém rozmezí.

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

Konkrétní odesílatel

Následující úryvek kódu ukazuje, jak najít e‑maily od konkrétního odesílatele.

// 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");

Konkrétní doména

Následující úryvek kódu ukazuje, jak najít e‑maily odeslané z konkrétní domény.

// 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");

Konkrétní příjemce

Následující úryvek kódu ukazuje, jak najít e‑maily odeslané konkrétnímu příjemci.

// 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");

Vytváření složitých dotazů

Pokud různé MailQueryBuilder vlastnosti jsou nastaveny v samostatných příkazech, pak budou splněny všechny podmínky. Například pokud chceme získat zprávy v rozmezí dat a od konkrétního hostitele, musíme napsat tři příkazy.

Kombinování dotazů pomocí AND

Následující úryvek kódu ukazuje, jak kombinovat dotazy pomocí 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());

Kombinování dotazů pomocí OR

MailQueryBuilder poskytuje nebo metoda, která přijímá dva MailQuery instance jako parametry. Získá zprávy, které splňují jakoukoli ze dvou uvedených podmínek. Následující úryvek kódu ukazuje, jak filtrovat zprávy, které mají v předmětu "test" nebo odesílatele "noreply@host.com". Následující úryvek kódu ukazuje, jak kombinovat dotazy pomocí 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"));

Použití filtrů rozlišujících velikost písmen

API také poskytuje možnost filtrovat e‑maily ze schránky na základě kritéria rozlišujícího velikost písmen. Následující metody umožňují vyhledávat e‑maily s uvedením příznaku rozlišení velikosti písmen.

  • Metoda StringComparisonField.contains(String value, boolean ignoreCase)
  • Metoda StringComparisonField.equals(String value, boolean ignoreCase)
  • Metoda StringComparisonField.notContains(String boolean, bool ignoreCase)
  • Metoda 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);