Leitura e modificação de mensagens no pipeline de transporte do Exchange 2013

Saiba mais sobre as classes .NET Framework que você pode usar em seus agentes de transporte do Exchange 2013 para ler, gravar e modificar mensagens.

Aplica-se a: Exchange Server 2013

  • Classes usadas para ler, gravar ou modificar mensagens
  • Namespace de codificadores
  • namespace iCalendar
  • Namespace MIME
  • Namespace TextConverters
  • Namespace Tnef
  • namespace vCard

À medida que as mensagens passam pelo pipeline de transporte, seu agente de transporte pode ler, gravar e converter conteúdo de mensagens entre diferentes formatos de dados. Por exemplo, você pode ler e gravar dados MIME, identificar mensagens de entrada que estão no formato Uuencoded ou quoted-printable (qp) e convertê-los em um padrão usado pela sua organização ou ler e salvar informações de calendário ou contato associadas a mensagens de entrada.

Você também pode identificar o conteúdo que representa uma ameaça à segurança e mover ou excluir o conteúdo ou as mensagens que os contêm; por exemplo, removendo links em uma mensagem HTML.

Este artigo fornece informações sobre as classes .NET Framework que você pode usar para ler, gravar e modificar mensagens.

Cuidado

Muitas das propriedades e parâmetros nas APIs de conversão de conteúdo permitem valores grandes o suficiente para causar problemas de desempenho, incluindo negação de serviço. Ao usar as APIs de conversão de conteúdo em um agente de transporte, você deve implementar limites nos tamanhos de valor da propriedade e do parâmetro que você dá suporte ao ler ou escrever para limitar o consumo de recursos pelo seu agente.

Classes usadas para ler, gravar ou modificar mensagens

A tabela a seguir lista as classes .NET Framework que você pode usar para ler, gravar e modificar mensagens de email.

.NET Framework namespaces de processamento de mensagens

namespace .NET Framework Aulas
Microsoft.Exchange.Data.Mime.Encoders
Contém classes para codificação e decodificação na memória, uma classe de fluxo de codificador que aceita uma das classes codificadoras ou decodificadoras contidas em uma enumeração associada e a classe base ByteEncoder e a classe de exceção ByteEncoderException para codificadores e decodificadores.
Microsoft.Exchange.Data.ContentTypes.iCalendar
Contém tipos que permitem ler e gravar fluxos de dados que contêm informações de calendário. Inclui um leitor e um gravador de calendário, um objeto de exceção, um objeto de recorrência e estruturas e enumerações que ajudam você a retornar informações de propriedade sobre itens de calendário.
Microsoft.Exchange.Data.Mime
Contém classes, estruturas, enumerações e delegados que você pode usar para criar, ler, gravar, atravessar, codificar e decodificar dados MIME. Inclui um leitor e um gravador baseados em fluxo que fornece acesso de leitura e gravação somente para encaminhamento a fluxos de dados MIME, bem como métodos e classes baseados em DOM que você pode usar em documentos MIME.
Microsoft.Exchange.Data.TextConverters
Contém classes, estruturas, enumerações e delegados que permitem ler e gravar um fluxo de dados e executar conversões entre tipos de dados específicos; por exemplo, HTML para RTF (Rich Text Format). Conversores de texto permitem alterar o formato de um fluxo de documentos de um formulário para outro, bem como remover seletivamente elementos de um documento que podem representar um risco à segurança.
Microsoft.Exchange.Data.ContentTypes.Tnef
Contém um leitor e um gravador de fluxo somente para a frente, uma classe de exceção e estruturas e enumerações que facilitam a leitura e gravação de dados TNEF (Formato de Encapsulamento Neutro de Transporte).
Microsoft.Exchange.Data.ContentTypes.vCard
Contém um leitor e um gravador de fluxo somente para a frente, uma classe de exceção e estruturas e enumerações que facilitam a leitura e gravação de dados de contato formatados por vCard.

Namespace de codificadores

O namespace encoders contém classes para codificação e decodificação na memória. Estes herdam da classe base ByteEncoder . As classes codificam e decodificam para Base64, BinHex, Quoted-printable (qp) e Unix-to-Unix (Uu). As seguintes classes são usadas para codificação e decodificação na memória:

Os codificadores e decodificadores herdam da classe base ByteEncoder e usam a classe de exceção ByteEncoderException para tratamento de erros.

Além disso, o namespace contém a classe MacBinaryHeader , que identifica arquivos codificados do MacBinary e lê o cabeçalho de arquivo associado.

Por fim, a classe EncoderStream executa uma conversão em um fluxo de dados em vez de um objeto na memória. Essa classe aceita uma das classes codificadora ou decodificador e lê ou grava de acordo com a enumeração EncoderStreamAccess associada.

namespace iCalendar

O namespace iCalendar fornece um leitor e um gravador somente para encaminhamento para dados iCalendar, além de dar suporte a estruturas e classes para criar, acessar e modificar fluxos iCalendar.

As classes CalendarReader e CalendarWriter são usadas para ler e gravar dados de fluxo iCalendar.

O CalendarReader usa um Fluxo legível como um argumento para seus construtores. Em seguida, você pode usar os métodos ReadFirstChildComponent, ReadNextSiblingComponent e ReadNextComponent para acessar sequencialmente os componentes iCalendar no fluxo de dados. Com base no valor definido para a propriedade ComplianceMode , os erros no fluxo iCalendar causarão uma exceção ou farão com que a propriedade ComplianceStatus seja definida como um valor diferente de Compliant. Você pode verificar essa propriedade para descobrir quaisquer problemas com dados iCalendar de entrada.

A classe CalendarWriter usa um Fluxo gravável como um argumento para seus construtores.

Namespace MIME

O namespace MIME fornece classes que permitem criar, acessar e modificar documentos MIME. Você pode trabalhar com documentos MIME usando um método baseado em fluxo ou baseado em DOM.

Classe MimeDocument e o MIME DOM

A classe MimeDocument permite o acesso do DOM a um documento MIME. Use objetos desse tipo quando tiver a memória disponível para carregar um DOM inteiro e tiver acesso aleatório aos cabeçalhos e conteúdo da mensagem.

Você carrega dados em um objeto MimeDocument usando os métodos GetLoadStream ou Load . Em seguida, você pode andar na hierarquia do DOM e criar, modificar ou remover dados MIME. Depois de modificar os dados MIME, você poderá gravá-los em um fluxo usando um dos métodos WriteTo .

A figura a seguir mostra a estrutura de dados dentro de um objeto MimeDocument .

Figura 1. Estrutura de objetos MimeDocument

MIME DOM Architecture

Classes MimeReader e MimeWriter e análise MIME baseada em fluxo

As classes MimeReader e MimeWriter habilitam o acesso direto somente a fluxos MIME. Use essas classes quando não precisar alterar os dados MIME que exigem dados que já foram lidos ou gravados. Por exemplo, se você quiser imprimir mensagens que se encaixem em um formato predefinido, a classe MimeWriter poderá ser ideal.

A classe MimeDocument encapsula um DOM. As classes MimeReader e MimeWriter representam computadores de estado. Seus estados mudam com base na entrada recebida e nos métodos chamados. Os números 2 a 5 são diagramas de transição de estado simplificados que mostram, para o objeto MimeReader , quais métodos são válidos para chamar de cada estado e do estado que resultará.

Para usar esses diagramas, siga as setas de um estado para o outro, observando que o método chama ou retorna valores que fazem com que o estado seja alterado. Por exemplo, no primeiro diagrama, suponha que você esteja no início do fluxo que pertence ao MimeReader que você criou. Para chegar ao estado Cabeçalhos de Parte, chame um de ReadNextPart ou ReadFirstChildPart, nessa ordem. Se houver cabeçalhos (ou seja, se o MIME estiver bem formado), você entrará no estado Cabeçalhos de Parte. Caso contrário, uma exceção será gerada.

Figura 2. Diagrama de transição de estado simplificado para objetos MimeReader

MimeReader State Diagram

Observação

Os números 3, 4 e 5 se expandem em estados mostrados em cada um dos diagramas anteriores.

Figura 3. Expansão do estado cabeçalhos de parte da Figura 2

Expansion of 'Part Headers' state

Figura 4. Expansão do estado cabeçalho da Figura 3 quando um parâmetro foi encontrado em um cabeçalho

Expansão do estado 'Part Headers' quando um parâmetro foi encontrado em um cabeçalho

Observação

O estado representado pela Figura 5 é recursivo em que, se um grupo de endereços for encontrado, você poderá usar a propriedade GroupRecipientReader para ler os endereços no grupo.

Figura 5. Expansão do estado cabeçalho da Figura 3 quando um endereço ou grupo de endereços é encontrado

Expansion of 'Header' state for address or group

Os números 6 e 7 mostram diagramas de transição de estado simplificados para o objeto MimeWriter .

Observação

A Figura 7 se expande no estado Cabeçalhos de Parte mostrado na Figura 6.

Figura 6. Diagrama de transição de estado simplificado para objetos MimeWriter

State Transition Diagram for MimeWriter

Figura 7. Expansão do estado cabeçalhos de parte da Figura 6

State Transition Diagram Expansion for MimeWriter

Namespace TextConverters

O namespace TextConverters contém tipos que dão suporte à conversão do conteúdo das mensagens de email. Esses tipos podem executar a conversão de página de código, remover HTML que não é seguro e executar outras transformações em corpos de mensagens de email. O namespace Microsoft.Exchange.Data.TextConverters inclui as seguintes classes derivadas da classe abstrata TextConverter :

Esses conversores de texto permitem alterar o formato de um fluxo de documentos ou remover elementos que não estão seguros de um documento HTML. Essas classes podem ser usadas por si só para executar uma conversão usando uma única chamada para um dos métodos Converter na classe base TextConverter ou podem ser passadas para um construtor do conversor, que a usa para executar leituras ou gravações convertidas.

A funcionalidade herdada da classe base é útil para executar conversões quando você tem espaço suficiente para armazenar o documento original e sua saída convertida, ou quando você deseja armazenar os resultados da conversão. O método Converter usa fluxos de entrada e saída, leitores de texto ou escritores de texto e converte o conteúdo da entrada na saída associada.

Também estão incluídas no namespace as seguintes classes de leitor, gravador e fluxo de texto:

Elas são usadas para executar conversões quando você não tem espaço para armazenar a saída original ou convertida, quando você recebe a entrada ou envia a saída para um fluxo ou quando deseja a saída apenas para indexação ou para fins de pesquisa e, portanto, não deseja armazenar o resultado de uma conversão.

Namespace Tnef

O namespace Tnef contém classes e tipos que habilitam a leitura e a gravação somente em fluxo de dados TNEF. O TNEF é um formato de dados usado para encapsular propriedades MAPI para clientes que não podem interpretar MAPI.

As classes TnefReader e TnefWriter fornecem a funcionalidade principal no namespace Microsoft.Exchange.Data.ContentTypes.Tnef .

A classe TnefReader usa um fluxo legível como um argumento para seus construtores. Em seguida, você usa o método ReadNextAttribute para ler sequencialmente os atributos no fluxo TNEF. Depois de ler um atributo, você pode acessar informações sobre o atributo usando qualquer uma das propriedades somente leitura no objeto TnefReader , além de obter um TnefPropertyReader para ler a propriedade atual. Você também pode acessar diretamente o atributo atual usando o método ReadAttributeRawValue .

A classe TnefWriter usa um Stream gravável como um argumento para seus construtores. A classe TnefWriter fornece várias maneiras de gravar dados nesse fluxo.

namespace vCard

O namespace do vCard contém classes, estruturas e enumerações usadas para ler e gravar informações de contato contidas em uma mensagem de email que está no formato de dados vCard. O namespace contém um leitor de contatos e um gravador, uma classe de exceção, um leitor de propriedades, um leitor de parâmetros e enumerações de suporte que permitem ler dados vCard associados a uma mensagem de email.

Confira também