Praca z wiadomościami z serwera
Uzyskiwanie informacji o skrzynce pocztowej
Możemy uzyskać informacje o skrzynce pocztowej, takie jak liczba wiadomości i rozmiar skrzynki, przy użyciu getMailBoxSize i getMailBoxInfo metody klasy Pop3Client klasa.
- Ten getMailBoxSize metoda zwraca rozmiar skrzynki pocztowej w bajtach.
- Ten getMailBoxInfo metoda zwraca obiekt typu Pop3MailBoxInfo.
Można również uzyskać liczbę wiadomości przy użyciu MessageCount właściwość oraz rozmiar przy użyciu OccupiedSize właściwość Pop3MailBoxInfo klasa. Poniższy przykładowy kod pokazuje, jak uzyskać informacje o skrzynce pocztowej. Pokazuje, jak:
- Utwórz Pop3Client.
- Połącz się z serwerem POP3.
- Pobierz rozmiar skrzynki pocztowej.
- Pobierz informacje o skrzynce pocztowej.
- Pobierz liczbę wiadomości w skrzynce pocztowej.
- Pobierz zajęty rozmiar.
// 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);
Uzyskiwanie liczby e‑mail w skrzynce pocztowej
Poniższy fragment kodu pokazuje, jak policzyć wiadomości e‑mail w skrzynce pocztowej.
// 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żliwia programistom pracę z e‑mailami na wiele różnych sposobów. Na przykład mogą pobrać informacje z nagłówka przed podjęciem decyzji o pobraniu wiadomości. Mogą także pobrać e‑maile z serwera i zapisać je bez parsowania (szybciej) lub po parsowaniu (wolniej). Ten artykuł pokazuje, jak pobierać i konwertować e‑maile.
Pobieranie informacji z nagłówków e‑mail
Nagłówki e‑mail mogą dostarczyć informacji o wiadomości, które możemy wykorzystać do decyzji, czy pobrać całą wiadomość. Zwykle nagłówek zawiera nadawcę, temat, datę otrzymania itp. (Nagłówki e‑mail są szczegółowo opisane w Dostosowywanie nagłówków e‑mail. Ten temat dotyczy konkretnie wysyłania wiadomości e‑mail przy użyciu SMTP, ale informacje o nagłówkach e‑mail pozostają ważne dla e‑maili POP3). Poniższe przykłady pokazują, jak pobrać nagłówki e‑mail z serwera POP3 za pomocą numeru sekwencyjnego wiadomości.
// 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();
}
Pobieranie wiadomości e‑mail
Ten Pop3Client komponent klasy zapewnia możliwość pobierania wiadomości e‑mail z serwera POP3 i przetwarzania ich na MailMessage instancja przy pomocy MailMessage komponentów. The MailMessage klasa zawiera kilka właściwości i metod do manipulacji treścią e‑mail. Używając fetchMessage metoda Pop3Client klasa, możesz uzyskać MailMessage instancję bezpośrednio z serwera POP3. Poniższy fragment kodu pokazuje, jak pobrać pełną wiadomość e‑mail z serwera 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();
}
Pobieranie podsumowania informacji o wiadomości przy użyciu unikalnego ID
Klient POP3 API może pobrać podsumowanie informacji o wiadomości z serwera, używając unikalnego identyfikatora wiadomości. Zapewnia to szybki dostęp do krótkich informacji o wiadomości bez konieczności najpierw pobierania całej wiadomości z serwera. Poniższy fragment kodu pokazuje, jak pobrać podsumowanie informacji o wiadomości.
// 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());
}
Listowanie wiadomości z wieloma połączeniami
Pop3Client zapewnia UseMultiConnection właściwość, której można używać do tworzenia wielu połączeń przy intensywnych operacjach. Możesz także ustawić liczbę połączeń używanych w trybie wielokrotnego połączenia, używając Pop3Client.ConnectionsQuantity. Poniższy fragment kodu demonstruje użycie trybu wielokrotnego połączenia do listowania wiadomości i porównuje jego wydajność z trybem pojedynczego połączenia.
// 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);
Pobieranie wiadomości z serwera i zapisywanie na dysk
Zapis wiadomości na dysku bez parsowania
Jeśli chcesz pobrać wiadomości e‑mail z serwera POP3 bez ich parsowania, użyj Pop3Client klasa saveMessage funkcja. saveMessage funkcja nie parsuje wiadomości e‑mail, więc jest szybsza niż fetchMessage funkcja. Poniższy fragment kodu pokazuje, jak zapisać wiadomość według jej numeru sekencyjnego, w tym przypadku numeru 1. saveMessage metoda zapisuje wiadomość w oryginalnym formacie EML bez jej parsowania.
// 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 ");
Parsowanie wiadomości przed zapisem
Poniższy fragment kodu używa Pop3Client fetchMessage metoda pobierająca wiadomość z serwera POP3 według jej numeru sekencyjnego, a następnie zapisująca ją na dysku używając tematu jako nazwy pliku.
// 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();
}
Grupowe pobieranie wiadomości
Pop3Client zapewnia fetchMessages metoda, która przyjmuje iterowalny zestaw numerów sekwencyjnych lub unikalnych ID i zwraca listę MailMessage. Poniższy fragment kodu demonstruje użycie fetchMessages metoda pobierająca wiadomości według numerów sekwencyjnych i unikalnego 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());
}
Filtrowanie wiadomości według nadawcy, odbiorcy lub daty
Ten Pop3Client klasa, opisana w Łączenie z serwerem POP3, zapewnia listMessages metoda, która pobiera wszystkie wiadomości ze skrzynki. Aby otrzymać tylko wiadomości spełniające określony warunek, użyj przeciążonej listMessages metoda, która przyjmuje MailQuery jako argument. MailQuery klasa zapewnia różne właściwości do określania warunków zapytania, np. data, temat, nadawca, odbiorca itp. MailQueryBuilder klasa jest używana do budowania wyrażenia wyszukiwania. Najpierw ustawia się wszystkie warunki i ograniczenia, a następnie MailQuery jest wypełniony zapytaniem opracowanym przez MailQueryBuilder. The MailQuery obiekt klasy jest używany przez Pop3Client aby wyodrębnić przefiltrowane informacje z serwera. Ten artykuł pokazuje, jak filtrować wiadomości e‑mail ze skrzynki. Pierwszy przykład ilustruje filtrowanie wiadomości według daty i tematu. Pokazujemy również filtrowanie według innych kryteriów oraz budowanie bardziej złożonych zapytań. Przedstawiamy także zastosowanie filtru daty i czasu do pobrania konkretnych e‑maili ze skrzynki. Dodatkowo pokazujemy, jak zastosować filtrowanie wrażliwe na wielkość liter.
Filtrowanie wiadomości ze skrzynki
Aby filtrować wiadomości ze skrzynki:
- Połącz się i zaloguj do serwera POP3.
- Utwórz instancję MailQuery i ustawić żądane właściwości.
- Wywołaj Pop3Client.listMessages(MailQuery query) metodę i przekazać MailQuery w parametrach, aby otrzymać tylko przefiltrowane wiadomości.
Poniższy fragment kodu pokazuje, jak połączyć się z skrzynką POP3 i pobrać wiadomości, które przybyły dzisiaj oraz mają w temacie słowo "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.");
Pobieranie wiadomości spełniających określone kryteria
Powyższe przykłady kodu filtruje wiadomości na podstawie tematu e‑mail i daty. Możemy także używać innych właściwości do ustawiania dodatkowych obsługiwanych warunków. Poniżej kilka przykładów ustawiania warunków przy użyciu MailQuery.
Poniższe fragmenty kodu pokazują, jak filtrować e‑maile według innych kryteriów:
- Znajdź e‑maile dostarczone dzisiaj.
- Znajdź e‑maile odebrane w określonym przedziale.
- Znajdź e‑maile od określonego nadawcy.
- Znajdź e‑maile wysłane z określonej domeny.
- Znajdź e‑maile wysłane do określonego odbiorcy.
Dzisiejsza data
Poniższy fragment kodu pokazuje, jak znaleźć e‑maile dostarczone dzisiaj.
// 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());
Zakres dat
Poniższy fragment kodu pokazuje, jak znaleźć e‑maile odebrane w określonym przedziale.
// 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());
Określony nadawca
Poniższy fragment kodu pokazuje, jak znaleźć e‑maile od określonego nadawcy.
// 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");
Określona domena
Poniższy fragment kodu pokazuje, jak znaleźć e‑maile wysłane z określonej domeny.
// 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");
Określony odbiorca
Poniższy fragment kodu pokazuje, jak znaleźć e‑maile wysłane do określonego odbiorcy.
// 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");
Budowanie złożonych zapytań
Jeśli różne MailQueryBuilder właściwości są ustawiane w oddzielnych instrukcjach, wtedy wszystkie warunki będą spełnione. Na przykład, jeśli chcemy pobrać wiadomości z określonego zakresu dat i od konkretnego hosta, musimy napisać trzy instrukcje.
Łączenie zapytań przy użyciu AND
Poniższy fragment kodu pokazuje, jak łączyć zapytania przy użyciu 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());
Łączenie zapytań przy użyciu OR
MailQueryBuilder udostępnia lub metoda przyjmująca dwa MailQuery instancje jako parametry. Pobiera wiadomości spełniające dowolny z dwóch podanych warunków. Poniższy fragment kodu pokazuje, jak filtrować wiadomości, które mają w temacie "test" lub nadawcę "noreply@host.com". Poniższy fragment kodu pokazuje, jak łączyć zapytania przy użyciu 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"));
Stosowanie filtrów wrażliwych na wielkość liter
API zapewnia również możliwość filtrowania e‑mail z skrzynki na podstawie kryteriów wrażliwych na wielkość liter. Następujące metody umożliwiają wyszukiwanie e‑mail z określeniem flagi wrażliwości na wielkość liter.
- 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);