Funzione mail()

  • Creatore Discussione Creatore Discussione Oswold
  • Data di inizio Data di inizio

Oswold

Utente Attivo
7 Ago 2013
81
0
6
Catania
Salve ancora!

Ho un altro piccolo problema:

Ho migliorato lo script della registrazione ed adesso devo far mandare dallo script un email per completare la registrazione quindi ho deciso di procedere così:

Mi sono creato un campo impostato a 0 nel database, finché il campo è 0 l'utente non è autentificato e di conseguenza la registrazione non è completa e non può effettuare il login.
Una volta cliccato il link (che si riceve nell'email) questo value viene incrementato ad 1 così da avere l'account abilitato.
Fin qui tutto bene, ho creato tutto e il php non mi da errori ma, e dico ma, non mi arriva nessuna email

PHP:
$risultato=mysql_query("INSERT INTO utenti (username,password,mail) VALUES ('$user', '$pass', '$mail')") or die(mysql_error());
if($risultato){  

   $mail_mittente = "Inserisco_La_Mia_Email";
   $mail_destinatario = "$mail";

   $mail_oggetto = "Completamento Registrazione!";
   $mail_corpo = "Clicca qui per completare la registrazione: localhost/Test/Conferma_Registrazione.php?email=$mail\r\n";
   $mail_corpo = "Le Ricordiamo che la sua password è: $pass e che il suo username è: $user\r\n";
   $mail_corpo = "Grazie per essersi registrato al nostro sito!\r\n";

   if (mail($mail_destinatario, $mail_oggetto, $mail_corpo, "From: $mail_mittente"))

   {
   echo "<div4>Ti è stata inviata un email nella posta elettronica, clicca sul link per completare la registrazione!</div4>";
   }
   else
   {
   echo "E' avvenuto un errore, riprova.";
   }
}

Il codice mi stampa:
PHP:
Ti è stata inviata un email nella posta elettronica, clicca sul link per completare la registrazione!
di conseguenza tutto funziona alla perfezione, sapreste dirmi qual'è il problema?

Grazie in anticipo!
 
PHP ti conferma che è riuscito a comunicare al server mail configurato di mettere in lista invii la tua email, non ti ha confermato l'invio perché chi spedisce effettivamente l'email è qualcun altro. Detto questo, generalmente si tratta di aspettare qualche minuto ma potrebbe rimanere il problema che senza i giusti headers i provider di posta ti leggeranno facilmente come spam.

Personalmente ti consiglio l'uso della classe PHPMailer che gestisce per te molte di queste intestazioni.
 
Grazie mille!

Gli ho dato uno sguardo veloce ed è molto simile e semplicissimo da capire!
Sicuramente non avrò problemi!

Grazie per la risposta ed il link!
 
Visto che per creare un account SMTP dovrei aver già acquistato il dominio chiedo a voi, dal punto di vista sintattico va bene?

PHP:
require "phpmailer/class.phpmailer.php";

$messaggio = new PHPmailer();
$messaggio->IsSMTP();
$messaggio->Host='Host SMTP';

$messaggio->From='Mioemail';
$messaggio->AddAddress('$mail');
$messaggio->AddReplyTo('Mioemail'); 
$messaggio->Subject='Completamento Registrazione';
$messaggio->Body=stripslashes('Clicca qui per completare la registrazione: localhost/Test/Conferma_Registrazione.php?email=$mail');
$messaggio->Body=stripslashes('Le Ricordiamo che la sua password è: $pass e che il suo username è: $user');
$messaggio->Body=stripslashes('Grazie per essersi registrato al nostro sito!');

if(!$messaggio->Send()){ 
  echo "<div4>E' avvenuto un errore, riprova.</div4>"; 
}else{ 
  echo "<div4>Ti è stata inviata un email nella posta elettronica, clicca sul link per completare la registrazione!</div4>"; 
}

$messaggio->SmtpClose();
unset($messaggio);
}
}
 
L'uso dell'SMTP serve a specificare un server email alternativo, puoi tranquillamente non usarlo in quanto generalmente ogni servizio di hosting ha un server email di default collegato a php.

Quanto agli errori, l'unico che vedo è che non concateni il body dell'email, quindi ad ogni dichiarazione ne sovrascrivi il contenuto.
Dovresti risolvere facilmente così:
PHP:
$messaggio->Body =stripslashes('Clicca qui per completare la registrazione: localhost/Test/Conferma_Registrazione.php?email=$mail');
$messaggio->Body .=stripslashes('Le Ricordiamo che la sua password è: $pass e che il suo username è: $user');
$messaggio->Body .=stripslashes('Grazie per essersi registrato al nostro sito!');
 
Utilizza le doppie virgolette per usare le variabili in una stringa, altrimenti ti stampa il nome cosi com'è, oppure concatenala con il punto
PHP:
$messaggio->Body =stripslashes("Clicca qui per completare la registrazione: localhost/Test/Conferma_Registrazione.php?email=$mail"); 
$messaggio->Body .=stripslashes('Le Ricordiamo che la sua password è: $pass e che il suo username è: '.$user); 
$messaggio->Body .=stripslashes('Grazie per essersi registrato al nostro sito!');
 

Discussioni simili