controlla se nel messaggio originale compare l'immagine
Non capisco; non esiste un messaggio originale: viene generato dallo script.
nn è che il client di posta ti blocca le immagini vero??
No no:vai tranquillo!E' la prima cosa che ho controllato.E poi se mando la mail con allegato immagine utilizzando Outlook Express invece che lo script PHP funziona tutto regolarmente.
A questo punto penso valga la pena di postare il codice completo:
codice:
<?php
error_reporting(E_ALL);
// costruiamo alcune intestazioni generali
$header = "From: Inviante <inviante@dominio.org>\n";
//$header .= "CC: Altro Ricevente <altroricevente@dominio.net>\n";
$header .= "X-Mailer: Il nostro Php\n";
// generiamo le stringhe utilizzate come separatori
$boundary = "==String_Boundary_x" .md5(time()). "x";
$boundary2 = "==String_Boundary2_y" .md5(time()). "y";
// costruiamo le intestazioni specifiche per un messaggio
// con parti relazionate
$header .= "MIME-Version: 1.0\n";
$header .= "Content-Type: multipart/related;\n";
$header .= " type=\"multipart/alternative\";\n";
$header .= " boundary=\"$boundary\";\n\n";
$messaggio = "Se visualizzi questo testo il tuo programma non supporta i MIME\n\n";
// il primo segmento del multipart/related
// è definito come multipart/alternative
$messaggio .= "--$boundary\n";
$messaggio .= "Content-Type: multipart/alternative;\n";
$messaggio .= " boundary=\"$boundary2\";\n\n";
// sezione alternativa in puro testo
$messaggio .= "--$boundary2\n";
$messaggio .= "Content-Type: text/plain; charset=\"iso-8859-1\"\n";
$messaggio .= "Content-Transfer-Encoding: 7bit\n\n";
$messaggio .= "Messaggio alternativo in formato testo.\n\n";
// sezione alternativa in formato html
$messaggio .= "--$boundary2\n";
$messaggio .= "Content-Type: text/html; charset=\"iso-8859-1\"\n";
$messaggio .= "Content-Transfer-Encoding: 7bit\n\n";
$messaggio .= "<html><body>
Questo messaggio è in formato html ma ha una parte testo.</p>
Visita il sito <a href=\"http://www.html.it\">www.html.it</a><img src=\"cid:MiaImmagine123\"></p></body></html>\n";
// chiusura della sezione multipart/alternative
$messaggio .= "--$boundary2--\n";
// seconda sezione del multipart/related contenente l'immagine
$messaggio .= "--$boundary\n";
$messaggio .= "Content-ID: <MiaImmagine123>\n";
$messaggio .= "Content-Type: image/jpeg\n";
$messaggio .= "Content-Transfer-Encoding: base64\n\n";
$allegato = "../immagini/logo_b.jpg";
$file = fopen($allegato,'rb');
$data = fread($file,filesize($allegato));
fclose($file);
$data = chunk_split(base64_encode($data));
$messaggio .= "$data\n\n";
// chiusura della sezione multipart/related
$messaggio .= "--$boundary--\n";
$subject = "oggetto del messaggio alternativo con immagini inline";
if( @mail("tizio@localhost", $subject, $messaggio, $header) ) echo "e-mail inviata con successo!";
else echo "errore nell'invio dell'e-mail!";
?>
Due paroline su come ho personalizzato lo script:
- ho commentato la linea che aggiunge all'header l'indirizzo mail per conoscenza CC
- ho personalizzato il percorso che lo script deve seguire per recuperare il file dell'immagine ../immagini/logo_b.jpg.
Infatti lo script si trova nella cartella /php mentre l'immagine nella cartella /immagini, quindi dalla cartella /php per recuperare l'immagine faccio ../immagini/logo_b.jpg - l'indirizzo di posta elettronica del destinatario tizio@localhost: ho installato un mail server della ArgoSoft (sistema operativo Win2000, web server con EasyPHP 1.7)
Grazie ancora per la tua disinteressata competenza