Werken met berichten van server
Mailboxinformatie ophalen
We kunnen informatie over de mailbox verkrijgen, zoals het aantal berichten en de mailboxgrootte, met behulp van de getMailBoxSize en getMailBoxInfo methoden van de Pop3Client klasse.
- De getMailBoxSize methode retourneert de grootte van de mailbox in bytes.
- De getMailBoxInfo methode retourneert een object van het type Pop3MailBoxInfo.
Het is ook mogelijk om het aantal berichten op te halen met behulp van de MessageCount eigenschap en de grootte met behulp van de OccupiedSize eigenschap van de Pop3MailBoxInfo klasse. De volgende voorbeeldcode toont hoe informatie over de mailbox verkregen wordt. Het toont hoe:
- Maak een Pop3Client.
- Maak verbinding met een POP3-server.
- Haal de grootte van de mailbox op.
- Haal mailboxinformatie op.
- Haal het aantal berichten in de mailbox op.
- Haal de bezette grootte op.
// 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);
Aantal e-mails in de mailbox ophalen
De volgende codefragment toont hoe je het aantal e-mailberichten in een mailbox telt.
// 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 stelt ontwikkelaars in staat om op vele manieren met e-mails te werken. Ze kunnen bijvoorbeeld headerinformatie ophalen voordat ze beslissen een e-mail te downloaden. Of ze kunnen e-mails van een server ophalen en opslaan zonder ze te parseren (sneller) of na het parseren (langzamer). Dit artikel laat zien hoe e-mails opgehaald en geconverteerd kunnen worden.
Informatie over e-mailheaders ophalen
E-mailheaders kunnen ons informatie geven over een e-mailbericht die we kunnen gebruiken om te beslissen of we het volledige e-mailbericht moeten ophalen. Typisch bevat de headerinformatie afzender, onderwerp, ontvangstdatum, enz. (E-mailheaders worden gedetailleerd beschreven in E-mailheaders aanpassen. Dat onderwerp gaat specifiek over het verzenden van een e-mail met SMTP, maar de informatie over de e-mailheader blijft geldig voor POP3-e-mails). De volgende voorbeelden tonen hoe e-mailheaders opgehaald kunnen worden van een POP3-server op basis van het berichtvolgnummer.
// 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();
}
E-mailberichten ophalen
De Pop3Client klassecomponent biedt de mogelijkheid om e-mailberichten van de POP3-server op te halen en ze te parseren naar een MailMessage instantie met behulp van MailMessage componenten. De MailMessage klasse bevat verschillende eigenschappen en methoden voor het manipuleren van e‑mailinhoud. Door gebruik te maken van fetchMessage methode van de Pop3Client klasse, u kunt een MailMessage instantie direct van de POP3‑server. Het volgende codefragment toont hoe u een volledig e‑mailbericht van de POP3‑server kunt ophalen.
// 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();
}
Bericht‑samenvatting ophalen met unieke ID
De POP3‑client van de API kan samenvattingsinformatie van berichten van de server ophalen met behulp van de unieke ID van het bericht. Dit biedt snelle toegang tot beknopte berichtinformatie zonder eerst het volledige bericht van de server op te halen. Het volgende codefragment toont hoe u samenvattingsinformatie van berichten kunt ophalen.
// 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());
}
Berichten weergeven met MultiConnection
Pop3Client biedt een UseMultiConnection eigenschap die kan worden gebruikt om meerdere verbindingen voor zware bewerkingen te maken. U kunt ook het aantal verbindingen dat tijdens de multiverbindingsmodus wordt gebruikt instellen door gebruik te maken van Pop3Client.ConnectionsQuantity. Het volgende codefragment demonstreert het gebruik van de multiverbindingsmodus voor het weergeven van berichten en vergelijkt de prestaties met de enkele‑verbinding modus.
// 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);
Berichten ophalen van server en opslaan op schijf
Bericht opslaan op schijf zonder te parseren
Als je e-mailberichten van de POP3-server wilt downloaden zonder ze te parseren, gebruik dan de Pop3Client klasse saveMessage functie. De saveMessage functie parseert het e-mailbericht niet, waardoor het sneller is dan de fetchMessage functie. Het volgende codefragment toont hoe een bericht opgeslagen kan worden via zijn volgnummer, in dit geval nummer 1. De saveMessage methode slaat het bericht op in het oorspronkelijke EML-formaat zonder het te parseren.
// 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 ");
Bericht parseren vóór opslaan
Het volgende codefragment gebruikt de Pop3Client fetchMessage methode om een bericht van een POP3-server op te halen via zijn volgnummer, en vervolgens het bericht op te slaan op schijf met het onderwerp als bestandsnaam.
// 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();
}
Groepsophalen van berichten
Pop3Client biedt een fetchMessages methode die een iterable van Volgnummer of Unieke ID accepteert en een lijst retourneert van MailMessage. Het volgende codefragment demonstreert het gebruik van de fetchMessages methode om berichten op te halen via Volgnummer en Unieke 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());
}
Berichten filteren op afzender, ontvanger of datum
De Pop3Client klasse, beschreven in Verbinden met een POP3‑server, biedt de listMessages methode die alle berichten uit een mailbox haalt. Om alleen berichten te krijgen die aan een bepaalde voorwaarde voldoen, gebruik de overladen listMessages methode die neemt MailQuery als argument. De MailQuery klasse biedt diverse eigenschappen om de zoekvoorwaarden te specificeren, bijvoorbeeld datum, onderwerp, afzender, ontvanger enzovoort. De MailQueryBuilder klasse wordt gebruikt om de zoekexpressie op te bouwen. Eerst worden alle voorwaarden en beperkingen ingesteld en daarna MailQuery wordt gevuld met de query ontwikkeld door MailQueryBuilder. De MailQuery klasseobject wordt gebruikt door Pop3Client om de gefilterde informatie van de server te extraheren. Dit artikel laat zien hoe e-mailberichten uit een mailbox gefilterd kunnen worden. Het eerste voorbeeld illustreert hoe berichten gefilterd worden op datum en onderwerp. We tonen ook hoe op andere criteria gefilterd kan worden en hoe complexere queries opgebouwd kunnen worden. Het laat ook de toepassing zien van datum- en tijdfilter om specifieke e-mails uit de mailbox te halen. Daarnaast laat het zien hoe hoofdlettergevoelige filtering toegepast kan worden.
Berichten uit mailbox filteren
Om berichten uit een mailbox te filteren:
- Verbinden en inloggen op een POP3-server.
- Maak een instantie van MailQuery en stel de gewenste eigenschappen in.
- Roep de Pop3Client.listMessages(MailQuery query) methode en geef de MailQuery in parameters om alleen de gefilterde berichten op te halen.
Het volgende codefragment toont hoe je verbinding maakt met een POP3-mailbox en berichten ophaalt die vandaag zijn aangekomen en het woord "newsletter" in het onderwerp hebben.
// 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.");
Berichten ophalen die aan specifieke criteria voldoen
De bovenstaande codevoorbeelden filtert berichten op basis van het e-mailonderwerp en de datum. We kunnen ook andere eigenschappen gebruiken om andere ondersteunde voorwaarden in te stellen. Hieronder staan enkele voorbeelden van het instellen van de voorwaarden met behulp van MailQuery.
De volgende codefragmenten tonen hoe e-mails gefilterd kunnen worden op andere criteria:
- Zoek e-mails die vandaag zijn afgeleverd.
- Zoek e-mails ontvangen binnen een bereik.
- Zoek e-mails van een specifieke afzender.
- Zoek e-mails die van een specifiek domein zijn verzonden.
- Zoek e-mails die naar een specifieke ontvanger zijn gestuurd.
Datum van vandaag
Het volgende codefragment toont hoe je e-mails vindt die vandaag zijn afgeleverd.
// 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());
Datumbereik
Het volgende codefragment toont hoe je e-mails vindt die binnen een bereik zijn ontvangen.
// 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());
Specifieke afzender
Het volgende codefragment toont hoe je e-mails vindt van een specifieke afzender.
// 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");
Specifiek domein
Het volgende codefragment toont hoe je e-mails vindt die van een specifiek domein zijn verzonden.
// 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");
Specifieke ontvanger
Het volgende codefragment toont hoe je e-mails vindt die naar een specifieke ontvanger zijn gestuurd.
// 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");
Complexe queries bouwen
Als verschillend MailQueryBuilder eigenschappen worden ingesteld in afzonderlijke statements, waarna alle voorwaarden voldaan zijn. Bijvoorbeeld, als we berichten willen ophalen tussen een datumbereik en van een specifieke host, moeten we drie statements schrijven.
Queries combineren met AND
Het volgende codefragment toont hoe je queries combineert met 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());
Queries combineren met OR
MailQueryBuilder biedt de of methode die twee MailQuery instanties als parameters. Het haalt de berichten op die aan een van de twee opgegeven voorwaarden voldoen. Het volgende codefragment toont hoe berichten gefilterd kunnen worden die ofwel "test" in het onderwerp hebben of "noreply@host.com" als afzender. Het volgende codefragment laat zien hoe je queries combineert met 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"));
Hoofdlettergevoelige filters toepassen
De API biedt ook de mogelijkheid om e-mails uit de mailbox te filteren op basis van een hoofdlettergevoelige criterium. De volgende methoden bieden de mogelijkheid om e-mails te zoeken met een hoofdlettergevoelige vlag.
- Methode StringComparisonField.contains(String value, boolean ignoreCase)
- Methode StringComparisonField.equals(String value, boolean ignoreCase)
- Methode StringComparisonField.notContains(String boolean, bool ignoreCase)
- Methode 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);