Ładowanie i Zapisywanie Wiadomości

Ładowanie i Zapisywanie Wiadomości E‑mail

Wykryj Format Pliku

API Aspose.Email zapewnia możliwość wykrywania formatu pliku przekazanej wiadomości. Ta DetectFileFormat metoda FileFormatUtil klasa może być użyta do tego celu. Poniższe klasy i metody mogą być użyte do wykrywania załadowanego formatu pliku.

Poniższy fragment kodu pokazuje, jak wykrywać formaty plików.

Załaduj Wiadomość E‑mail

Aby załadować wiadomość z określonymi opcjami ładowania, Aspose.Email udostępnia LoadOptions klasa, którą można używać w następujący sposób:

Zachowaj Wbudowany Format Wiadomości Podczas Ładowania

Zapisz i Konwertuj Wiadomości E‑mail

Aspose.Email ułatwia konwertowanie dowolnego typu wiadomości na inny format. Aby zademonstrować tę funkcję, kod w tym artykule ładuje trzy typy wiadomości z dysku i zapisuje je ponownie w innych formatach. Klasa bazowa SaveOptions oraz klasy EmlSaveOptions, MsgSaveOptions, MhtSaveOptions, HtmlSaveOptions dla dodatkowych ustawień przy zapisywaniu MailMessage może być użyte do zapisywania wiadomości w innych formatach. Artykuł pokazuje, jak używać tych klas do zapisania przykładowej wiadomości e‑mail jako:

  • format EML.
  • Outlook MSG.
  • format MHTML.
  • format HTML.

Załaduj i Zapisz Wiadomość E‑mail

Poniższy fragment kodu pokazuje, jak załadować wiadomość EML i zapisać ją na dysku w tym samym formacie.

Załaduj i Zapisz Wiadomość E‑mail Zachowując Oryginalne Granice

Poniższy fragment kodu pokazuje, jak załadować EML i zapisać jako EML, zachowując oryginalne granice.

Zapisywanie jako EML zachowując załączniki TNEF

Poniższy fragment kodu pokazuje, jak zapisać jako EML, zachowując załączniki TNEF.

Zapisz EML jako MSG

Poniższy fragment kodu pokazuje, jak załadować wiadomość EML i przekonwertować ją na MSG przy użyciu odpowiedniej opcji z SaveOptions.

Zapisz EML jako MSG z Zachowanymi Datami

Ten MsgSaveOptions klasa pozwala zapisać źródłową wiadomość jako plik Outlook Message (MSG) zachowując daty. Poniższy fragment kodu pokazuje, jak zapisać jako MSG z zachowanymi datami.

Zapisz EML jako MHTML

Różne opcje MHTML mogą być użyte do uzyskania pożądanych rezultatów. Poniższy fragment kodu pokazuje, jak załadować wiadomość EML do MailMessage i konwertuj ją na MHTML z datą wiadomości w systemie UTC.

// Set options for MHTML output
MhtSaveOptions saveOptions = SaveOptions.getDefaultMhtml();
// save a message date as UTC date
saveOptions.setPreserveOriginalDate(false);

// Initialize and load an existing EML file
try (MailMessage mailMessage = MailMessage.load(dataDir + "Message.eml")) {
    mailMessage.save(outDir + "Message_out.mhtml", saveOptions);
}

Formatuj Nagłówki MHT Globalnie przy Zapisie z EML

Z Aspose.Email możesz używać globalnych opcji formatowania nagłówka Mht. Globalne opcje ustalają wspólne formatowanie nagłówka Mht dla wszystkich MhtSaveOptions instancji. Ta funkcja jest przeznaczona, aby uniknąć ustawiania formatowania dla każdej instancji MhtSaveOptions.

Użyj następujących metod GlobalFormattingOptions klasa oraz poniższy przykład kodu do ustawienia formatowania nagłówka Mht:

// saveOptions1 and saveOptions2 have the same mht header formatting
MhtSaveOptions saveOptions1 = new MhtSaveOptions();
MhtSaveOptions saveOptions2 = new MhtSaveOptions();

Konwertuj EML do MHTML z Opcjonalnymi Ustawieniami

Ten MhtSaveOptions klasa zapewnia dodatkowe opcje zapisywania wiadomości e‑mail w formacie MHTML. Enumerator MhtFormatOptions umożliwia zapis dodatkowych informacji e‑mail do wyjściowego MHTML. Można zapisać następujące dodatkowe pola:

  • WriteHeader - zapisuje nagłówek e‑mail do pliku wyjściowego.
  • WriteOutlineAttachments - zapisuje załączniki konturów do pliku wyjściowego.
  • WriteCompleteEmailAddress - zapisuje pełny adres e‑mail do pliku wyjściowego.
  • NoEncodeCharacters - nie należy używać kodowania transferowego znaków.
  • HideExtraPrintHeader - ukrywa dodatkowy nagłówek wydruku u góry pliku wyjściowego.
  • WriteCompleteToEmailAddress - zapisuje pełny adres e‑mail odbiorcy do pliku wyjściowego.
  • WriteCompleteFromEmailAddress - zapisuje pełny adres e‑mail nadawcy do pliku wyjściowego.
  • WriteCompleteCcEmailAddress - zapisuje pełne adresy e‑mail wszystkich odbiorców kopii (CC) do pliku wyjściowego.
  • WriteCompleteBccEmailAddress - zapisuje pełny adres e‑mail każdego odbiorcy ukrytej kopii (BCC) do pliku wyjściowego.
  • RenderCalendarEvent - zapisuje tekst z wydarzenia kalendarza do pliku wyjściowego.
  • SkipByteOrderMarkInBody - zapisuje bajty BOM do pliku wyjściowego.
  • RenderVCardInfo - zapisuje tekst z AlternativeView VCard do pliku wyjściowego.
  • DisplayOutlook - wyświetla nagłówek From.
  • RenderTaskFields - zapisuje określone pola Zadania do pliku wyjściowego.
  • Brak - Nie określono ustawień.

Poniższy fragment kodu pokazuje, jak konwertować pliki EML do MHTML z opcjonalnymi ustawieniami.

Renderuj Wydarzenia Kalendarza przy Konwersji do MHTML

Ten MhtFormatOptions.RenderCalendarEvent renderuje wydarzenia Kalendarza do wyjściowego MTHML. Poniższy fragment kodu pokazuje, jak renderować wydarzenia kalendarza podczas konwersji do MHTML.

Eksportuj E‑mail do MHT bez Obrazów Inline

Eksport e‑maili do MHT z niestandardową strefą czasową

MailMessage klasa udostępnia setTimeZoneOffset właściwość służąca do ustawiania niestandardowej strefy czasowej podczas eksportu do MHT. Poniższy fragment kodu pokazuje, jak wyeksportować wiadomość e‑mail do MHT z niestandardową strefą czasową.

MailMessage msg = MailMessage.load(filename, new MsgLoadOptions());
msg.setDate(new Date());

// Set the timezone offset in milliseconds
msg.setTimeZoneOffset(5*60*60*1000);

MhtSaveOptions mhtOptions = new MhtSaveOptions();
mhtOptions.setMhtFormatOptions(MhtFormatOptions.WriteHeader);
msg.save(dataDir + "ExportToMHTWithCustomTimezone_out.mhtml", mhtOptions);

Eksportowanie e‑maili do formatu EML

Poniższy fragment kodu pokazuje, jak wyeksportować wiadomości e‑mail do formatu EML.

Zapisz e‑mail jako HTML

Ten HtmlSaveOptions klasa umożliwia eksportowanie treści wiadomości do HTML. Poniższy fragment kodu pokazuje, jak zapisać wiadomość jako HTML.

Zapisz wiadomość e‑mail jako HTML ze względną ścieżką do zasobów

Podczas eksportowania wiadomości e‑mail do formatu HTML można wybrać zapisywanie zasobów e‑mail ze względnymi ścieżkami. Ta funkcja zapewnia większą elastyczność w sposobie linkowania zasobów w wyjściowym pliku HTML, co ułatwia udostępnianie i wyświetlanie zapisanych wiadomości na różnych systemach. HtmlSaveOptions.UseRelativePathToResources właściwość umożliwia zapisywanie zasobów ze względnymi ścieżkami. Domyślna wartość tej właściwości to false (zasoby są zapisywane ze ścieżkami bezwzględnymi). Gdy zostanie ustawiona na true, zasoby są zapisywane ze względnymi ścieżkami. Pliki HTML ze względnymi ścieżkami są bardziej przenośne i mogą być wyświetlane poprawnie niezależnie od struktury plików środowiska hostingowego. Możesz wybrać pomiędzy ścieżkami bezwzględnymi i względnymi w zależności od wymagań. Możesz definiować własne ścieżki do zasobów przy użyciu ResourceHtmlRenderingHandler zdarzenie.

Zapisz z domyślną względną ścieżką do zasobów

MapiMessage msg = MapiMessage.load(sourceFileName);

HtmlSaveOptions htmlSaveOptions = new HtmlSaveOptions();
htmlSaveOptions.setResourceRenderingMode(ResourceRenderingMode.SaveToFile);
htmlSaveOptions.setUseRelativePathToResources(true);

msg.save("target.html", htmlSaveOptions);

W tym przypadku zasoby będą zapisane w folderze [nazwa_pliku_html].files, w tej samej ścieżce co plik .html, a HTML będzie odwoływał się do zasobów poprzez względne ścieżki.

Zapisz z bezwzględną ścieżką do zasobów

MapiMessage msg = MapiMessage.load(sourceFileName);

HtmlSaveOptions htmlSaveOptions = new HtmlSaveOptions();
htmlSaveOptions.setResourceRenderingMode(ResourceRenderingMode.SaveToFile);
htmlSaveOptions.setUseRelativePathToResources(false);

msg.save("target.html", htmlSaveOptions);

Jak w pierwszym przypadku, zasoby będą domyślnie zapisane w folderze [nazwa_pliku_html].files, ale HTML będzie odwoływał się do zasobów przy użyciu ścieżek bezwzględnych.

Niestandardowa względna ścieżka przy użyciu zdarzenia ResourceHtmlRenderingHandler

MapiMessage msg = MapiMessage.load(sourceFileName);

HtmlSaveOptions htmlSaveOptions = new HtmlSaveOptions();
htmlSaveOptions.setResourceRenderingMode(ResourceRenderingMode.SaveToFile);
htmlSaveOptions.setUseRelativePathToResources(false);

htmlSaveOptions.setResourceHtmlRenderingHandler(new ResourceHtmlRenderingHandler() {
    @Override
    public void invoke(Object sender, ResourceHtmlRenderingEventArgs args) {
        if (sender instanceof AttachmentBase) {
            AttachmentBase attachment = (AttachmentBase) sender;
            // Since UseRelativePathToResources = true, you should assign a relative path to the PathToResourceFile property.
            args.setPathToResourceFile("images\\" + attachment.getContentType().getName());
        }
    }
});

msg.save(targetPath + "A Day in the Park.html", htmlSaveOptions);

Używając ResourceHtmlRenderingHandler zdarzenie, możesz ustawić własne względne lub bezwzględne ścieżki do zasobów. Przy dostosowywaniu ścieżek za pomocą ResourceHtmlRenderingHandler obsługa zdarzenia, a ponieważ UseRelativePathToResources jest ustawiona na true, należy przypisać względną ścieżkę do PathToResourceFile właściwość zapewniająca poprawne odwołania.

Zachowanie własnych ikon w wiadomości podczas konwersji do HTML

Czasami wiadomość zawiera wbudowane załączniki, które są wyświetlane jako obrazy ikon w treści wiadomości. Takie wiadomości mogą powodować problemy przy konwersji do HTML, ponieważ obrazy ikon zostają utracone. Dzieje się tak, ponieważ ikony załączników nie są przechowywane bezpośrednio w wiadomości.

Użytkownik Aspose.Email może dostosować ikony załączników przy konwertowaniu wiadomości do HTML. W tym celu HtmlSaveOptions.ResourceHtmlRendering zdarzenie służy do dostosowywania renderowania plików zasobów (np. załączników) przy zapisywaniu wiadomości e‑mail jako pliku HTML. W poniższym przykładzie kodu obsługa zdarzenia jest używana do dynamicznego ustalania ścieżki do plików zasobów (ikon) w zależności od typu zawartości załącznika. Umożliwia to spersonalizowane renderowanie zasobów w wyjściowym HTML w oparciu o ich typ pliku.


 HtmlSaveOptions options = new HtmlSaveOptions();

options.setResourceHtmlRenderingHandler(new ResourceHtmlRenderingHandler() {

   @Override

   public void invoke(Object sender, ResourceHtmlRenderingEventArgs e) {

        AttachmentBase attachment = (AttachmentBase) sender;

        e.setCaption(attachment.getContentType().getName());

       if (attachment.getContentType().getName().endsWith(".pdf")) {

            e.setPathToResourceFile("pdf_icon.png");

       } else if (attachment.getContentType().getName().endsWith(".docx")) {

            e.setPathToResourceFile("word_icon.jpg");

       } else if (attachment.getContentType().getName().endsWith(".jpg")) {

            e.setPathToResourceFile("jpeg_icon.png");

       } else {

            e.setPathToResourceFile("not_found_icon.png");

       }

   }

});

options.setResourceRenderingMode(ResourceRenderingMode.SubstituteFromFile);

String fileName = "message.msg";

MailMessage mailMessage = MailMessage.load(fileName);

mailMessage.save("fileName.html", options);

Ustawienie czasu i strefy czasowej przy zapisywaniu EML jako HTML

Użytkownicy Aspose.Email mogą ustawić formaty wyświetlania czasu i strefy czasowej w HtmlSaveOptions. The HeadersFormattingOptions klasa umożliwia określenie opcji formatowania nagłówków przy zapisywaniu MailMessage do formatu MHTML lub HTML. Poniższe metody klasy HtmlFormatOptions klasa określająca pola, które mają być wyświetlane w pliku wyjściowym:

  • RenderCalendarEvent - Wskazuje, że tekst z wydarzenia kalendarza powinien być zapisany w wyjściowym MHTML.
  • RenderVCardInfo - Wskazuje, że tekst z alternatywnego widoku VCard powinien być zapisany w wyjściowym HTML.

Poniższy przykład kodu pokazuje, jak ustawić czas i strefę czasową podczas zapisywania EML jako HTML:

MailMessage msg = MailMessage.load("fileName");
HtmlSaveOptions options = new HtmlSaveOptions();
options.setHtmlFormatOptions(HtmlFormatOptions.WriteHeader);
options.getFormatTemplates().set_Item("DateTime", "MM d yyyy HH:mm tt");

Zapisywanie jako HTML bez osadzania zasobów

Zapisywanie wiadomości jako szablon Outlook (.oft)

Poniższy fragment kodu pokazuje, jak zapisać wiadomość jako szablon Outlook (.oft).