Arbeta med meddelanden från servern

Hämtning av brevlådsinformation

Vi kan få information om brevlådan, såsom antalet meddelanden och brevlådans storlek, med hjälp av getMailBoxSize och getMailBoxInfo metoder för Pop3Client klass.

Det är också möjligt att hämta antalet meddelanden med hjälp av MessageCount egenskap och storleken med hjälp av OccupiedSize egenskap hos Pop3MailBoxInfo klass. Följande exempel på kod visar hur man får information om brevlådan. Den visar hur man:

  1. Skapa en Pop3Client.
  2. Anslut till en POP3‑server.
  3. Hämta storleken på brevlådan.
  4. Hämta brevlådsinformation.
  5. Hämta antalet meddelanden i brevlådan.
  6. Hämta den upptagna storleken.
// 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);

Hämtning av e‑postantal i brevlådan

Följande kodsnutt visar hur du räknar e‑postmeddelanden i en brevlåda.

// 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 låter utvecklare arbeta med e‑post på många olika sätt. Till exempel kan de hämta huvudinformation innan de bestämmer sig för att ladda ner ett e‑postmeddelande. Eller de kan hämta e‑post från en server och spara dem utan att parsas (snabbare) eller efter att ha parsats (långsammare). Denna artikel visar hur man hämtar och konverterar e‑post.

Hämtning av information om e‑posthuvuden

E‑posthuvuden kan ge oss information om ett e‑postmeddelande som vi kan använda för att avgöra om vi ska hämta hela meddelandet eller inte. Vanligtvis innehåller huvudinformationen avsändare, ämne, mottagningsdatum osv. (E‑posthuvuden beskrivs i detalj i Anpassning av e‑posthuvuden. Det ämnet handlar specifikt om att skicka e‑post med SMTP, men informationen om e‑posthuvuden är fortfarande giltig för POP3‑e‑post). Följande exempel visar hur man hämtar e‑posthuvuden från en POP3‑server med meddelandets sekvensnummer.

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

Hämtning av e‑postmeddelanden

Den Pop3Client klasskomponenten ger möjlighet att hämta e‑postmeddelanden från POP3‑servern och parsar dem till en MailMessage instans med hjälp av MailMessage komponenter. Det MailMessage klass innehåller flera egenskaper och metoder för att manipulera e‑postinnehåll. Genom att använda fetchMessage metod för Pop3Client klass kan du få en MailMessage instans direkt från POP3‑servern. Följande kodexempel visar hur du hämtar ett komplett e‑postmeddelande från POP3‑servern.

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

Hämta meddelandesammanfattning med unikt ID

POP3‑klienten i API:t kan hämta sammanfattande information om ett meddelande från servern med hjälp av meddelandets unika ID. Detta ger snabb åtkomst till kort information om meddelandet utan att först hämta hela meddelandet från servern. Följande kodexempel visar hur du hämtar meddelandesammanfattning.

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

Lista meddelanden med MultiConnection

Pop3Client ger en UseMultiConnection egenskap som kan användas för att skapa flera anslutningar för tunga operationer. Du kan också ange antalet anslutningar som ska användas under multikonnectionsläget genom att använda Pop3Client.ConnectionsQuantity. Följande kodexempel demonstrerar användning av multikonnectionsläge för att lista meddelanden och jämför dess prestanda med enkelnanslutningsläge.

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

Hämta meddelanden från servern och spara till disk

Spara meddelande till disk utan att parsas

Om du vill ladda ner e‑postmeddelanden från POP3‑servern utan att parsas, använd Pop3Client klass saveMessage funktion. saveMessage funktion parsar inte e‑postmeddelandet så den är snabbare än fetchMessage funktion. Följande kodsnutt visar hur man sparar ett meddelande via dess sekvensnummer, i detta fall nummer 1. saveMessage metod sparar meddelandet i det ursprungliga EML‑formatet utan att parsas.

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

Parsa meddelande innan sparning

Följande kodsnutt använder Pop3Client fetchMessage metod för att hämta ett meddelande från en POP3‑server via dess sekvensnummer, och sedan spara meddelandet till disk med ämnet som filnamn.

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

Grupphämtning av meddelanden

Pop3Client ger en fetchMessages metod som accepterar en iterabel av sekvensnummer eller unika ID och returnerar en lista med MailMessage. Följande kodsnutt demonstrerar användningen av fetchMessages metod för att hämta meddelanden med sekvensnummer och unikt 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());
}

Filtrering av meddelanden på avsändare, mottagare eller datum

Den Pop3Client klass, beskriven i Ansluta till en POP3‑server, tillhandahåller listMessages metod som hämtar alla meddelanden från en brevlåda. För att bara få meddelanden som matchar ett villkor, använd den överlagrade listMessages metod som tar MailQuery som argument. MailQuery klass tillhandahåller olika egenskaper för att specificera sökvillkor, till exempel datum, ämne, avsändare, mottagare osv.  MailQueryBuilder klass används för att bygga sökuttrycket. Först sätts alla villkor och begränsningar och sedan MailQuery fylls med frågan utvecklad av MailQueryBuilder. Klassen MailQuery klassobjekt används av Pop3Client för att extrahera den filtrerade informationen från servern. Denna artikel visar hur man filtrerar e‑postmeddelanden från en brevlåda. Det första exemplet visar hur man filtrerar meddelanden baserat på datum och ämne. Vi visar också hur man filtrerar på andra kriterier och hur man bygger mer komplexa frågor. Den visar även hur datum- och tidsfilter appliceras för att hämta specifika e‑postmeddelanden från brevlådan. Dessutom visas hur man tillämpar skiftlägeskänslig filtrering.

Filtrering av meddelanden från brevlåda

För att filtrera meddelanden från en brevlåda:

  1. Anslut och logga in på en POP3‑server.
  2. Skapa en instans av MailQuery och sätt önskade egenskaper.
  3. Anropa Pop3Client.listMessages(MailQuery query) metod och skicka MailQuery i parametrar för att endast få de filtrerade meddelandena.

Följande kodsnutt visar hur du ansluter till en POP3‑brevlåda och får meddelanden som anlände idag och har ordet "newsletter" i ämnet.

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

Hämtning av meddelanden som uppfyller specifika kriterier

Kodexemplen ovan filtrerar meddelanden baserat på e‑postens ämne och datum. Vi kan också använda andra egenskaper för att ange andra stödjade villkor. Nedan är några exempel på hur man sätter villkoren med hjälp av MailQuery.

Kodsnuttarna nedan visar hur man filtrerar e‑post efter andra kriterier:

  • Hitta e‑post levererad idag.
  • Hitta e‑post mottagen inom ett intervall.
  • Hitta e‑post från en specifik avsändare.
  • Hitta e‑post som skickats från en specifik domän.
  • Hitta e‑post som skickats till en specifik mottagare.

Dagens datum

Följande kodsnutt visar hur du hittar e‑post som levererats idag.

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

Datumintervall

Följande kodsnutt visar hur du hittar e‑post mottagen inom ett intervall.

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

Specifik avsändare

Följande kodsnutt visar hur du hittar e‑post från en specifik avsändare.

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

Specifik domän

Följande kodsnutt visar hur du hittar e‑post som skickats från en specifik domän.

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

Specifik mottagare

Följande kodsnutt visar hur du hittar e‑post som skickats till en specifik mottagare.

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

Bygga komplexa frågor

Om olika MailQueryBuilder egenskaper sätts i separata satser, då matchas alla villkor. Till exempel, om vi vill hämta meddelanden inom ett datumintervall och från en specifik värd, måste vi skriva tre satser.

Kombinera frågor med AND

Följande kodsnutt visar hur man kombinerar frågor med 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());

Kombinera frågor med OR

MailQueryBuilder tillhandahåller eller metod som tar två MailQuery instanser som parametrar. Den hämtar meddelandena som matchar någon av de två specificerade villkoren. Följande kodsnutt visar hur man filtrerar meddelanden som antingen har "test" i ämnet eller "noreply@host.com" som avsändare. Följande kodsnutt visar hur man kombinerar frågor med 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"));

Användning av skiftlägeskänsliga filter

API:et ger också möjlighet att filtrera e‑post från brevlådan baserat på ett skiftlägeskänsligt kriterium. Följande metoder ger möjlighet att söka e‑post med angivet skiftlägeskänsligt flagga.

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