Lectura y modificación de mensajes en la canalización de transporte de Exchange 2013

Obtenga información sobre las clases de .NET Framework que puede usar en los agentes de transporte de Exchange 2013 para leer, escribir y modificar mensajes.

Se aplica a: Exchange Server 2013

  • Clases usadas para leer, escribir o modificar mensajes
  • Espacio de nombres Codificadores
  • Espacio de nombres iCalendar
  • Espacio de nombres MIME
  • Espacio de nombres TextConverters
  • Espacio de nombres Tnef
  • Espacio de nombres vCard

A medida que los mensajes pasan a través de la canalización de transporte, el agente de transporte puede leer, escribir y convertir contenido de mensajes entre diferentes formatos de datos. Por ejemplo, puede leer y escribir datos MIME, identificar los mensajes entrantes que están en formato Uuencoded o Quoted-printable (qp) y, a continuación, convertirlos a un estándar usado por su organización, o leer y, a continuación, guardar la información de calendario o de contacto asociada a los mensajes entrantes.

También puede identificar el contenido que supone una amenaza de seguridad y mover o eliminar el contenido o los mensajes que los contienen; por ejemplo, quitando vínculos en un mensaje HTML.

En este artículo se proporciona información sobre las clases de .NET Framework que puede usar para leer, escribir y modificar mensajes.

Precaución

Muchas de las propiedades y parámetros de las API de conversión de contenido permiten valores lo suficientemente grandes como para causar problemas de rendimiento, incluida la denegación de servicio. Al usar las API de conversión de contenido en un agente de transporte, debe implementar límites en los tamaños de valor de propiedad y parámetro que admita al leer o escribir para limitar el consumo de recursos por parte del agente.

Clases usadas para leer, escribir o modificar mensajes

En la tabla siguiente se enumeran las clases de .NET Framework que puede usar para leer, escribir y modificar mensajes de correo electrónico.

Espacios de nombres de procesamiento de mensajes de .NET Framework

Espacio de nombres de .NET Framework Clases
Microsoft.Exchange.Data.Mime.Encoders
Contiene clases para codificación y descodificación en memoria, una clase de flujo de codificador que acepta una de las clases de codificador o descodificador contenidas en una enumeración asociada, y la clase base ByteEncoder y la clase de excepción ByteEncoderException para los codificadores y descodificadores.
Microsoft.Exchange.Data.ContentTypes.iCalendar
Contiene tipos que permiten leer y escribir secuencias de datos que contienen información de calendario. Incluye un lector de calendario y un escritor, un objeto de excepción, un objeto de periodicidad y estructuras y enumeraciones que le ayudan a devolver información de propiedades sobre los elementos de calendario.
Microsoft.Exchange.Data.Mime
Contiene clases, estructuras, enumeraciones y delegados que puede usar para crear, leer, escribir, recorrer, codificar y descodificar datos MIME. Incluye un lector y un escritor basados en secuencias que le proporciona acceso de lectura y escritura de solo avance a flujos de datos MIME, así como métodos y clases basados en DOM que puede usar en documentos MIME.
Microsoft.Exchange.Data.TextConverters
Contiene clases, estructuras, enumeraciones y delegados que permiten leer y escribir un flujo de datos y realizar conversiones entre tipos de datos específicos; por ejemplo, html a formato de texto enriquecido (RTF). Los convertidores de texto permiten cambiar el formato de una secuencia de documentos de un formulario a otro, así como quitar de forma selectiva elementos de un documento que podrían suponer un riesgo para la seguridad.
Microsoft.Exchange.Data.ContentTypes.Tnef
Contiene un lector y un escritor de secuencias de solo avance, una clase de excepción y estructuras y enumeraciones que facilitan la lectura y escritura de datos del formato de encapsulación neutro de transporte (TNEF).
Microsoft.Exchange.Data.ContentTypes.vCard
Contiene un lector y un escritor de secuencias de solo avance, una clase de excepción y estructuras y enumeraciones que facilitan la lectura y escritura de datos de contacto con formato vCard.

Espacio de nombres Codificadores

El espacio de nombres Codificadores contiene clases para codificación y descodificación en memoria. Heredan de la clase base ByteEncoder . Las clases codifican y descodifican para Base64, BinHex, Quoted-printable (qp) y Unix-to-Unix (Uu). Las clases siguientes se usan para la codificación y descodificación en memoria:

Los codificadores y descodificadores heredan de la clase base ByteEncoder y usan la clase de excepción ByteEncoderException para el control de errores.

Además, el espacio de nombres contiene la clase MacBinaryHeader , que identifica los archivos codificados en MacBinary y lee el encabezado de archivo asociado.

Por último, la clase EncoderStream realiza una conversión en una secuencia de datos en lugar de un objeto en memoria. Esta clase acepta una de las clases de codificador o descodificador y lee o escribe según la enumeración EncoderStreamAccess asociada.

Espacio de nombres iCalendar

El espacio de nombres iCalendar proporciona un lector y un escritor de solo avance para los datos de iCalendar, además de admitir estructuras y clases para crear, acceder y modificar secuencias de iCalendar.

Las clases CalendarReader y CalendarWriter se usan para leer y escribir datos de flujo de iCalendar.

CalendarReader toma una secuencia legible como argumento para sus constructores. A continuación, puede usar los métodos ReadFirstChildComponent, ReadNextSiblingComponent y ReadNextComponent para acceder secuencialmente a los componentes de iCalendar en la secuencia de datos. En función del valor que haya establecido para la propiedad ComplianceMode , los errores en el flujo de iCalendar harán que se produzca una excepción o hará que la propiedad ComplianceStatus se establezca en un valor distinto de Compliant. Puede comprobar esta propiedad para detectar cualquier problema con los datos entrantes de iCalendar.

La clase CalendarWriter toma una secuencia grabable como argumento para sus constructores.

Espacio de nombres MIME

El espacio de nombres MIME proporciona clases que permiten crear, acceder y modificar documentos MIME. Puede trabajar con documentos MIME mediante un método basado en secuencias o basado en DOM.

MimeDocument (clase) y MIME DOM

La clase MimeDocument permite el acceso DOM a un documento MIME. Use objetos de este tipo cuando tenga la memoria disponible para cargar un DOM completo y debe tener acceso aleatorio a los encabezados y al contenido del mensaje.

Los datos se cargan en un objeto MimeDocument mediante los métodos GetLoadStream o Load . A continuación, puede recorrer la jerarquía DOM y crear, modificar o quitar datos MIME. Después de modificar los datos MIME, puede escribirlos en una secuencia mediante uno de los métodos WriteTo .

En la ilustración siguiente se muestra la estructura de los datos dentro de un objeto MimeDocument .

Figura 1. Estructura de objetos MimeDocument

Arquitectura DOM MIME

Clases MimeReader y MimeWriter y análisis MIME basado en secuencias

Las clases MimeReader y MimeWriter permiten el acceso de solo avance a secuencias MIME. Use estas clases cuando no tenga que cambiar los datos MIME que requieren datos que ya se han leído o escrito. Por ejemplo, si desea imprimir mensajes que se ajusten a un formato predefinido, la clase MimeWriter podría ser ideal.

La clase MimeDocument encapsula un DOM. Las clases MimeReader y MimeWriter representan equipos de estado. Sus estados cambian en función de la entrada recibida y de los métodos a los que se llama. Las figuras 2 a 5 son diagramas de transición de estado simplificados que muestran, para el objeto MimeReader , qué métodos son válidos para llamar desde cada estado y el estado que se producirá.

Para usar estos diagramas, siga las flechas de un estado al siguiente, observando las llamadas al método o los valores devueltos que hacen que el estado cambie. Por ejemplo, en el primer diagrama, suponga que está al principio de la secuencia que pertenece al MimeReader que ha creado. Para llegar al estado Encabezados de elemento, llame a uno de ReadNextPart o ReadFirstChildPart, en ese orden. Si hay encabezados (es decir, si el MIME está bien formado), entrará en el estado Encabezados de pieza. De lo contrario, se producirá una excepción.

Figura 2. Diagrama de transición de estado simplificado para objetos MimeReader

Diagrama de estado de MimeReader

Nota:

Las figuras 3, 4 y 5 amplían los estados que se muestran en cada uno de los diagramas anteriores.

Figura 3. Expansión del estado de encabezados de pieza de la figura 2

Expansión del estado 'Encabezados de partes'

Figura 4. Expansión del estado de encabezado de la figura 3 cuando se ha encontrado un parámetro en un encabezado

Expansión del estado

Nota:

El estado representado por la figura 5 es recursivo en que, si se encuentra un grupo de direcciones, puede usar la propiedad GroupRecipientReader para leer las direcciones del grupo.

Figura 5. Expansión del estado de encabezado de la figura 3 cuando se encuentra una dirección o un grupo de direcciones

Expansión del estado 'Encabezado' para dirección o grupo

Las figuras 6 y 7 muestran diagramas de transición de estado simplificados para el objeto MimeWriter .

Nota:

La figura 7 se expande en el estado Encabezados de pieza que se muestra en la figura 6.

Figura 6. Diagrama de transición de estado simplificado para objetos MimeWriter

Diagrama de transición de estado para MimeWriter

Figura 7. Expansión del estado de encabezados de pieza de la figura 6

Expansión de diagrama de transición de estado para MimeWriter

Espacio de nombres TextConverters

El espacio de nombres TextConverters contiene tipos que admiten la conversión del contenido de los mensajes de correo electrónico. Estos tipos pueden realizar la conversión de páginas de códigos, quitar HTML que no es seguro y realizar otras transformaciones en cuerpos de mensajes de correo electrónico. El espacio de nombres Microsoft.Exchange.Data.TextConverters incluye las clases siguientes que derivan de la clase abstracta TextConverter :

Estos convertidores de texto permiten cambiar el formato de una secuencia de documentos o quitar elementos que no son seguros de un documento HTML. Estas clases pueden usarse por sí mismas para realizar una conversión mediante una sola llamada a uno de los métodos Convert de la clase base TextConverter , o bien se pueden pasar a un constructor del convertidor, que lo usa para realizar lecturas o escrituras convertidas.

La funcionalidad heredada de la clase base es útil para realizar conversiones cuando tiene espacio suficiente para almacenar el documento original y su salida convertida, o cuando desea almacenar los resultados de la conversión. El método Convert toma secuencias de entrada y salida, lectores de texto o escritores de texto, y convierte el contenido de la entrada en la salida asociada.

También se incluyen en el espacio de nombres las siguientes clases de lectura, escritura y secuencia de texto:

Se usan para realizar conversiones cuando no tiene espacio para almacenar el original o su salida convertida, cuando recibe la entrada de o envía la salida a un flujo, o cuando desea que la salida solo se indexe o busque y, por tanto, no quiera almacenar el resultado de una conversión.

Espacio de nombres Tnef

El espacio de nombres Tnef contiene clases y tipos que permiten la lectura y escritura de datos TNEF basados en secuencias de solo avance. TNEF es un formato de datos que se usa para encapsular las propiedades MAPI para los clientes que no pueden interpretar MAPI.

Las clases TnefReader y TnefWriter proporcionan la funcionalidad principal del espacio de nombres Microsoft.Exchange.Data.ContentTypes.Tnef .

La clase TnefReader toma una secuencia legible como argumento para sus constructores. A continuación, use el método ReadNextAttribute para leer secuencialmente los atributos de la secuencia TNEF. Después de leer un atributo, puede obtener acceso a información sobre el atributo mediante cualquiera de las propiedades de solo lectura en el objeto TnefReader , además de obtener un objeto TnefPropertyReader para leer la propiedad actual. También puede acceder directamente al atributo actual mediante el método ReadAttributeRawValue .

La clase TnefWriter toma una secuencia grabable como argumento para sus constructores. La clase TnefWriter proporciona varias maneras de escribir datos en esta secuencia.

Espacio de nombres vCard

El espacio de nombres vCard contiene clases, estructuras y enumeraciones que se usan para leer y escribir información de contacto contenida en un mensaje de correo electrónico con el formato de datos vCard. El espacio de nombres contiene un lector de contactos y un escritor, una clase de excepción, un lector de propiedades, un lector de parámetros y enumeraciones auxiliares que permiten leer los datos de vCard asociados a un mensaje de correo electrónico.

Vea también