Pobieranie i listowanie e‑maili z serwera IMAP

Pobieranie i listowanie wiadomości

Jak uzyskać informacje identyfikacyjne wiadomości w skrzynce pocztowej

Podczas pobierania i przetwarzania wiadomości e‑mail można uzyskać szczegółowe informacje identyfikacyjne, takie jak numery kolejnych i unikalne identyfikatory, korzystając z poniższych funkcji udostępnionych w najnowszej wersji Aspose.Email dla .NET:

Aspose.Email.ImapMessageInfo klasa: Reprezentuje informacje identyfikacyjne o wiadomości w skrzynce IMAP.

ImapMessageInfo.SequenceNumber właściwość: Pobiera numer kolejny wiadomości.

ImapMessageInfo.UniqueId właściwość: Pobiera unikalny identyfikator wiadomości.

Aspose.Email.MailMessage.ItemId właściwość: Reprezentuje dodatkowe informacje identyfikacyjne wiadomości w skrzynce pocztowej.

Poniższy fragment kodu demonstruje, jak uzyskać informacje identyfikacyjne wiadomości w skrzynce IMAP:

  1. Utwórz instancję ImapClient klasa, podając niezbędne parametry, takie jak host serwera IMAP, port, adres e‑mail, hasło oraz opcje zabezpieczeń.
  2. Użyj ListMessages metoda do pobrania listy wiadomości z folderu "INBOX". Ogranicz listę do pierwszych pięciu wiadomości za pomocą metody Take(5).
  3. Wyodrębnij numery kolejnych wymienionych wiadomości, używając SequenceNumber właściwość każdej wiadomości.
  4. Użyj FetchMessages metoda do pobrania pełnych szczegółów wiadomości z serwera, przy użyciu numerów kolejnych uzyskanych w poprzednim kroku.
  5. Przejdź przez pobrane wiadomości i dla każdej z nich pobierz oraz wyświetl następujące informacje:
  • Numer kolejny wiadomości.
  • Właściwość ItemId.SequenceNumber.
  • Temat wiadomości.
using (var client = new ImapClient(imapHost, port, emailAddress, password, securityOption))
{
    // List the first 5 messages from the inbox
    var msgs = client.ListMessages("INBOX").Take(5);
    
    // Get sequence numbers of the messages
    var seqIds = msgs.Select(t => t.SequenceNumber);
    
    // Fetch messages based on sequence numbers
    var msgsViaFetch = client.FetchMessages(seqIds);
    
    for (var i = 0; i < 5; i++)
    {
        var thisMsg = msgsViaFetch[i];
        Console.WriteLine($"Message ID: {seqIds.ElementAt(i)} SequenceNumber: {thisMsg.ItemId.SequenceNumber} Subject: {thisMsg.Subject}");
    }
}

Lista identyfikatorów wiadomości MIME z serwera

ImapMessageInfo udostępnia MIME MessageId do identyfikacji wiadomości bez wyciągania całej wiadomości. Poniższy fragment kodu pokazuje, jak wyświetlić MIME messageId.

Lista wiadomości z serwera

Aspose.Email udostępnia dwuelementową przeciążoną wersję ListMessages() aby pobrać określoną liczbę wiadomości na podstawie zapytania. Poniższy fragment kodu pokazuje, jak wyświetlić listę wiadomości.

Rekurencyjne wymienianie wiadomości

Protokół IMAP obsługuje rekurencyjne listowanie wiadomości z folderu skrzynki. Dzięki temu można również wyświetlać wiadomości z podfolderów. Poniższy fragment kodu pokazuje, jak listować wiadomości rekurencyjnie.

Wymień wiadomości z użyciem MultiConnection

ImapClient 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 ImapClient.ConnectionsQuantity. Poniższy fragment kodu demonstruje użycie trybu wielokrotnego połączenia do listowania wiadomości i porównuje jego wydajność z trybem jednego połączenia.

Wymienianie wiadomości ze wsparciem stronicowania

W scenariuszach, w których serwer e‑mail zawiera dużą liczbę wiadomości w skrzynce, często pożądane jest wyświetlanie lub pobieranie wiadomości z obsługą stronicowania. API Aspose.Email ImapClient pozwala pobrać wiadomości z serwera z obsługą stronicowania.

Lista załączników wiadomości

Aby uzyskać informacje o załącznikach, takie jak nazwa czy rozmiar, bez pobierania danych załącznika, wypróbuj następujące API:

  • Aspose.Email.Clients.Imap.ImapAttachmentInfo – Reprezentuje informacje o załączniku.
  • Aspose.Email.Clients.Imap.ImapAttachmentInfoCollection – Reprezentuje kolekcję ImapAttachmentInfo klasa.
  • Aspose.Email.Clients.Imap.ListAttachments(int sequenceNumber) – Pobiera informacje o każdym załączniku w wiadomości.

Przykładowy kod wraz z poniższymi krokami pokaże, jak używać API:

  1. Wywołaj ListMessages() metoda na obiekcie imapClient. Ta metoda zwróci ImapMessageInfoCollection zawierającą informacje o wiadomościach w skrzynce pocztowej.
  2. Iteruj po każdej wiadomości w kolekcji messageInfoCollection używając pętli foreach.
  3. Wywołaj ListAttachments() metoda na obiekcie imapClient, przekazująca właściwość SequenceNumber obiektu wiadomości jako parametr. Ta metoda zwróci ImapAttachmentInfoCollection zawierającą informacje o załącznikach w wiadomości.
  4. Iteruj po każdym załączniku w kolekcji attachmentInfoCollection używając pętli foreach.
  5. W wewnętrznej pętli możesz uzyskać dostęp do informacji o każdym załączniku, używając właściwości obiektu attachmentInfo.
var messageInfoCollection = imapClient.ListMessages();
    
foreach (var message in messageInfoCollection)
{
    var attachmentInfoCollection = imapClient.ListAttachments(message.SequenceNumber);

    foreach (var attachmentInfo in attachmentInfoCollection)
    {
        Console.WriteLine("Attachment: {0} (size: {1})", attachmentInfo.Name, attachmentInfo.Size);
    }
}

Pobieranie i zapisywanie wiadomości

Pobierz wiadomości z serwera

Ten ImapClient klasa może pobierać wiadomości z serwera IMAP i zapisywać je w formacie EML na lokalnym dysku. Następujące kroki są wymagane, aby zapisać wiadomości na dysku:

  1. Utwórz instancję ImapClient klasa.
  2. Określ nazwę hosta, port, nazwę użytkownika i hasło w ImapClient constructor.
  3. Wybierz folder używając SelectFolder() metoda.
  4. Wywołaj ListMessages metodę, aby uzyskać ImapMessageInfoCollection obiekt.
  5. Iteruj przez ImapMessageInfoCollection kolekcję, wywołaj SaveMessage() metodę i podać ścieżkę wyjściową oraz nazwę pliku.

Poniższy fragment kodu pokazuje, jak pobrać wiadomości e-mail z serwera i je zapisać.

Pobierz wiadomości w kolejności malejącej

Aspose.Email udostępnia ImapClient.ListMessagesByPage metoda, która wymienia wiadomości z obsługą stronicowania. Niektóre przeciążenia ImapClient.ListMessagesByPage przyjmuje PageSettings jako parametr. PageSettings zapewnia AscendingSorting właściwość, która ustawiona na false, zwraca e‑maile w kolejności malejącej.

Poniższy kod przykładu demonstruje użycie AscendingSorting właściwość PageSettings klasa do zmiany kolejności e-maili.

Zapisz wiadomości w formacie MSG

Aby zapisać e‑maile w formacie MSG, ImapClient.FetchMessage() metodę należy wywołać. Zwraca wiadomość jako instancję MailMessage klasa. Ta MailMessage.Save() metodę można następnie wywołać, aby zapisać wiadomość w formacie MSG. Poniższy fragment kodu pokazuje, jak zapisać wiadomości w formacie MSG.

Grupowanie pobranych wiadomości

ImapClient 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.

Pobierz foldery i odczytaj wiadomości rekurencyjnie

W tym artykule, większość ImapClient funkcje są używane do stworzenia aplikacji, która rekurencyjnie wyświetla wszystkie foldery i podfoldery z serwera IMAP. Zapisuje również wiadomości w każdym folderze i podfolderze w formacie MSG na lokalnym dysku. Na dysku foldery i wiadomości są tworzone i zapisywane w takiej samej strukturze hierarchicznej jak na serwerze IMAP. Poniższy fragment kodu pokazuje, jak uzyskać wiadomości oraz informacje o podfolderach w sposób rekurencyjny.

Obsługa specjalnych informacji wiadomości

Pobierz dodatkowe parametry jako informacje podsumowujące

Pobierz informacje z nagłówka List-Unsubscribe

Nagłówek List-Unsubscribe zawiera adres URL umożliwiający wypisanie się z list mailingowych, np. reklam, biuletynów itp. Aby uzyskać nagłówek List-Unsubscribe, użyj ListUnsubscribe właściwość ImapMessageInfo klasa. Poniższy przykład pokazuje użycie ListUnsubscribe właściwość umożliwiająca pobranie nagłówka List-Unsubscribe.