Carregando e Salvando Mensagens

Carregando e Salvando Mensagens de Email

Detectar um Formato de Arquivo

A API Aspose.Email fornece a capacidade de detectar o formato do arquivo da mensagem fornecida. O método DetectFileFormat da classe FileFormatUtil pode ser usado para alcançar isso. As seguintes classes e métodos podem ser usados para detectar o formato de arquivo carregado.

O seguinte trecho de código mostra como detectar formatos de arquivos.

Carregar uma Mensagem de Email

Para carregar uma mensagem com opções de carregamento específicas, a Aspose.Email fornece a classe LoadOptions que pode ser usada da seguinte forma:

Preservar o Formato da Mensagem Embutida Durante o Carregamento

Salvar e Converter Mensagens de Email

A Aspose.Email facilita a conversão de qualquer tipo de mensagem para outro formato. Para demonstrar esse recurso, o código deste artigo carrega três tipos de mensagens do disco e as salva novamente em outros formatos. A classe base SaveOptions e as classes EmlSaveOptions, MsgSaveOptions, MhtSaveOptions, HtmlSaveOptions para configurações adicionais ao salvar MailMessage podem ser usadas para salvar mensagens em outros formatos. O artigo mostra como usar essas classes para salvar um email de exemplo como:

  • Formato EML.
  • Outlook MSG.
  • Formato MHTML.
  • Formato HTML.

Carregar e Salvar uma Mensagem de Email

O seguinte trecho de código mostra como carregar uma mensagem EML e salvá-la no disco no mesmo formato.

Carregar e Salvar uma Mensagem de Email Preservando as Fronteiras Originais

O seguinte trecho de código mostra como carregar EML e salvar como EML preservando as fronteiras originais.

Salvar como EML Preservando Anexos TNEF

O seguinte trecho de código mostra como salvar como EML preservando anexos TNEF.

Salvar EML como MSG

O seguinte trecho de código mostra como carregar uma mensagem EML e convertê-la para MSG usando a opção apropriada da SaveOptions.

Salvar EML como MSG com Datas Preservadas

A classe MsgSaveOptions permite salvar a mensagem fonte como um arquivo de Mensagem do Outlook (MSG) preservando datas. O seguinte trecho de código mostra como salvar como MSG com datas preservadas.

Salvar EML como MHTML

Diferentes opções de MHTML podem ser usadas para obter os resultados desejados. O seguinte trecho de código mostra como carregar uma mensagem EML em MailMessage e convertê-la para MHTML com uma data da mensagem no sistema UTC.

// Definir opções para saída MHTML
MhtSaveOptions saveOptions = SaveOptions.getDefaultMhtml();
// salvar a data de uma mensagem como data UTC
saveOptions.setPreserveOriginalDate(false);

// Inicializar e carregar um arquivo EML existente
try (MailMessage mailMessage = MailMessage.load(dataDir + "Message.eml")) {
    mailMessage.save(outDir + "Message_out.mhtml", saveOptions);
}

Formatar Cabeçalhos MHT Globalmente ao Salvar de EML

Com Aspose.Email, você pode usar as opções de formatação global para o cabeçalho Mht. As opções globais definem a formatação comum de um cabeçalho Mht para todas as instâncias de MhtSaveOptions. Este recurso é projetado para evitar a configuração de formatação para cada instância de MhtSaveOptions.

Use os seguintes métodos da classe GlobalFormattingOptions e o exemplo de código abaixo para definir a formatação de um cabeçalho Mht:

// saveOptions1 e saveOptions2 têm a mesma formatação de cabeçalho mht
MhtSaveOptions saveOptions1 = new MhtSaveOptions();
MhtSaveOptions saveOptions2 = new MhtSaveOptions();

Converter EML para MHTML com Configurações Opcionais

A classe MhtSaveOptions fornece opções adicionais para salvar mensagens de email em formato MHTML. O enumerador MhtFormatOptions possibilita escrever informações adicionais de email no MHTML de saída. Os seguintes campos adicionais podem ser escritos:

  • WriteHeader - escreve o cabeçalho do email no arquivo de saída.
  • WriteOutlineAttachments - escreve anexos de esboço no arquivo de saída.
  • WriteCompleteEmailAddress - escreve o endereço de email completo no arquivo de saída.
  • NoEncodeCharacters - nenhuma codificação de transferência de caracteres deve ser usada.
  • HideExtraPrintHeader - oculta o cabeçalho de impressão extra do topo do arquivo de saída.
  • WriteCompleteToEmailAddress - escreve o endereço de email completo do destinatário no arquivo de saída.
  • WriteCompleteFromEmailAddress - escreve o endereço de email completo do remetente no arquivo de saída.
  • WriteCompleteCcEmailAddress - escreve os endereços de email completos de qualquer destinatário em cópia no arquivo de saída.
  • WriteCompleteBccEmailAddress - escreve o endereço de email completo de qualquer destinatário em cópia oculta no arquivo de saída.
  • RenderCalendarEvent - escreve texto do evento de calendário no arquivo de saída.
  • SkipByteOrderMarkInBody - escreve os bytes do Byte Order Mark(BOM) no arquivo de saída.
  • RenderVCardInfo - escreve texto do VCard AlternativeView no arquivo de saída.
  • DisplayAsOutlook - exibe o cabeçalho From.
  • RenderTaskFields - escreve campos de Tarefa específicos no arquivo de saída.
  • None - Nenhuma configuração especificada.

O seguinte trecho de código mostra como converter arquivos EML para MHTML com configurações opcionais.

Renderizar Eventos de Calendário ao Converter para MHTML

O MhtFormatOptions.RenderCalendarEvent renderiza os eventos do Calendário no MTHML de saída. O seguinte trecho de código mostra como renderizar eventos de calendário ao converter para MHTML.

Exportar Email para MHT sem Imagens Inline

Exportar Email para MHT com Fuso Horário Personalizado

A classe MailMessage fornece a propriedade setTimeZoneOffset para definir um fuso horário personalizado ao exportar para MHT. O seguinte trecho de código mostra como exportar email para MHT com um fuso horário personalizado.

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

// Definir o deslocamento do fuso horário em milissegundos
msg.setTimeZoneOffset(5*60*60*1000);

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

Exportando Email para EML

O seguinte trecho de código mostra como exportar emails para EML.

Salvar Email como HTML

A classe HtmlSaveOptions permite exportar o corpo da mensagem para HTML. O seguinte trecho de código mostra como salvar uma mensagem como HTML.

Salvar Mensagem de Email como HTML com Caminho Relativo para Recursos

Ao exportar mensagens de email para o formato HTML, é possível escolher salvar recursos de email com caminhos relativos. Este recurso proporciona mais flexibilidade em como os recursos são vinculados no arquivo HTML de saída, tornando mais fácil compartilhar e exibir emails salvos em diferentes sistemas. A propriedade HtmlSaveOptions.UseRelativePathToResources fornece a capacidade de salvar recursos com caminhos relativos. O valor padrão da propriedade é falso (os recursos são salvos com caminhos absolutos). Quando definido como verdadeiro, os recursos são salvos com caminhos relativos. Arquivos HTML com caminhos relativos são mais portáteis e podem ser visualizados corretamente, independentemente da estrutura de arquivos do ambiente de hospedagem. Você pode escolher entre caminhos absolutos e relativos, dependendo dos requisitos. Você pode definir caminhos personalizados para recursos usando o evento ResourceHtmlRenderingHandler.

Salvar com Caminho Relativo Padrão para Recursos

MapiMessage msg = MapiMessage.load(sourceFileName);

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

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

Neste caso, os recursos serão salvos na pasta [nome do arquivo html].files, no mesmo caminho que o arquivo .html e o HTML fará referência aos recursos via caminhos relativos.

Salvar com Caminho Absoluto para Recursos

MapiMessage msg = MapiMessage.load(sourceFileName);

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

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

Como no primeiro caso, os recursos serão salvos na pasta [nome do arquivo html].files por padrão, mas o HTML fará referência aos recursos usando caminhos absolutos.

Caminho Relativo Personalizado usando o Evento 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;
            // Como UseRelativePathToResources = true, você deve atribuir um caminho relativo à propriedade PathToResourceFile.
            args.setPathToResourceFile("images\\" + attachment.getContentType().getName());
        }
    }
});

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

Ao usar o evento ResourceHtmlRenderingHandler você pode definir caminhos relativos ou absolutos personalizados para recursos. Ao personalizar caminhos com o evento ResourceHtmlRenderingHandler e, uma vez que UseRelativePathToResources está definido como verdadeiro, você deve atribuir um caminho relativo à propriedade PathToResourceFile para garantir a referência correta.

Preservar Ícones Personalizados em uma Mensagem ao Converter para HTML

Às vezes, a mensagem contém anexos em linha, que são exibidos como imagens de ícones no corpo da mensagem. Esse tipo de mensagem pode criar problemas ao convertê-las para HTML, uma vez que os ícones das imagens são perdidos. Isso ocorre porque os ícones dos anexos não estão mantidos diretamente na mensagem.

O usuário da Aspose.Email pode personalizar os ícones para anexos ao converter a mensagem para HTML. Para isso, o evento HtmlSaveOptions.ResourceHtmlRendering é utilizado para personalizar a renderização de arquivos de recurso (como anexos) ao salvar uma mensagem de email como um arquivo HTML. No exemplo de código abaixo, o manipulador de eventos é usado para definir dinamicamente o caminho para os arquivos de recurso (ícones) com base no tipo de conteúdo do anexo. Isso permite a renderização personalizada de recursos na saída HTML com base em seu tipo de arquivo.


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

Definir Hora e Fuso Horário ao Salvar EML como HTML

Os usuários da Aspose.Email podem definir os formatos de exibição de hora e fuso horário em HtmlSaveOptions. A classe HeadersFormattingOptions permite especificar opções de formatação de cabeçalhos ao salvar MailMessage em formato Mhtml ou Html. Os seguintes métodos da classe HtmlFormatOptions especificam os campos a serem exibidos no arquivo de saída:

  • RenderCalendarEvent - Indica que o texto do evento de calendário deve ser escrito no mhtml de saída.
  • RenderVCardInfo - Indica que o texto do VCard AlternativeView deve ser escrito no html de saída.

O seguinte exemplo de código mostra como definir a hora e o fuso horário ao salvar EML como 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");

Salvar como HTML sem Embutir Recursos

Salvar uma Mensagem como um arquivo de Modelo do Outlook (.oft)

O seguinte trecho de código mostra como salvar uma mensagem como um arquivo de modelo do outlook (.oft).