Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    Come si usa il "boundary"?

    Ciao a tutti,

    vorrei scrivere uno script che invii una mail in formato HTML con delle immagini allegate. Per questo motivo ho studiato gli articoli EMail in formato HTML con PHP di Ermanno Ancona, La funzione mail() di Giancarlo Moschitta e la pillola Inviare mail in formato HTML e con allegato in PHP di Teuccio.
    Nonostante tutti questi script funzionino regolarmente nessuno di loro riesce a inviare l'immagine allegata; la mail che scarico è composta corretamente e al posto dell'immagine vedo il segnaposto tipico che si vede su qualsiasi pagina internet per sostituire l'immagine mancante. Se clicco su "Salva" vedo un nome di immagine diverso dall'originale e di dimansioni pari a 0Kb.
    Analizzando il codice di Ermanno Ancona mi sono insospettito riguardo all'uso che fa del tag boundary:
    codice:
    // 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";
    Perchè il contenuto viene definito di tipo multipart/related e subito dopo di tipo multipart/alternative?

    Sono due giorni che ci sbatto la testa
    cosmosub
    --------
    "So di non sapere" - Socrate

  2. #2
    Moderatore di Server Apache L'avatar di marketto
    Registrato dal
    Sep 2001
    Messaggi
    5,858
    credo che il problema vada ricercato in altri luoghi:
    qual'è la dimensione della mail (con allgeato) che ricevi??
    la segnalazione di notice ed errori è attiva??
    think simple think ringo

  3. #3
    Ciao Marchetto,

    grazie infinite per la tua risposta.
    qual'è la dimensione della mail (con allgeato) che ricevi??
    La dimensione della mail è di 13kb (l'immagine di per se pesa 8,64kb)
    la segnalazione di notice ed errori è attiva??
    In cima al codice PHP ho messo error_reporting(E_ALL); .
    Nel php.ini il parametro "error_reporting" è = a "E_ALL".
    Non ricevo alcun messaggio d'errore.
    Spero di averti fornito le informazioni che ti servivano, altrimenti, e in ogni caso, non farti assolutamente scrupolo a chiedermene delle altre.

    Un saluto
    cosmosub
    --------
    "So di non sapere" - Socrate

  4. #4
    Moderatore di Server Apache L'avatar di marketto
    Registrato dal
    Sep 2001
    Messaggi
    5,858
    dalla dimensione sembrerebbe che l'immagine venga effettivamente allegata alla mail, ma poi nn riesca ad essere visualizzata.
    controlla se nel messaggio originale compare l'immagine (generalmente facendo proprietà del singolo messaggio).

    altra cosa: nn è che il client di posta ti blocca le immagini vero??
    think simple think ringo

  5. #5
    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
    cosmosub
    --------
    "So di non sapere" - Socrate

  6. #6
    Moderatore di Server Apache L'avatar di marketto
    Registrato dal
    Sep 2001
    Messaggi
    5,858
    ciao, lo script funziona

    l'ho appena provato in locale, usando le configurazioni SMTP di php per inviare la mail, mettendo come immagine un'immagine qualsiasi del mio hd ed è arrivata puntuale su outlook express...
    think simple think ringo

  7. #7
    accidenti,

    usando le configurazioni SMTP di php per inviare la mail
    A cosa ti riferisci?Io ho impostato solo questo

    [mail function]
    ; For Win32 only.
    SMTP = localhost

    ; For Win32 only.
    sendmail_from = webmaster@localhost.com


    C'è dell'altro?Ho sbagliato qualcosa?
    cosmosub
    --------
    "So di non sapere" - Socrate

  8. #8
    Moderatore di Server Apache L'avatar di marketto
    Registrato dal
    Sep 2001
    Messaggi
    5,858
    in quella sezione del php.ini ho semplicemente messo il server di posta in uscita di alice (out.aliceposta.it) ed un'indirizzo email valido...
    think simple think ringo

  9. #9
    ho modificato lo script in modo da rendere il codice di uscita il più possibile uguale a quello generato da Outlook Express:
    Questo è il codice generato da Outlook Express:
    Received: from [127.0.0.1] by train02
    (ArGoSoft Mail Server Freeware, Version 1.8 (1.8.6.7)); Thu, 18 Nov 2004 11:49:13 +0100
    Message-ID: <000a01c4cd5c$3d72b730$7902010a@train02>
    From: "Caio" <caio@localhost>
    To: <tizio@localhost>
    Subject: Test
    Date: Thu, 18 Nov 2004 11:49:10 +0100
    MIME-Version: 1.0
    Content-Type: multipart/related;
    type="multipart/alternative";
    boundary="parteMISTA"
    X-Priority: 3
    X-MSMail-Priority: Normal
    X-Mailer: Microsoft Outlook Express 6.00.2800.1437
    X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1441

    This is a multi-part message in MIME format.

    --parteMISTA
    Content-Type: multipart/alternative;
    boundary="parteALTERNATIVA"


    --parteALTERNATIVA
    Content-Type: text/plain;
    charset="iso-8859-1"
    Content-Transfer-Encoding: quoted-printable


    --parteALTERNATIVA
    Content-Type: text/html;
    charset="iso-8859-1"
    Content-Transfer-Encoding: quoted-printable

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML><HEAD>
    <META http-equiv=3DContent-Type content=3D"text/html; =
    charset=3Diso-8859-1">
    <META content=3D"MSHTML 6.00.2800.1458" name=3DGENERATOR>
    <STYLE></STYLE>
    </HEAD>
    <BODY bgColor=3D#ffffff>
    <DIV><FONT face=3DArial size=3D2><IMG alt=3D"" hspace=3D0=20
    src=3D"cid:immaginedainserire" align=3Dbaseline=20
    border=3D0></FONT></DIV></BODY></HTML>

    --parteALTERNATIVA--

    --parteMISTA
    Content-Type: image/jpeg;
    name="logo_b.jpg"
    Content-Transfer-Encoding: base64
    Content-ID: <immaginedainserire>
    NOTA Ho sosituito i nomi dei bonduary con "parteMISTA" e "parteALTERNATIVA" per rendere il tutto un po' più comprensibile
    Ho sistituito anche il nome dell'ID dell'immagine da inserire con "immaginedainserire".

    Questo invece è il codice generato dallo script PHP:

    Received: from [127.0.0.1] by train02
    (ArGoSoft Mail Server Freeware, Version 1.8 (1.8.6.7)); Thu, 18 Nov 2004 13:03:22 +0100
    Date: Thu, 18 Nov 2004 13:03:21 +0100
    Subject: Test
    To: tizio@localhost
    From: WebMaster <webmaster@localhost>
    X-Mailer: Il nostro Php
    MIME-Version: 1.0
    Content-Type: multipart/related;
    type="multipart/alternative";
    boundary="parteMISTA";
    Message-ID: <8tl8txopsrn6kfz.181120041303@train02>

    Se visualizzi questo testo il tuo programma non supporta i MIME

    --parteMISTA
    Content-Type: multipart/alternative;
    boundary="parteALTERNATIVA";

    --parteALTERNATIVA
    Content-Type: text/plain;
    charset="iso-8859-1"
    Content-Transfer-Encoding: quoted-printable

    Messaggio alternativo in formato testo.

    --parteALTERNATIVA
    Content-Type: text/html;
    charset="iso-8859-1"
    Content-Transfer-Encoding: quoted-printable

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML><HEAD>
    <META http-equiv=3DContent-Type content=3D"text/html; = charset=3Diso-8859-1">
    <META content=3D"MSHTML 6.00.2800.1458" name=3DGENERATOR>
    <STYLE></STYLE>
    </HEAD>
    <BODY bgColor=3D#ffffff>
    <DIV><FONT face=3DArial size=3D2><IMG alt=3D"" hspace=3D0=20 src=3D"cid:immaginedainserire" align=3Dbaseline=20 border=3D0></FONT></DIV></BODY></HTML>
    --parteALTERNATIVA--
    --parteMISTA
    Content-Type: image/jpeg;
    name="logo_b.jpg"
    Content-Transfer-Encoding: base64
    Content-ID: <immaginedainserire>
    A me sembra che le piccole differenze non siano la causa del problema ... la cosa che mi sconcerta è l'assenza di messaggi d'errore ... per di più il codice dell'immagine è presente nel testo d'uscita (non lo posso allegare perchè supererei il numero massimo dei caratteri consentiti per un post)
    Ho provato ad aprire l'immagine salvata dalla mail con IrfanView e mi ha dato il seguente messaggio d'errore:
    "Impossibile leggere l'intestazione del file
    Formato del file sconosciuto"
    :master:
    Ma che vuol dire?!
    cosmosub
    --------
    "So di non sapere" - Socrate

  10. #10
    Moderatore di Server Apache L'avatar di marketto
    Registrato dal
    Sep 2001
    Messaggi
    5,858
    che assieme all'immagine c'è qualcos'altro, controlla bene gli spazi e i \n.
    sei sicuro che quell'immagine funzioni??

    ti ripeto, il codice che ho provato prima ha funzionato, senza problemi
    think simple think ringo

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.