RegEx para encontrar imágenes en línea en un mensaje de correo electrónico de texto sin formato

StackOverflow https://stackoverflow.com/questions/3691877

Pregunta

Algunos clientes de correo permiten que el remitente lugar las imágenes directamente en el cuerpo de su correo electrónico (en lugar de como un archivo adjunto tradicional). Cuando recibo uno de estos mensajes de correo electrónico en mi solicitud, tengo que ser capaz de mirar a Sólo el cuerpo del mensaje text/plain y determinar que el remitente integrado una imagen en línea.

Estoy tratando de diseñar una expresión regular para encontrar los marcadores de imagen en el cuerpo del mensaje text/plain para que pueda cambiarlos por etiquetas <img> en mi propia versión compatible con HTML del mensaje. (Raro, lo sé, pero esto es el requisito).

El problema que estoy encontrando es que los marcadores de posición diferencian basado en el cliente de correo de envío. Por ejemplo, cuando se envían desde MS Outlook, el cuerpo text/plain de las múltiples partes del mensaje es similar al siguiente:

Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

Check out this image:

[cid:image001.jpg@01CB50D4.769583B0]

Isn't it cool??

Un mensaje similar enviado desde Gmail es un poco diferente:

Content-Type: text/plain; charset=ISO-8859-1

Check out this image:

[image: image001.jpg]

Isn't it cool??

El cuerpo text/html y parte image/jpeg con la base64 codificado imagen seguimiento.

¿Alguien ha hecho ninguna investigación sobre este antes y compilado una lista o una expresión regular construida específicamente para este propósito?

Me da cuenta de una manera más fiable para lograr mi objetivo es mirar la parte text/html del mensaje - que parece ser un poco más estandarizada de las pocas pruebas que he hecho - pero desafortunadamente no tengo el acceso a los que en este escenario.

Estoy usando C #, si lo que importa a nadie.

He aquí una lista de los marcadores de imagen de texto / plain he recopilado hasta el momento:

  • Gmail: [image: filename.jpg]
  • Outlook 2007: [cid:filename.jpg@01CB50D4.769583B0]
  • Thunderbird 3.0.7: none
¿Fue útil?

Solución

Me gustaría sugerir que ir con la parte html. Si usted quiere encontrar sólo un marcador de posición en la parte de texto plano, esta simple expresión regular debería ser suficiente (PCRE):

^\[.*\]$

Al menos esto es lo que funciona para los ejemplos anteriores. Si desea identificar el nombre de la imagen, se requeriría una expresión poco complicado. Cuenta que, esto va a coger todas las líneas que comienzan con [y terminando con] No importa cual es el contenido. Si desea límite expresión regular para algunos tipos de archivos, intente lo siguiente:

^\[.*(\.jpg|\.jpeg|\.png|\.gif|\.bmp).*\]$i

Los ejemplos trabajará en Perl, ya que usted no mencionó idioma ...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top