• User Attivo

    Immagini in e-mail

    Salve a tutti,
    devo inserire un'immagine all'interno del testo di un'e-mail.

    Ho creato questo codice:

    [php]
    $banner = "<img src='linksito/nomeimg.jpg' border='0' />";
    mail($to,$oggetto,$banner,$headers);
    [/php]

    Ora l'immagine arriva correttamente ma su outloock mi chiede sempre il consenso prima di cisualizzare le immagini. Esiste un modo per evitare questo problema?


  • User Attivo

    Il blocco delle immagini è un sistema di sicurezza introdotto per evitare il download di spam o codice nocivo, sopratutto se l'immagine fa riferimento ad un link esterno.
    Per rimuovere il blocco, nelle opzioni di protezione di outlook, cercare e deselezionare la voce "Blocca immagini e altri contenuti esterni alla posta elettronica HTML".


  • User Attivo

    Si ok, questo lo posso fare io sulla mia versione di outlook.

    Il problema è che questa e-mail parte ogni volta che viene compilato un form ed arriva a diversi utenti. Non posso andare a cambiare le impostazioni di outlook a tutti gli utenti :():
    Mi serve una soluzione a monte. Non so se devo modificare il codice php o quello html,o qualcos'altro... :mmm:


  • User Attivo

    Potresti inviare il file dell'immagine come allegato alla mail, in questo modo non è più necessario eseguire richieste esterne per visualizzare il contenuto.


  • User Attivo

    potrebbe essere una soluzione per determinate immagini che voglio inserire a fondo della pagina.
    Ma se le immagini devono occupare uno spazio ben definito? Io me lo giostro con il codice html e php, inserendole negli spazi che voglio io.


  • User Attivo

    Quando si utilizzano immagini come allegati alla mail, bisogna usare codice html standard, come quando si fa riferimento ad immagini esterne, l'unica differenza sta nel SRC che è diverso.
    Ecco un esempio di come inviare email con immagine allegata.
    [php]
    // Intestazioni generali
    $header = "From: Mittente [email protected]\n";
    $header .= "To: Destinatario [email protected]\n";
    $header .= "X-Mailer: PHP" . phpversion() "\n"; //Opzionale

    // Stringa boundary per la separazione dei contenuti
    $boundary = "==String_Boundary_x" .md5(time()). "x";

    // Intestazioni per messaggi related (Standard MIME)
    $header .= "MIME-Version: 1.0\n";
    $header .= "Content-Type: multipart/related;\n";
    $header .= " boundary="$boundary";\n\n";

    // Messaggio per programmi che non sopportano i MIME
    $messaggio = "Il programma non supporta i MIME\n\n";

    srand((double)microtime() * 1000000);
    $chars = array('a','b','c','d','e','f', 'g','h','i','l','m','n','o','p','q','r','s','t','u','v','z','x','w','y','j','j');

    for($rand = 1; $rand <= 15; $rand++)
    {
    $random = rand(0, count($chars) - 1);
    $randstr .= $chars[$random];
    }

    // Messaggio HTML
    $messaggio .= "--$boundary\n";
    $messaggio .= "Content-Type: text/html; charset="iso-8859-1"\n";
    $messaggio .= "Content-Transfer-Encoding: 7bit\n\n";
    $messaggio .= "<html>
    <body>
    <p>Messaggio HTML con immagine</p>
    <p><img src="cid:$randstr" alt="immagine"></p>
    </body>
    </html>\n\n";

    // Sezione contenente l'immagine con attributo ID = $randstr
    // L'immagine si trova già sul server
    $messaggio .= "--$boundary\n";
    $messaggio .= "Content-ID: <$randstr>\n";
    $messaggio .= "Content-Type: " . mime_content_type("immagine.jpg") . "\n";
    $messaggio .= "Content-Transfer-Encoding: base64\n\n";

    // Leggiamo l'immagine
    $allegato = "immagine.jpg";
    $file = fopen($allegato,'rb');
    $data = fread($file, filesize($allegato));
    fclose($file);

    // Trasmetto l'immagine usando la codifica base64
    $data = chunk_split(base64_encode($data));
    $messaggio .= "$data\n\n";

    // Chiusura del messaggio con la stringa boundary
    $messaggio .= "--$boundary--\n";

    $subject = "Soggetto";

    if(@mail("[email protected]", $subject, $messaggio, $header))
    echo "Inviata!";
    else
    echo "Non Inviata!";
    [/php]


  • User Attivo

    Ma l'immagine non deve essere inviata come allegato, bensì inserita nel testo dell'email.
    Ripeto: il codice che avevo scritto inizialmente andava bene, perchè l'immagine viene visualizzata, solo che se la apro con outlook, l'utente deve ogni volta dare il consenso per visualizzarla.


  • User Attivo

    Nell'esempio che ti ho fatto, l'immagine viene mostrata all'interno del messaggio.
    L'unica differenza col tuo codice è che il tag IMG, non fà più riferimento aud un link esterno (ritenuto pericoloso e bloccato da outlook), ma ad un link interno alla mail, l'allegato.


  • User Attivo

    Ho provato il tuo codice ma l'e-mail non parte 😞


  • User Attivo

    Che errore ti dà?


  • User Attivo

    No, la manda l'e-mail.
    Però invia un'immagine vuote. Forse sbaglio qualcosa.
    Quando vado ad inserire il nome dell'immagine, devo specificare il percorso? Tipo così:

    [php]
    $messaggio .= "Content-Type: " . mime_content_type("w ww.nomesito.it/immagine.jpg") . "\n";
    [/php]


  • User Attivo

    E' meglio se usi l'url locale per le immagine che inserisci.
    Seconda cosa, la funzione mime_content_type() non è sempre supportata, in alternativa puoi sostituirla con "image/jpeg", "image/png", "image/gif" o "image/bmp" in base all'immagine.

    [php]
    $messaggio .= "Content-Type: image/jpeg\n";
    [/php]


  • User Attivo

    Ok, così funziona.

    Mille grazie per la pazienza, se un giorno passi dalle mie parti ti offro un caffè 🙂


  • User Attivo

    Ok va bene! 😄 😉

    :ciauz:


  • User

    Scusate se riapro una discussione già chiusa da tempo, ma credo sia il posto più attinete.
    Sto impazzendo da giorni su questo codice, riesco ad inviare la mail, ma non si vede l'immagine.
    Cosa sbaglio?

     <?php 
        
        //DESTINATARIO MAIL: Invio i dati del form alla mia mail
        $to= "[email protected]";
        //Intestazione generica
        // L?INDIRIZZO DEL MITTENTE DELLA MAIL recuperato dal campo mail_address
        // Nome e Cognome del mittente DELLA MAIL recuperato da $_POST
        $from = trim(stripslashes($_POST["nome"]))." ".trim(stripslashes($_POST["cognome"]));
        //Oggetto della mail
        $subject = "Richiesta informazioni da ".$from." tramite Campasite"; 
        
        //Creazione dell'header
        $header = "From: ".$from." <".$_POST[mail_address].">\n";
        $header .="CC: <[email protected]>";
        $header .= "Reply-to: <".$to.">\n";
        //Se voglio sapere con che progrmma genero la mail inserisco questo campo
        //$header .= "X-Mailer: Il nostro Php\n";  
        
        // generiamo le stringhe che fungono da separatori
        $boundary = "==String_Boundary_x" .md5(time()). "x";
        $boundary2 = "==String_Boundary2_y" .md5(time()). "y";
        
        // costruiamo le intestazioni che specificano
        // un messaggio costituito da più parti alternative
        $header .= "MIME-Version: 1.0\n"; 
        $header .= "Content-Type: multipart/related;\n";
        $header .= " type=\"multipart/alternative\";\n";
        $header .= " boundary=\"$boundary\";\n\n";
        // questa parte del messaggio viene visualizzata
        // solo se il programma non sa interpretare
        // i MIME poiché è posta prima della stringa boundary
        $messaggio = $_POST[note]."\n\nSe 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 .= $_POST[note]."\n\nMessaggio in formato testo.\n\n";
        
        // sezione alternativa del messaggio 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>
        <head>
            <title>La mia email HTML</title>
            <style type=\"text/css\"> body {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px; font-weight:normal; color:#000000;}
            </style>
        </head>
        <body>
            <p>Ecco la mia prima mail in HTML.<br>Questo testo è in <strong>bold</strong></p>
            <p>E qui ci metto questa immagine: <img src=\"cid:$FiatImg\"> alt=\"Monogramma AC\"</p>
        </body>
        </html>\n"; 
        
        // chiusura della sezione multipart/alternative
        $messaggio .= "--$boundary2--\n";
    
    
        // seconda sezione del multipart/related contenente l?immagine
        // cui attribuiamo l?id MiaImmagine123
        $messaggio .= "--$boundary\n";
        $messaggio .= "Content-ID: <$FiatImg>\n";
        $messaggio .= "Content-Type: image/jpg\n";
        $messaggio .= "Content-Transfer-Encoding: base64\n\n";
        
        // leggiamo il file corrispondente all?immagine dal nostro server
        $allegato = "./Fiat_Logo.jpg";
        $file = fopen($allegato,?rb?);
        $data = fread($file,filesize($allegato));
        fclose($file);
        
        // usiamo la codifica base64 per trasmettere il file
        $data = chunk_split(base64_encode($data));
        $messaggio .= "$data\n\n";
        // chiusura del messaggio con la stringa boundary
        $messaggio .= "--$boundary--\n";
        
        if( @mail($to, $subject, $messaggio, $header) ) echo "E-mail inviata con successo!";
        else echo "Errore nell?invio dell?e-mail!";
        ?>
    

  • User

    Risolto!!!!
    Avevo copiato tre righe di codice da una paginaa internet e mi si visualizzavano correttamente i"-", ma non erano interpretati correttamente.