• User Newbie

    Form mail php - problema caratteri accentati.

    Ciao a tutti, sto utilizzando un semplice form mail in php che mi permette di scegliere il destinatario da un menù. Funziona tutto perfettamente ma c'è un piccolo problema, chi riceve la mail inviata dal sito non vede le lettere accentate ma si ritrova il codice come fosse html, per intenderci se io invio il messaggio "questa è una prova", il destinatario riceverà "questa &egrave una prova".
    Come posso ovviare? Nelle pagine in cui è inserito l'include a contatti.php ho già da tempo messo <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> e quindi pensavo di non avere problemi.
    Riporto il codice dello script, magari torna utile anche ad altri. (l'ho preso da un altro sito, non so se posso segnalarlo, e modificato grazie anche all'autore)
    **
    contatti.php
    **
    [PHP]
    <?php
    require_once 'settings.php';
    if(isset($_POST['submit'])){
    foreach ($_POST as $key => $value){
    //elimina eventuali spazi aggiuntivi
    $temp = $value ? trim($value) : '';
    //se richiesta ma vuota aggiungila all'array missing
    if(!strlen ($temp) && in_array($key, $required)){
    array_push($missing, $key);
    }
    //se il campo aspettato, setta la variabile associata
    elseif(in_array($key, $expected)){
    ${$key} = htmlentities($temp); //in questo caso crea $nome, $email, $sito, $commento
    }
    }
    switch ($_POST['destinatario']){
    case 'mail1': $destinatario="[email protected]";
    break;
    case 'mail2': [email protected];
    break;
    default: [email protected];
    break;
    }
    if ( empty($missing) ){
    //Se l'array missing vuoto, vuol dire che sono stati inseriti i valori
    //obbligatori. Costruisco il messaggio
    $contenuto_email = "Nome: $nome\n\n"; //Queste variabili sono create nel passaggio precedente
    $contenuto_email .= "Email: $email\n\n";
    $contenuto_email .= "Messaggio:\n $messaggio\n\n";
    //limita la lunghezza a 70 caratteri per la compatibilità
    $contenuto_email = wordwrap($contenuto_email,70);
    //invia l'email
    $mail_sent = mail($destinatario,$oggetto,$contenuto_email, 'From: '.$email);
    $info_message = '<p class="info">' . $info_mail_sent . '</p>';
    if($mail_sent){
    //Se l'email viene inviata l'array missing non serve più quindi lo svuoto
    unset($missing);
    }
    }
    }
    //se non sono stati immessi campi obbligatori
    if ( isset( $_POST['submit'] ) && isset($missing) && !empty($missing)) :
    $info_message = '<p class="error">' . $error_missing_fields . '</p>';
    elseif ($_POST['submit'] && !$mail_sent) :
    //se ci sono stati problemi con l'invio della mail da parte del server
    $info_message = '<p class="error">' . $error_mail_server . '</p>';
    endif;

    //Mostra una notifica sia d'errore che di conferma
    if ( isset( $info_message ) && strlen( $info_message ) ) echo $info_message;
    //Include il form
    require_once 'form.php';
    ?>
    [/PHP]

    **form.php

    **[PHP]
    <form action="<?php basename($_SERVER['PHP_SELF']) ?>" method="post" id="formYIW">
    <fieldset>
    <legend><span>Contattaci</span></legend>
    <ul type="square">
    <li>
    <label for="nome">Nome <abbr title="campo obbligatorio"></abbr></label>
    <input type="text" name="nome" id="nome" tabindex="1"
    value="<?php if ( isset( $missing ) && isset($nome) ) echo $nome; ?>"
    class="<?php if (isset( $missing ) && in_array('nome',$missing))
    echo 'error';
    ?>"/>
    </li>
    <li>
    <label for="email">Email <abbr title="campo obbligatorio">
    </abbr></label>
    <input type="text" name="email" id="email" tabindex="2"
    value="<?php if ( isset( $missing ) && isset($email) ) echo $email; ?>"
    class="<?php if (isset( $missing ) && in_array('email',$missing))
    echo 'error';
    ?>"/>
    </li>
    <li>
    <label for="destinatario">Destinatario</label>
    <select name="destinatario" id="destinatario" tabindex="3">
    <option>SCELTA DESTINATARIO</option>
    <option value="mail1">Destinatario 1</option>
    <option value="mail2">Destinatario 2</option>
    </select>
    </option>
    </li>
    <li>
    <label for="messaggio">Messaggio <abbr title="campo obbligatorio">*</abbr></label>
    <textarea name="messaggio" id="messaggio" rows="10" cols="30" tabindex="4"
    class="<?php if (isset( $missing ) && in_array('messaggio',$missing))
    echo 'error';
    ?>"><?php if ( isset( $missing ) && isset($messaggio) ) echo $messaggio; ?></textarea>
    </li>
    </ul>

    • Campi obbligatori
      </fieldset>
      <p class="controls">
      <input type="submit" name="submit" id="submit" value="Invia Mail" tabindex="5">
      </p>
      </form>
      [/PHP]

    **settings.php

    **[PHP]
    <?php
    ini_set('display_errors', 'On');
    ini_set('error_reporting', E_ALL & ~E_NOTICE);
    //oggetto dell'email inviata
    $oggetto = 'Mail inviata dal sito';
    //Messaggio d'errore per campi mancanti
    //Error message for missing fields
    $error_missing_fields= 'Per favore, completate tutti i campi del form indicati';
    //Messaggio d'errore del server mail
    //Error message for mail server
    $error_mail_server = 'Siamo spiacenti. Si è verificato un errore e
    l'email non è stata inviata. Riprovate più tardi.';
    //Messaggio di conferma invio mail
    //Info message for correct mail sent
    $info_mail_sent = 'L'email e' stata inviata correttamente!';

    /* Se il form stato inviato, elenca i campi che ci si aspetta di ricevere.
    Evita che qualcuno possa aggiungere dei campi non previsti */
    $expected = array('nome','email','sito','messaggio');
    //imposta i campi obbligatori
    $required = array('nome','email','messaggio');
    //crea un array vuoto per i campi mancanti
    $missing = array();

    ?>
    [/PHP]

    Grazie a chi mi aiuterà :ciauz:


  • User Newbie

    Ciao a tutti, nessuno mi sa dare una mano? Proprio non riesco a risolvere..


  • User Newbie

    ciao a tutti
    volevo chiedervi come potevo inserire il controllo della mail con i caratteri tipo "("^[a-z0-9][_.a-z0-9-]+@([a-z0-9][0-9a-z-]+.)+([a-z]{2,4})"
    perche nel esempio fa il controllo solo del campo s'è vuoto. io volevo inserire il controllo s'è vuoto in piu s'è un indirizzo email.
    value="<?php if ( isset( $missing ) && isset($email) ) echo $email; ?>"
    class="<?php if (isset( $missing ) && in_array('email',$missing))
    echo 'error';

    qualcuno puo darmi una mano?
    un saluto


  • User Attivo

    [php]
    if (filter_var($email, FILTER_VALIDATE_EMAIL)) echo "Email valida";
    else echo "Email non valida";
    [/php]