RegEx per trovare immagini in linea ad una messaggio di posta elettronica di testo normale
-
02-10-2019 - |
Domanda
Alcuni client di posta elettronica consentono al mittente di posizionamento delle immagini direttamente nel corpo del loro email (anziché come un allegato tradizionale). Quando ricevo una di queste e-mail nella mia richiesta, ho bisogno di essere in grado di guardare solo il corpo del messaggio text/plain
e determinare che il mittente inserito un'immagine in linea.
Sto cercando di mettere una RegEx per trovare i segnaposto immagine nel corpo del messaggio text/plain
modo che io possa scambiare per i tag <img>
nella mia versione HTML-enabled del messaggio. (Wacky, lo so, ma questo è il requisito).
Il problema che sto trovando è che i segnaposto variano a seconda del client di posta di invio. Ad esempio, quando inviati da MS Outlook, il corpo text/plain
dei più parti sguardi messaggio come questo:
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 messaggio simile inviato da Gmail è un po 'diverso:
Content-Type: text/plain; charset=ISO-8859-1
Check out this image:
[image: image001.jpg]
Isn't it cool??
Il corpo text/html
e parte image/jpeg
con la codifica base64 follow immagine.
Qualcuno ha fatto alcuna ricerca su questo prima e compilato un elenco o costruito un RegEx appositamente per questo scopo?
mi rendo conto un modo più affidabile per raggiungere il mio obiettivo è quello di guardare la parte text/html
del messaggio - che sembra essere un po 'più standardizzato dai pochi test che ho fatto - ma purtroppo non ho l'accesso a che in questo scenario.
sto usando C #, se quello che conta a chiunque.
Ecco un elenco di testi / segnaposto immagine plain ho compilato finora:
- Gmail:
[image: filename.jpg]
- Outlook 2007:
[cid:filename.jpg@01CB50D4.769583B0]
- Thunderbird 3.0.7:
none
Soluzione
suggerirei di andare con la parte html. Se si vuole trovare solo un segnaposto nella parte di testo normale, questo molto semplice espressione regolare dovrebbe essere sufficiente (PCRE):
^\[.*\]$
Almeno questo è ciò che funziona per gli esempi di cui sopra. Se vuoi per identificare nome dell'immagine, un'espressione po 'complicato sarebbe necessario. Mente che, questo prenderà tutte le linee che iniziano con [e termina con] Non importa ciò che i contenuti sono. Se desideri limite regexp per alcuni tipi di file, provate questo:
^\[.*(\.jpg|\.jpeg|\.png|\.gif|\.bmp).*\]$i
Gli esempi funzionerà in Perl, dal momento che non ha citato la lingua ...