per chi fosse ancora in cerca di una soluzione, io ho risolto così:
Codice PHP:
// il path della mia cartella immagini
define(IMG_MAIL_PATH, "../Files/mail/img/");
//codice html di esempio
$BODY = "
testo</p>[img]prova1.jpg[/img]
altro testo</p><img src=\"prova2.jpg\" alt='prova2' />
testo</p>"; //il nostro html di prova
// TROVIAMO I TAG <img />
$imgcmd = array();
//identifica le img nell html
$array = preg_match_all("/<img[^>]*>/", $BODY, $aimgs);
foreach($aimgs[0] as $imgs){
//restituisce il nome file completo di src="
preg_match("/src=['\"][^'\"]*/", $imgs, $src);
//prende soltanto il nome del file (elimina src=")
$nomefile = substr($src[0], 5);
//controlla che il file immagine esista, sennò esce dallo script
if(file_exists(IMG_MAIL_PATH.$nomefile)) {
//crea un array del nome del file
$nomefile = explode('.',$nomefile);
$nome = $nomefile[0];
$ext = $nomefile[1];
//crea la stringa immagine adattata per phpmailer
$sostimg = "[img]cid:".$nome."[/img]";
//e la sostituisce con quella presente nel body
$BODY = str_replace($imgs, $sostimg, $BODY);
//aggiunge all'array $imgcmd il nome e l'estensione del file
$imgcmd[] = array($nome, $ext);
} else {
echo "il file immagine non è stato trovato";
exit;
}
}
a questo punto, non rimane che passare l'HTML a phpmailer per l'invio ($mail->body = $BODY)
e poi dichiarare l'allegato per ogni immagine presente:
Codice PHP:
foreach($imgcmd as $icmd){
$mail->AddEmbeddedImage(IMG_MAIL_PATH.$icmd[0].'.'.$icmd[1], $icmd[0], $icmd[0].'.'.$icmd[1]);
}
E' sicuramente migliorabile, ma intanto funziona.