PDA

View Full Version : [PHP] Problema mail


matti96
08-03-2011, 10:18
Salve! Ho fatto un form per inviare un email direttamente dal sito in php.
Funziona tutto solo che la mail non arriva :(
ecco il codice:

inviamail.php
<?php
$email=$_POST['email'];

#######################################
# IMPOSTAZIONI DA CONFIGURARE #
#######################################

//(1) indirizzo email del destinatario del modulo
$destinatario = "xxx@xxx.it";

//(2) indirizzo email del mittente, campo FROM
// non toccare se desiderate che l'indirizzo email inserito nel modulo sia
// riportato nel campo DA del messaggio che sarà ricevuto.
// Se invece desiderate un campo fisso annullare la prima riga e abilitare
// la seconda inserendo la dicitura desiderata (per annullare mettere //
// all'inizio della prima riga e per abilitare togliere // dalla seconda riga)
$nome_mittente = "$email";
// $nome_mittente = "Dal Modulo";

//(3) oggetto del messaggio
$oggetto_email = "$oggetto";

//(4) se si vogliono rendere tutti i campi NON OBBLIGATORI impostare su "y".
// (valori possibili: "y" e "n")
$all_free = "n";

//(5) se avete messo "n" al punto (4) inserire tra virgolette, separati
// da virgola, i nomi dei campi da rendere OBBLIGATORI
// Esempio: $campi_req = array("nome","telefono","via");
$campi_req = array("nome","email","oggetto","citta","chiesa");

//(6) controllo validità del campo email. (valori possibili: "y" e "n")
$obbligo_email = "y";

//(7) obbligare l'utente ad accettare le condizioni.
// (valori possibili: "y" e "n")
$accetta_condizioni = "n";

//(8) URL della pagina di ringraziamento
$pagina_grazie = "emailcorretta.php";

//(9) URL della pagina errore campi vuoti
$pagina_error_empty = "emailsbagliata.php";

//(10) URL della pagina errore email
$pagina_error_email = "emailsbagliata.php";

//(11) URL della pagina errore condizioni non accettate
$pagina_error_condizioni = "emailsbagliata.php";

//(12) URL della pagina errore invio non autorizzato (mancanza di referrer)
$pagina_error_referer = "referrer.php";

#######################################
# FINE IMPOSTAZIONI DA CONFIGURARE #
#######################################

//ora e data
$ora = date ("H:i:s");
$data = date ("d/m/Y");

//intestazione email che arriva al destinatario
$corpo = "
Modulo inviato il $data alle ore $ora
Riepilogo dati:\n\n";

//============== NON TOCCARE NULLA OLTRE QUESTA RIGA ==================\


########### CODICI ###########

//variabili per rendere lo script compatibile anche con la versione PHP 4.2 e maggiori
if(!isset($_SERVER) OR !$_SERVER OR !is_array($_SERVER) OR count(array_diff($_SERVER, $HTTP_SERVER_VARS))){
$_POST = &$HTTP_POST_VARS;
}

//prende IP ADDRESS
if(isset($_SERVER["HTTP_X_FORWARDED_FOR"])){

if ($_SERVER["HTTP_X_FORWARDED_FOR"] == "") {

$ipnumb = getenv("REMOTE_ADDR");

}else {

$ipnumb = getenv("HTTP_X_FORWARDED_FOR");

}

} else {

$ipnumb = getenv("REMOTE_ADDR");
}
###################################

//controllo referer
if(empty($_SERVER["HTTP_REFERER"])){

header ("Location: $pagina_error_referer");
exit();

}

########### CONTROLLO DEI CAMPI ###########
$control_campi = 0;

if($all_free != "y"){

foreach($_POST as $key => $valore){

if(in_array($key,$campi_req)){

if(trim($valore) == ""){

$control_campi++;

}

}

}

} else {

$control_campi = 0;

}

########### CONTROLLO EMAIL ###########
$control_email = 0;

if($obbligo_email == "y"){

if(isset($_POST['email'])){

if(!eregi("^([a-zA-Z0-9_.-])+@(([a-zA-Z0-9_-])+.)+[a-z]{2,6}$", $_POST['email'])){

$control_email++;

}

} else {

$control_email = 0;

}

}

########### CONTROLLO CONDIZIONI ###########
$control_condizioni = 0;

if($accetta_condizioni == "y"){

if(isset($_POST['trattamento_dati']) && $_POST['trattamento_dati'] == "accetto"){

$control_condizioni = 0;

} else {

$control_condizioni ++;

}

}

########### INVIO EMAIL ###########
if($control_campi == 0){

if($control_email == 0){

if($control_condizioni == 0){

foreach($_POST as $key => $valore){

$key = ucfirst(stripslashes(trim($key)));
$valore = stripslashes(trim($valore));
$key = str_replace("_"," ",$key);

if(trim($valore) == "") $valore = "Non compilato";

$corpo .= $key .": ". $valore ."\n\n";

}

$corpo .= "Numero IP: $ipnumb"."\n";

$corpo .= "____________________________________________________________ \n\n

";


// invio e-mail
// Header Mail
$headmail.="From: $nome_mittente <$nome_mittente>\n";
$headmail.="Return-Path: $nome_mittente\n";
$headmail.="User-Agent: Php Mail Function\n";
$headmail.="X-Accept-Language: en-us, en\n";
$headmail.="MIME-Version: 1.0\n";
$headmail.="X-Priority: 1 (Highest)\n";
$headmail.="Content-Type: text/plain; charset=ISO-8859-1; format=flowed\n";
$headmail.="Content-Transfer-Encoding: 7bit\n";

ini_set('sendmail_from', "$destinatario");
mail("$destinatario", "$oggetto_email", "$corpo", "$headmail");

header ("Location: $pagina_grazie");

} else {

header ("Location: $pagina_error_condizioni");

}

} else {

header ("Location: $pagina_error_email");

}

} else {


header ("Location: $pagina_error_empty");

}

?>



L'email l'ho censurata io qui, ma nel sito c'è quella vera.




Qui c'è il form


<table border="0" width="500" cellspacing="0" cellpadding="0">



<tr>



<td width="100%"><div align="center"><center><table border="0" width="100%">



<tr>



<td align="center" valign="top" rowspan="2" width="90%" bgcolor="#F0F0F0">



<form name="modulo" method="post" action="inviamail.php">



<div align="center">



<table border="0">



<tr>



<td colspan="2"><strong><font color="#FF0000" face="Verdana"><small>*</small></font><font color="#FF0000" face="Arial" size="1">



dato obbligatorio</font></strong></td>



</tr>



<tr>



<td width="108" align="right"><strong><small><font face="Verdana"><strong><span class="Stile20">*</span></strong></font><strong><font face="Verdana" color="#000000"> Nome Chiesa o Missione </font></strong></small></strong></td>



<td width="202"><input name="chiesa" type="text" id="chiesa" size="36" /></td>

</tr>



<tr>



<td align="right"><small><font face="Verdana"><strong><span class="Stile20">*</span></strong></font><strong><font face="Verdana" color="#000000"> Nome Cognome:</font></strong></small></td>



<td><input name="nome" type="text" size="36" /></td>



</tr>



<tr>



<td align="right"><small><font face="Verdana"><strong><span class="Stile20">*</span></strong></font><strong><font face="Verdana" color="#000000"> E-Mail:</font></strong><font face="Verdana" color="#000000"></font></small></td>



<td><input name="email" type="text" size="36" /></td>



</tr>



<tr>



<td align="right"><small><font face="Verdana" color="#000000"><strong>Indirizzo:</strong></font></small></td>



<td><input name="indirizzo" type="text" size="36" /></td>



</tr>

<tr>

<td align="right"><strong><small><font face="Verdana"><strong><span class="Stile20">*</span></strong></font><font face="Verdana" color="#000000"><strong>Città:</strong></font></small></strong></td>

<td><input name="citta" type="text" size="36" /></td>

</tr>

<tr>

<td align="right"><strong><span class="Stile19"><small><font face="Verdana"><strong><span class="Stile20">*</span></strong></font></small>Oggetto:</span></strong></td>

<td><input name="oggetto" type="text" size="36" /></td>

</tr>



</table>

<table border="0">



<tr>



<td width="326" align="center"><font color="#000000" face="Verdana"><small><br>



<strong>Spazio per richiesta informazioni:</strong><br>



<textarea name="note" cols="38" rows="3" wrap="VIRTUAL">



</textarea>

</small></font></td>



</tr>



<tr>



<td align="center">&nbsp;



<p><font color="#000000" face="Arial">

<input name="submit" type="submit" value="Invia" />

</font> </td>



</tr>



</table>

Torav
08-03-2011, 11:38
Dipende dall'hosting: potrebbe non permettere l'invio di email.

matti96
08-03-2011, 12:56
Dipende dall'hosting: potrebbe non permettere l'invio di email.

L'hosting è Aruba... Ma l'ho testato in locale (localhost)

bobbytre
08-03-2011, 17:04
Hai provato ad inviare una mail di prova e vedere se arriva ?



mail('tua_mail@gmail.com', 'Prova di Invio', 'Prova di Invio');

matti96
09-03-2011, 14:59
Risolto, non c'era nessun errore. Solo che localhost non faceva mandare perché è in locale e quindi non prende la connessione a internet :) sul sito vero funziona. Grazie lo stesso!