RegEx pour trouver des images en ligne dans un message électronique de texte brut
-
02-10-2019 - |
Question
Certains clients de messagerie permettent à l'expéditeur de placer des images directement dans le corps de leur e-mail (au lieu d'un attachement traditionnel). Quand je reçois un de ces e-mails dans ma demande, je dois être en mesure de regarder le corps du message text/plain
uniquement et déterminer que l'émetteur intégré une image en ligne.
Je suis en train de concevoir un RegEx pour trouver une image par le corps du message de text/plain
pour que je puisse les échanger pour les balises <img>
dans ma propre version de type HTML du message. (Wacky, je sais, mais c'est l'exigence).
Le problème je trouve que les espaces réservés diffèrent en fonction du client de messagerie d'envoi. Par exemple, lors de l'envoi à partir de MS Outlook, le corps de text/plain
des regards de message en plusieurs parties comme ceci:
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 message similaire envoyé par Gmail est un peu différent:
Content-Type: text/plain; charset=ISO-8859-1
Check out this image:
[image: image001.jpg]
Isn't it cool??
Le corps de text/html
et une partie de image/jpeg
avec l'image codée base64 suivi.
Quelqu'un at-il fait des recherches à ce sujet avant et compilé une liste ou construit un RegEx spécialement à cet effet?
Je me rends compte d'une manière plus fiable pour atteindre mon objectif est de regarder la partie text/html
du message - qui semble être un peu plus standardisé des quelques tests que j'ai fait - mais malheureusement, je n'ai pas l'accès à ce dans ce scénario.
J'utilise C #, si cela importe à tout le monde.
Voici une liste des espaces réservés aux images text / plain J'ai compilé jusqu'ici:
- Gmail:
[image: filename.jpg]
- Outlook 2007:
[cid:filename.jpg@01CB50D4.769583B0]
- Thunderbird 3.0.7:
none
La solution
Je vous suggère d'aller avec une partie html. Si vous voulez trouver juste un espace réservé dans une partie de texte brut, devrait être suffisant cette expression régulière très simple (PCRE):
^\[.*\]$
Au moins est ce qui fonctionne pour des exemples ci-dessus. Si vous souhaitez identifier le nom de l'image, serait nécessaire un peu d'expression compliquée. Que l'esprit, cela attraper toutes les lignes commençant par [et se terminant par], peu importe ce que le contenu est. Si vous souhaitez limiter l'expression rationnelle certains types de fichiers, essayez ceci:
^\[.*(\.jpg|\.jpeg|\.png|\.gif|\.bmp).*\]$i
Exemples fonctionne en Perl, puisque vous ne l'avez pas mentionné la langue ...