• User Newbie

    non va la funzione mail()

    ciao a tutti,
    con questo primo thread di fatto esordisco in questa community.

    io ho un file di invio mail che segue ad un form. questo file funziona perfettamente su hosting windows di aruba ma ora che lo devo trasferire su server dedicato sempre di aruba, lo stesso file non manda più le mail.

    ho provato a sostituire gli $headers con $intestazioni ma il risultato non cambia.

    chi mi può dare qualche dritta??? grazie

    il codice che uso al momento è il seguente

    
    <?PHP
     include "conn.php";
     
     function pagineprenotazioni($page, $pagetitle){
      $mysqlc2 = new mysqlc();
      $mysqlc2->query("SELECT id FROM pagine_richieste WHERE url_pagina = '$page' AND pagina='$pagetitle';");
      if(($result = mysql_fetch_array($mysqlc2->result, MYSQL_ASSOC)) !== FALSE ) $mysqlc2->query("UPDATE pagine_richieste SET prenotazioni = prenotazioni + 1 WHERE id='{$result['id']}';");
      else $mysqlc2->query("INSERT INTO pagine_richieste SET url_pagina = '$page', pagina = '$pagetitle', prenotazioni = '1';");
     }
     
     $nome = $_POST['nome'];
     $mail = $_POST['mail'];
     $telefono = $_POST['telefono'];
     $cellulare = $_POST['cellulare'];
     $fax = $_POST['fax'];
     $localita = $_POST['localita'];
     $periodosoggiornoda = $_POST['periodosoggiornoda'];
     $periodosoggiornoal = $_POST['periodosoggiornoal'];
     $tiporesidenza = $_POST['tiporesidenza'];
     $altro = $_POST['altro'];
     $numeropersone = $_POST['numeropersone'];
     $budget = $_POST['budget'];
     $messaggio = $_POST['messaggio'];
     
     $mysqlc->query("INSERT INTO richieste SET 
           nome='$nome',
           mail='$mail',
           telefono='$telefono',
           cellulare='$cellulare',
           fax='$fax',
           localita='$localita',
           periodosoggiornodal='$periodosoggiornoda',
           periodosoggiornoal='$periodosoggiornoal',
           tiporesidenza='$tiporesidenza',
           altro='$altro',
           numeropersone='$numeropersone',
           budget='$budget',
           messaggio='$messaggio',
           data_ricezione_richiesta='".time()."',
           stato='0';");
       // Specifica la tua mail e quella del destinatario
       $mail_mittente = "[EMAIL="[email protected]"][email protected][/EMAIL]";
       $mail_destinatario = "[EMAIL="[email protected]"][email protected][/EMAIL]";
       // Specifica l'oggetto ed il corpo della mail
       $mail_oggetto = "Messaggio di prova 6";
       //$mail_corpo = "Questo è un messaggio di prova per testare la mia applicazione";
     
     $headers = "X-Mailer: Salento\n";
     
     // costruiamo le intestazioni specifiche per il formato HTML
     $headers .= "MIME-Version: 1.0\n";
     $headers .= "Content-Type: text/html; charset=\"iso-8859-1\"\n";
     $headers .= "Content-Transfer-Encoding: 7bit\n\n";
     
     // Messaggio
     $messaggio = "
     <!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'>
     <html xmlns='http://www.w3.org/1999/xhtml'>
     <head>
     <meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1' />
     <title>SALENTO.IT - Richiesta di Contatto</title>
     </head>
     
     <body style='text-align: center;'>
      <div style='border: solid 0px; width: 752px; padding-top: 150px; margin: auto; background-image: url(http://www.viagginelsalento.it/banner/logo-salento.jpg); background-repeat: no-repeat; background-position: top;'>
     
      <div style='padding: 15px; border-top: solid #0000FF 1px; width: 100%;'>
         <div style='float: left; text-align: left;'>
          <b>Nome:</b><br />
          <b>Mail:</b><br />
          <b>Telefono:</b><br />
          <b>Cellulare:</b><br />
          <b>Fax:</b><br />
          <b>Localita:</b><br />
          <b>Dal:</b><br />
          <b>Al:</b><br />
          <b>Tipo di residenza:</b><br />
          <b>Numero di persone:</b><br />
          <b>Budget:</b><br />
         </div> 
         <div style='margin-left: 150px; text-align: left;'>
          $nome<br />
          $mail<br />
          $telefono<br />
          $cellulare<br />
          $fax<br />
          $localita<br />
          $periodosoggiornoda<br />
          $periodosoggiornoal<br />
          $tiporesidenza<br />
          $numeropersone<br />
          $budget<br />
         </div>
         <div style='text-align: left; padding-top: 25px; padding-bottom: 25px;'>
          <b>Messaggio:</b><br />
          <div style='border: solid 1px; padding: 5px; width: 700px; height: auto;'>
          ".nl2br($messaggio)."
          </div>
          <br /><br /><br />
          <b>Altro:</b><br />
          <div style='border: solid 1px; padding: 5px; width: 700px; height: auto;'>
          ".nl2br($altro)."
          </div>
         </div>
     
       </div>
       <div style='border-top: solid 1px; width: 100%; text-align: left; padding: 15px; font-family: Arial, Helvetica, sans-serif; font-size: 12px;'>
        <p>";
     
     #############################################################################
     # Calcola la pagina precedente da cui viene l'utente
     $uip = $_SERVER["REMOTE_ADDR"];
     $db = "_1";
     $mysqlc = new mysqlc();
     $mysqlc->query("SELECT * FROM `salento_details` WHERE ip='$uip' ORDER BY `date` DESC LIMIT 0, 10;");
     $messaggio .= "<b>L'utente, prima di prenotare con il form, si trovata nelle pagine:</b><br />"; 
     $cnt = 3;
     while(($result = mysql_fetch_array($mysqlc->result, MYSQL_ASSOC)) !== FALSE){
      echo $result['currentPage'];
      if(strtolower($result['currentPage']) == "http://www.viagginelsalento.com/form.htm") continue;
      else {
       $messaggio .= "$cnt - <b>URL:</b> <font style='color: #FF0000;'>{$result['currentPage']}</font> <b>Titolo:</b> <font style='color:;'>{$result['titlePage']}</font><br />";
       pagineprenotazioni($result['currentPage'], $result['titlePage']);   
       if($cnt == 1) break;
       else $cnt--;
      }
     }
     
     $messaggio .= "
        </p>
       </div> 
     
     </body>
     </html>
     ";
     
       // Invia la mail e lancia un messaggio di conferma
       if (mail($mail_destinatario, $mail_oggetto, $messaggio, "From: $mail_mittente", $headers))
       {
           echo "Messaggio inviato con successo a $mail_destinatario";
       }
       // oppure un messaggio di errore in caso di fallimento
       else
       {
           echo "Errore. Nessun messaggio inviato.";
       }
    ?>
    
    

    mi restituisce sempre ERRORE. NESSUN MESSAGGIO INVIATO.:x


  • Bannato User Attivo

    Non ho letto il codice.
    Non ho tempo adesso.

    Tuttavia la butto li... hai settato il server ni modo che ti permetta di inviare email?


  • User Newbie

    ciao
    inviando testo non formattato le mail partono regolarmente.

    da qui desumo che il server di posta sia ok. o sbaglio?

    il problema nasce, appunto, quando inserisco nel $messaggio i vari tag html

    aspetto, daniele.


  • User Attivo

    ciao, manco da un po' e quindi non ho seguito tutte le varie discussioni quindi è probabile che questo problema sia già stato risolto da qualcuno. il mio caso è molto simile, avevo creato un form di invio mail che si avvaleva di una pagina php, tutto funzionava perfettamente fino ad un bel giorno, da allora la mia pagina ha smesso di funzionare, non restituisce alcun errore ma le mail non arrivano. In un primo momento penso che sia uno dei soliti ritardi di Aruba ma mi accorgo che le mail che i clienti credevano di inviare non arrivavano mai. Ho poi notato una cosa strana, le mail che non arrivano sono quelle che hanno una formattazione html, ma non tutte venivano bloccate, un altro form creato quasi sullo stesso stile del precedente funzionava ancora bene. La differenza era nel fatto che nel secondo inviavo anche un allegato. Ho quindi emulato il codice di questo form per cercare di far inviare mail anche al precedente e ci sono anche riuscito ma con qualche difetto, la mail inviata presenta un allegato fasullo ed inoltre non posso inviarla a più di un indirizzo.

    Qualcuno di voi ha capito come mai su Aruba c'è stato questo cambiamento che impedisce alla funzione mail di eseguire correttamente il suo compito?


  • User Attivo

    Ho risolto il problema per l'invio mail, posto il codice che ho usato, premetto che il mio form è fatto in flash, questo trasmette e riceve i dati dal file php. Vi possono essere righe di troppo perché il codice è stato modificato in buona parte quindi anche se funziona a dovere non è stato ripulito da eventuali eccessi.

    [php]
    <?
    $destinatario = [email protected];
    $nome = stripslashes($POST['nome']);
    $cognome = stripslashes($POST['cognome']);
    $ragsol = stripslashes($POST['ragsol']);
    $naz = stripslashes($POST['naz']);
    $cit = stripslashes($POST['cit']);
    $cap = stripslashes($POST['cap']);
    $ind = stripslashes($POST['ind']);
    $tel = stripslashes($POST['tel']);
    $cell = stripslashes($POST['cell']);
    $fax = stripslashes($POST['fax']);
    $email = stripslashes($POST['email']);
    $oggetto = stripslashes($POST['oggetto']);
    $testomail = stripslashes($POST['testomail']);
    $titolo = "NUOVO CONTATTO";
    $oggmail = $titolo;
    $image = miosito.it/images/sfondomail.jpg';
    //$imagepixel È UN'IMMAGINE DI UN PIXEL CHE SERVE A FAR RICONOSCERE AL CLIENT DI POSTA CHE VI SONO IMMAGINI DA SCARICARE
    $imagepixel = miosito.it/images/1x1 grigio50.jpg';
    //
    $CharSet = "utf-8";
    //
    ____________________________________________________________________
    //STILE DELLA MAIL
    $stile = '<style type="text/css">
    body {
    margin-left: 0px;
    margin-top: 0px;
    background-image: url('.$image.');
    background-repeat: no-repeat;
    background-color: #FFFFFF;
    }
    .Stile1 {font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; font-weight: bold; }
    .Stile2 {font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; }
    .Stile3 {
    font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10px;
    }
    </style>';
    //_________________________________________________________________________________
    $contenutomail = '
    <table width="780" border="0" align="left" cellpadding="0" cellspacing="0">
    <tr>
    <td valign="top" ><table width="780" border="0" cellpadding="0" cellspacing="0">
    <tr>
    <td width="23" height="97" valign="top"><img src="'.$imagepixel.'"/></td>
    <td width="757" height="97"> </td>
    </tr>
    <tr>
    <td> </td>
    <td valign="top"><table>
    <tr>
    <td colspan="2"></td>
    </tr>
    <tr>
    <td width="131"><span class="Stile1">Nome: </span></td>
    <td width="549"><span class="Stile2">'.$nome.'</span></td>
    </tr>
    <tr>
    <td><span class="Stile1">Cognome: </span></td>
    <td><span class="Stile2">'.$cognome.'</span></td>
    </tr>
    <tr>
    <td><span class="Stile1">Ragione Sociale: </span></td>
    <td><span class="Stile2">'.$ragsol.'</span></td>
    </tr>
    <tr>
    <td><span class="Stile1">Nazione: </span></td>
    <td><span class="Stile2">'.$naz.'</span></td>
    </tr>
    <tr>
    <td><span class="Stile1">Città: </span></td>
    <td><span class="Stile2">'.$cit.'</span></td>
    </tr>
    <tr>
    <td><span class="Stile1">CAP: </span></td>
    <td><span class="Stile2">'.$cap.'</span></td>
    </tr>
    <tr>
    <td><span class="Stile1">Indirizzo: </span></td>
    <td><span class="Stile2">'.$ind.'</span></td>
    </tr>
    <tr>
    <td><span class="Stile1">Telefono: </span></td>
    <td><span class="Stile2">'.$tel.'</span></td>
    </tr>
    <tr>
    <td><span class="Stile1">Cellulare: </span></td>
    <td><span class="Stile2">'.$cell.'</span></td>
    </tr>
    <tr>
    <td><span class="Stile1">Fax: </span></td>
    <td><span class="Stile2">'.$fax.'</span></td>
    </tr>
    <tr>
    <td><span class="Stile1">e-mail: </span></td>
    <td><span class="Stile2">'.$email.'</span></td>
    </tr>
    <tr>
    <td height="42" colspan="2"><div align="center" class="Stile1">Richiesta: </div></td>
    </tr>
    <tr>
    <td colspan="2" valign="top"><strong>'.$oggetto.'</strong></td>
    </tr>
    <tr>
    <td colspan="2" valign="top"><span class="Stile2">'.$testomail.'</span></td>
    </tr>
    </table></td>
    </tr>
    </table></td>
    </tr>
    </table>';
    // CREO L'INTESTAZIONE DELLA MAIL
    $headers = "From: $nome $cognome <$email>\n";
    if ($bcc != "")
    $headers .= "BCC: $bcc;\n";
    $headers .= "Reply-To: $reply\n";
    $headers .= "X-Mailer: Sismail Web Email Interface\n";
    $headers .= "MIME-version: 1.0\n";
    $headers .= "Content-type: text/html;\n";
    $headers .= "Content-Transfer-Encoding: 8BIT\n";

    // CREO IL MESSAGGIO DELLA MAIL
    $corpo = "<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" ".w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">";
    $corpo .= "<HTML "xmlns=".w3.org/1999/xhtml"><HEAD>";
    $corpo .= "<META http-equiv=Content-Type content="text/html; charset=$CharSet">";
    $corpo .= $stile;
    $corpo .= "</HEAD>";
    $corpo .= "<BODY>";
    $corpo .= $contenutomail;
    $corpo .= "</BODY></HTML>";
    $messaggioinvio = 'Grazie '.$nome;
    $nomeok = "&testonome=".$messaggioinvio;
    echo utf8_encode($nomeok);
    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /////////////////////////////////////////////////INIZIO IL CONTROLLO SUI CAMPI////////////////////////////////////////////////////
    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    if ($nome != '') {$valore = 6;} else {$valore = 1;}//controlla se il campo nome è pieno
    if ($valore == 6) {if ($cognome != '') {$valore = 6;} else {$valore = 2;}}//controlla se il campo cognome è pieno
    if ($valore == 6) {if ($cit != '') {$valore = 6;} else {$valore = 3;}}//controlla se il campo città è pieno
    if ($valore == 6) {if ($tel != '') {$valore = 6;} else {if ($cell != '') {$valore = 6;} else {$valore = 5;}}}//controlla i campi telefono
    if ($valore == 6) {if ($email != '') {$valore = 6;} else {$valore = 4;}}//controlla se il campo email è pieno
    switch ($valore) {
    case 1://se il campo nome non è pieno viene inviata una variabile &risposta contenente il messaggio di errore al file swf
    $errorenome = 'A';//messaggio che si vuole inviare
    $risposta = "&risposta=".$errorenome;
    echo utf8_encode($risposta);
    break;
    case 2://se il campo cognome non è pieno viene inviata una variabile &risposta contenente il messaggio di errore al file swf
    $errorecognome = 'B';//messaggio che si vuole inviare
    $risposta = "&risposta=".$errorecognome;
    echo utf8_encode($risposta);
    break;
    case 3://se il campo città non è pieno viene inviata una variabile &risposta contenente il messaggio di errore al file swf
    $errorecit = 'C';//messaggio che si vuole inviare
    $risposta = "&risposta=".$errorecit;
    echo utf8_encode($risposta);
    break;
    case 4://se il campo email non è pieno viene inviata una variabile &risposta contenente il messaggio di errore al file swf
    $erroremailvuota = 'D';//messaggio che si vuole inviare
    $risposta = "&risposta=".$erroremailvuota;
    echo utf8_encode($risposta);
    break;
    case 5://se i campi telefonici sono vuoti viene inviata una variabile &risposta contenente il messaggio di errore al file swf
    $erroretelefonivuoti = 'E';//messaggio che si vuole inviare
    $risposta = "&risposta=".$erroretelefonivuoti;
    echo utf8_encode($risposta);
    break;
    case 6://se tutti i campi sono pieni si esegue il controllo dell'indirizzo e-mail
    if (!eregi("^[a-z0-9][_.a-z0-9-]+@([a-z0-9][0-9a-z-]+.)+([a-z]{2,4})", $email))// Controlla i caratteri che compongono l'e-mail
    {//le tre linee seguenti inviano un messaggio di errore se l'indirizzo e-mail non è corretto
    $erroremail = 'F';//messaggio che si vuole inviare
    $risposta = "&risposta=".$erroremail;
    echo utf8_encode($risposta);
    }//end if
    else {//altrimenti tutti i dati inviati dal form flash vengono inviati all'indirizzo presente nella variabile destinatario
    if (mail($destinatario, $oggmail, $corpo, $headers))
    {//una voltsa inviata la mail viene inviata al file swf una variabile &risposta con il messaggio email inviata
    $esitook = 'G';//messaggio che si vuole inviare
    $risposta = "&risposta=".$esitook;
    echo utf8_encode($risposta);
    }//end if
    }//end else
    }//end switch
    ?>
    [/php]

    Spero che questo codice possa essere un aiuto per qualcuno di voi.

    Premessa, facendo un'anteprima del messaggio che sto scrivendo ho notato che mi da errore perché secondo il sistema ho inserito un indirizzo internet, sinceramente non so come posso non scriverlo dato che fa parte del codice stesso e non è un indirizzo di qualche sito internet, in pratica prima di ".w3.org manca la solita stringa. spero si capisca comunque.