Risultati da 1 a 6 di 6

Discussione: Form mail scelta se inviare il testo in html

  1. #1
    IImanuII è offline Utente del Forum
    Data Registrazione
    Jun 2012
    Messaggi
    244

    Form mail scelta se inviare il testo in html

    Salve a tutti (di nuovo),
    Ho un form per inviare mail (che borgo italia mi ha già aiutato a modificare) basato su questo script http://www.mrwebmaster.it/php/artico...php_497_2.html

    In particolare vorrei sapere come posso fare per modificare tale script e far si che invii e mail in html. Ho provato in questo modo:

    Ho modificato:
    Codice PHP:
    // Questa è la parte "testuale" del messaggio
      
    $msg .= "Content-Type: text/plain; charset=\"iso-8859-1\"\n";
      
    $msg .= "Content-Transfer-Encoding: 7bit\n\n";
      
    $msg .= $messaggio "\n\n"
    Con:
    Codice PHP:
     // Questa è la parte "testuale" del messaggio  
      
    $msg .= "Content-type: text/html; charset=iso-8859-1\r\n";  
      
    $msg .= "MIME-Version: 1.0\r\n";  
      
    $msg .= "Content-Transfer-Encoding: 7bit\n\n";
      
    $msg .= $messaggio "\n\n"
    Solo che le email se mandate in html non vengono comunque lette.....

    Mi chiedevo se inoltre era possibili fare una cosa come questa:
    http://free-script.it/post/Script_ph...llegato-16.htm

    Grazie.

    Manu

  2. #2
    L'avatar di borgo italia
    borgo italia è offline Super Moderatore
    Data Registrazione
    Feb 2008
    Località
    PR
    Messaggi
    11,186
    ciao
    per inviare in html devi modificare la parte heder della funzione mail, non la parte del messaggio
    guarda qui
    http://it.php.net/manual/en/function.mail.php
    e scorri sino all'esempio #4

    perche non passi alla classe phpmailer abbandonando mail()? ti risolveresti molti problemi

    poi se invii in formato html la ricezione non dipende da te ma da come il ricevente ha impostato il client di posta.
    con php mailer si puo inviare un messaggio in html e contemporanemente in formato txt in modo che chi riceve veda comunque un email corretta

  3. #3
    IImanuII è offline Utente del Forum
    Data Registrazione
    Jun 2012
    Messaggi
    244
    Citazione Originariamente Scritto da borgo italia Visualizza Messaggio
    ciao
    per inviare in html devi modificare la parte heder della funzione mail, non la parte del messaggio
    guarda qui
    http://it.php.net/manual/en/function.mail.php
    e scorri sino all'esempio #4
    La parte di codice interessata è questa quindi:
    Codice PHP:
     // Aggiungo le intestazioni necessarie per l'allegato 
      
    $headers .= "\nMIME-Version: 1.0\n"
      
    $headers .= "Content-Type: multipart/mixed;\n"
      
    $headers .= " boundary=\"{$mime_boundary}\""

      
    // Definisco il tipo di messaggio (MIME/multi-part) 
      
    $msg .= "This is a multi-part message in MIME format.\n\n"

      
    // Metto il separatore 
      
    $msg .= "--{$mime_boundary}\n"

      
    // Questa è la parte "testuale" del messaggio 
      
    $msg .= "Content-Type: text/plain; charset=\"iso-8859-1\"\n"
      
    $msg .= "Content-Transfer-Encoding: 7bit\n\n"
      
    $msg .= $messaggio "\n\n"
    Ho provato sia ad aggiungere
    Codice PHP:
    $headers .= 'Content-type: text/html; charset=iso-8859-1' "\r\n"
    Che a sostituire
    Codice PHP:
      $headers .= "Content-Type: multipart/mixed;\n"
    con
    Codice PHP:
    $headers .= 'Content-type: text/html; charset=iso-8859-1' "\r\n"
    Ma non va Ovviamente in ambo due i casi ho cambiato
    Codice PHP:
      $msg .= "Content-Type: text/plain; charset=\"iso-8859-1\"\n"
    con
    Codice PHP:
      $msg .=  'Content-type: text/html; charset=iso-8859-1' "\r\n"
    Citazione Originariamente Scritto da borgo italia Visualizza Messaggio
    perche non passi alla classe phpmailer abbandonando mail()? ti risolveresti molti problemi

    poi se invii in formato html la ricezione non dipende da te ma da come il ricevente ha impostato il client di posta.
    con php mailer si puo inviare un messaggio in html e contemporanemente in formato txt in modo che chi riceve veda comunque un email corretta
    Perchè prima di fare questo form l'ho usata ma le mail che inviavo arrivavano SEMPRE nella cartella spam di hotmail, con questo script invece no. Poi oramai è completo e funzionante in ogni sua parte, vorrei solo far si che invii mail in html e poi basta

  4. #4
    L'avatar di borgo italia
    borgo italia è offline Super Moderatore
    Data Registrazione
    Feb 2008
    Località
    PR
    Messaggi
    11,186
    ciao
    devi impostare in questa maniera
    Codice PHP:
    <?php
    //....non ho messo i dovuti controlli se provengono da form
    $destinatario="pinco_pallo@pallino.it";
    $oggetto ="invio in formato html";//immagino che provenga da un form
    $mittente "sofonisba@bergonzi.com";//immagino che provenga da un form
    $testo="ciao\r <b>come stai?</b>";//immagino che provenga da un form area di testo con formattazione
    $testo=nl2br($testo);//trasforma \r in <br> * guarda se è necessario *
    $msg="<html><body>";
    $msg .="$testo";
    $msg .= "<hr>";
    $msg .= "messaggio inviato da: $mittente<br>";
    $msg .= "il ".date("d.m.Y h:i:s")."<hr>";
    $msg="</body></html>";
    $headers  'MIME-Version: 1.0' "\r\n";
    $headers .= 'Content-type: text/html; charset=iso-8859-1' "\r\n";
    //se vuoi pui aggiunge altre informazioni a $headers
    if(mail($destinatario$oggetto,$msg,$headers)){
        echo 
    "email inviata con successo";
    }else{
        echo 
    "errore di trasmissione, riprova più tardi";
    }
    //....
    ?>
    ti ricordo che però chi riceve deve avere il cliente (es. outlook) impostato su html altrimenti ci riceve vede il testo e i tag inseriti, ma non la formattazione

  5. #5
    IImanuII è offline Utente del Forum
    Data Registrazione
    Jun 2012
    Messaggi
    244
    In base a quello che hai scritto tu mi trovo "logicamente con le modifiche che ti ho detto prima........ eppure non va!

    Ti riposto il codice magari riesci ad indicarmi l'errore.

    form.php

    Codice PHP:
    <?php 
    session_start
    ();//attento deve essere la prima istruzione anche prima di require o include 
    //ti aggiungo questa parte più sicura dei cookie per imperdire l'accesso a invia.php 
    $_SESSION['p'] = sha1(uniqid(mt_rand()));//genero e codifico un numero casuale 
    //come vedrai ti aggiungo un campo hidden per trasmettere e confrontare il numero generato 
    /* 
    qui la parte per la verifica del numero di email inviate 
    è inutile mostrare il pulsante di submit se l'email non può essere inviata, o meglio 
    NON mostrare l'intero form, dai un avviso e riinvii alla pg che vuoi 
    */ 
    $numero_massimo=10;//che puoi modificare 
    require_once "connessione.php"
    $dati=mysql_fetch_array(mysql_query("SELECT *FROM inviate")); 
    $id=$dati['id']; 
    $data=$dati['data']; 
    $quante=$dati['numero']; 
    $oggi=date("Y-m-d");//!!!verifica che sia nello stesso formato di quello che hai nel db 
    //verifico quante email sono state inviate oggi 
    if($oggi == $data && $quante >= $numero_massimo){ 
        
    //oggi ho raggiunto il numero massimo di email quindi non posso inviare 
        //avviso e ritorno in automatico alla pag che mi pare 
        
    echo "<center><br><h1>Oggi $oggi sono state già inviate $quante email, non è possibile inviarne altre!<br>Reindirizzamento in corso...</center></h1>"
        
    //quindi dopo 4 sec riinvio (uso il tag meta e non header refresh per non aggiungere altre istruzioni) 
        
    echo "<meta http-equiv='Refresh' content='4; URL=ops.php'>"
        exit; 
    }else{ 
    //non ho raggiunto il numero massimo quindi posso inviare 
    ?> 
    <html>  
    <head>  
    <title></title> 
    <META HTTP-EQUIV="Imagetoolbar" Content="no"> 
    <link rel="stylesheet" type="text/css" href="stile.css"> 
    <script language="javascript">

    //funzione per disabilitare il tasto destro del mouse
    var message=""; 

    function clickIE() {

    if (document.all) {
    (message); 
    return false
    }



    function clickNS(e) {

    if (document.layers||(document.getElementById&&!document.all)) {
    if (e.which==2||e.which==3) {(message); return false}}} 
    if (document.layers) {document.captureEvents(Event.MOUSEDOWN); document.onmousedown=clickNS} 
    else {
    document.onmouseup=clickNS; document.oncontextmenu=clickIE


    document.oncontextmenu=new Function("return false")

    // funzione per accettare solo numeri nel box del campo verifica

    function reloadCaptcha() 
    {
        document.getElementById("image").src=document.getElementById("image").src;
    }

    function keyCheck(eventObj, obj)
    {
    var keyCode

    // Check For Browser Type
    if (document.all){
    keyCode=eventObj.keyCode
    }
    else{
    keyCode=eventObj.which
    }

    var str=obj.value

    if(keyCode==46){
    if (str.indexOf(".")>0){
    return false
    }
    }

    if((keyCode<48 || keyCode >58) && (keyCode != 46)){ // Allow only integers and decimal points
    return false
    }

    return true
    }

    //funzione di validazione delle due mail, messaggio, nome e oggetto
    function validate()
    {
    var str=true;
    document.getElementById("msgnome").innerHTML="";
    document.getElementById("msgemailinvia").innerHTML="";
    document.getElementById("oggetto").innerHTML="";



    if(document.modulo.nomedichiinvia.value=='')
    {
    document.getElementById("msgnome").innerHTML="&nbsp;<img src=\"./sign_warning.png\" align=\"absmiddle\">&nbsp;Inserire il nome.";
    str=false;
    }

    var validate_char= /^[\w\-\.\+]+\@[a-zA-Z0-9\.\-]+\.[a-zA-z0-9]{2,4}$/;
    if(!document.modulo.maildichiinvia.value.match(validate_char))
    {
    document.getElementById("msgemailinvia").innerHTML="&nbsp;<img src=\"./sign_warning.png\" align=\"absmiddle\">&nbsp;Inserire un indirizzo email valido.";
    str=false;
    }

    if(document.modulo.oggetto.value=='')
    {
    document.getElementById("oggetto").innerHTML="&nbsp;<img src=\"./sign_warning.png\" align=\"absmiddle\">&nbsp;Inserire l\'oggetto della mail.";
    str=false;
    }

    if(document.modulo.messaggio.value=='')
    {
    document.getElementById("messaggio").innerHTML="&nbsp;<img src=\"./sign_warning.png\" align=\"absmiddle\">&nbsp;Inserire il messaggio.";
    str=false;
    }

    return str;

    }
    </script>
    </head>  
    <body oncontextmenu="return false;" ondragstart="return false;" onselectstart="return false;"> 
    <p>   
    <form name="modulo" action="invio.php" method="post" enctype="multipart/form-data" onSubmit="return validate()" > 
    <table border="0" align="center" >   
        <tr> 
          <td width="160"><div align="left"><b>Nome di chi invia&nbsp;:</b>&nbsp;&nbsp;&nbsp;<br></div></td> 
          <td width="100"><input size="44" type="text" name="nomedichiinvia" ></td> 
        </tr>  
        <tr> 
          <td width="160"><br></td> 
          <td width="100"><div></div><div id="msgnome" style="color:#FF0000"></div></td> 
        </tr>   
        <tr> 
          <td width="160"><div align="left"><b>Email di chi invia&nbsp;:</b>&nbsp;&nbsp;&nbsp;<br></div></td> 
          <td width="100"><input size="44" type="text" name="maildichiinvia" ></td> 
        </tr>  
        <tr> 
          <td width="160"><br></td> 
          <td width="100"><div id="msgemailinvia" style="color:#FF0000"></div></td> 
        </tr>      
        <tr> 
          <td width="160"><div align="left"><b>Oggetto&nbsp;:</b>&nbsp;&nbsp;&nbsp;<br></div></td> 
          <td width="100"><input size="44" type="text" name="oggetto" ></td> 
        </tr>  
        <tr> 
          <td width="160"><br></td> 
          <td width="100"><div id="oggetto" style="color:#FF0000"></div></td> 
        </tr>        
        <tr> 
          <td width="160"><div align="left"><b>Messaggio&nbsp;:</b>&nbsp;&nbsp;&nbsp;<br></div></td> 
          <td width="100"><textarea cols="20" rows="4" name="messaggio" style="width:293px;overflow:hidden;height:130px; max-width:300px;max-height:130px"></textarea></td> 
        </tr>  
        <tr> 
          <td width="160"><br></td> 
          <td width="100"><div id="messaggio" style="color:#FF0000"></div></td> 
        </tr>         
        <tr> 
          <td width="160"><div align="left"><b>Allega file&nbsp;:</b>&nbsp;&nbsp;&nbsp;<br></div></td> 
          <td width="100"><input type="file" name="allegato" size="32" class="file_1"/></td> 
        </tr> 
        <tr> 
          <td width="160"><br></td> 
          <td width="100"></td> 
        </tr>       
        <tr> 
            <td width="160"><div align="left"><b>Codice di verifica&nbsp;:</b>&nbsp;&nbsp;&nbsp;<br></div></td> 
              <td width="30"><input type="text" name="verif_box" id="verif_box" size="25" onKeyPress="return keyCheck(event, this)" />       
                <a onclick="javascript:reloadCaptcha()" style="cursor: pointer;"><img src="refresh.png" valign="middle" ></a>  
                <iframe align="left" valign="top" id="image" style="border:0;height:40px;width:60px" scrolling="no" src="verificationimage.php?<?php echo rand(0,9999);?>" ></iframe> 
            </td> 
        </tr>  
        <tr> 
          <td width="160"><br></td> 
          <td width="100"></div></td> 
        </tr>     
        <tr> 
          <!-- *********ecco qui il campo hidden ******--> 
          <td width="160"><input name="accesso" type="hidden" value="<?php echo $_SESSION['p'];?>"></td> 
          <td width="100"><center><input type="submit" name="Submit" value="Invia"><input type="reset" value="Reset"></center></td> 
        </tr> 
      </table> 
    </td> 
    </tr> 
    </table> 
    </form> 
    </body>  
    </html> 
    <?php 
    }//fine dell if else invio permesso o non permesso 
    ?>

    Invio.php
    Codice PHP:
    <?php 
    session_start
    (); 
    if(!isset(
    $_SESSION['p']) || $_SESSION['p'] != $_POST['accesso']){//ricorda i cookie possono essere cancellati dall'utente 
        //la sessione non esiste o è diversa da valore del campo nascosto: ho tentato un accesso diretto a invio.php 
        
    header('Location: ops.php'); 
        exit; 
    }else{ 
        
    //provengo dal form quindi posso fare le verifiche del numero per upparlo 
        //la cosa è possibile solo se il numero di oggi è minore dell'ammesso 
        //elimino la sessione che non serve più 
        
    unset($_SESSION['p']); 
        require_once 
    "connessione.php"
        
    $mumero_massimo=10
        
    $dati=mysql_fetch_array(mysql_query("SELECT *FROM inviate"));//non metto il controllo per la prima volta di utilizzo 
        
    $id=$dati['id']; 
        
    $data=$dati['data']; 
        
    $quante=$dati['numero']; 
        
    $oggi=date("Y-m-d");   
        if(
    $oggi == $data){  
            
    //aggiorno il numero di email inviate oggi  
            
    $up=mysql_query("UPDATE inviate SET numero=numero+1 WHERE id=$id");  
        }else{  
            
    $up=mysql_query("UPDATE inviate SET data= '$oggi', numero=0  WHERE id=$id");  
        }  
        
    /* *************************** 
        qui dovresti mettere i controlli lato server dei dati inviati 
        qui metti tutto il tuo ambaradan di lettura dei dati e l'invio 
        **************************** */ 
    if ($_POST['Submit'] == 'Invia')
    {

    // Recupero il valore dei campi del form
     
    $fromname $_POST['nomedichiinvia'];
    $fromemail $_POST['maildichiinvia'];
    $destinatario "pocodibuono4ever@yahoo.it"
    $oggetto $_POST['oggetto']; 
    $messaggio $_POST['messaggio']; 
    $verif_box $_POST["verif_box"];

    // Valorizzo le variabili relative all'allegato 
    $allegato $_FILES['allegato']['tmp_name']; 
    $allegato_type $_FILES['allegato']['type']; 
    $allegato_name $_FILES['allegato']['name']; 

    // Creo la variabile headers 
    $lt'<';
    $gt'>';
    $sp' ';
    $from'From:';
    $headers $from.$fromname.$sp.$lt.$fromemail.$gt;
    $msg ""

    // Verifico se il file è stato caricato correttamente via HTTP 
    // In caso affermativo proseguo nel lavoro... 
    if (is_uploaded_file($allegato)) 

      
    // Apro e leggo il file allegato 
      
    $file fopen($allegato,'rb'); 
      
    $data fread($filefilesize($allegato)); 
      
    fclose($file); 

      
    // Adatto il file al formato MIME base64 usando base64_encode 
      
    $data chunk_split(base64_encode($data)); 

      
    // Genero il "separatore" 
      // Serve per dividere, appunto, le varie parti del messaggio. 
      // Nel nostro caso separerà la parte testuale dall'allegato 
      
    $semi_rand md5(time()); 
      
    $mime_boundary "==Multipart_Boundary_x{$semi_rand}x"
       
      
    // Aggiungo le intestazioni necessarie per l'allegato 
      
    $headers .= "\nMIME-Version: 1.0\n"
      
    $headers .= "Content-Type: multipart/mixed;\n"
      
    $headers .= " boundary=\"{$mime_boundary}\""

      
    // Definisco il tipo di messaggio (MIME/multi-part) 
      
    $msg .= "This is a multi-part message in MIME format.\n\n"

      
    // Metto il separatore 
      
    $msg .= "--{$mime_boundary}\n"

      
    // Questa è la parte "testuale" del messaggio 
      
    $msg .= "Content-Type: text/plain; charset=\"iso-8859-1\"\n"
      
    $msg .= "Content-Transfer-Encoding: 7bit\n\n"
      
    $msg .= $messaggio "\n\n"

      
    // Metto il separatore 
      
    $msg .= "--{$mime_boundary}\n"

      
    // Aggiungo l'allegato al messaggio 
      
    $msg .= "Content-Disposition: attachment;\n"
      
    $msg .= " filename=\"{$allegato_name}\"\n"
      
    $msg .= "Content-Transfer-Encoding: base64\n\n"
      
    $msg .= $data "\n\n"

      
    // chiudo con il separatore 
      
    $msg .= "--{$mime_boundary}--\n"

    else 

      
    $msg $messaggio
    }     


    // controllo se il codice di verifica è corretto
    if(md5($verif_box).'a4xn' == $_COOKIE['tntcon']){
        
    // se il codice di verifica è corretto invio il messaggio
        
    mail($destinatario$oggetto$msg$headers);
        
    // cancello il cookie in modo che non può essere inviato nuovamente aggiornando la pagina
        
    setcookie('tntcon','');
    } else if(isset(
    $message) and $message!=""){
        
    // se il codice di verifica non è corretto o provano ad accedere direttamente alla pagina php mostro l'errore.
    } else {

        echo 
    '<html><center>OooopS!</center><br><a href="javascript:history.go(-1)">Torna indietro</a></html>';
        
        exit;
        }


        
        
    }
    //fine if else : provengo da form.php 
    ?>

    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <title>E-Mail inviata</title>
    <style type="text/css">
    <!--
    body,td,th {
        font-family: Arial, Helvetica, sans-serif;
        font-size: 12px;
    }
    -->
    </style></head>

    <body>
    <table width="100%" height="100%">
    <tr>
    <td align="center" valign="middle">

    Email inviata. Grazie.<br />
    <br />
    <a href="javascript:history.go(-1)">Torna indietro</a>

    </td>
    </tr>
    </table>
    </body>
    </html>
    Ho provato a cambiare la variabile headers così
    Codice PHP:
    $headers "From: $fromname $sp $lt $fromemail $gt $from\nContent-Type:text/html"// shows name, from, and makes the email able to use html 
    L'unico risultato è che se invio una mail in html vede il testo correttamente ma non interpreta il codice ad es. se invio un testo di colore blu arriva la mail, i tag html non vengono visualizzati ed il testo sembra come se non fosse in html

  6. #6
    IImanuII è offline Utente del Forum
    Data Registrazione
    Jun 2012
    Messaggi
    244
    Il problema secondo me è qui

    Codice PHP:
    $headers .= "\nMIME-Version: 1.0\n";  
      
    $headers .= "Content-Type: multipart/mixed;\n"
    $headers .= "Content-Type: multipart/mixed;\n"; è multipart mixed per poter permettere l'invio di un allegato
    Allora ho pensato di agire sul msg visto che era dichiarato in questo modo

    $msg .= "Content-Type: text/plain; charset=\"iso-8859-1\"\n";

    Cambiando in


    $msg .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";

    Solo che non ha prodotto alcun risultato

Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •