[GDR-CD] Non arriva la mail di attivazione
[GDR-CD] Non arriva la mail di attivazione postato il 30/05/2013 14:00:31 nel forum programmazione, open source e hosting
Salve!
Gestisco un gdr creato ormai anni fa, e non dalla sottoscritta, sulla versione (credo) più vecchia di GDR-CD, attualmente non più scaricabile, se non erro. Il database è quello fornito da altervista, su cui il sito è hostato.
Il problema, già presentatosi in precedenza ma in misura decisamente minore, è che spesso e volentieri all'iscrizione non arriva la mail di conferma, con il risultato che i nuovi iscritti, non riuscendo ad attivare il proprio pg con il link indicato nella mail, spesso restano fuori.
(il link di conferma presente nella mail permette al database di far passare da 0 a 1 il valore del campo "Attivo", presente in "Personaggio")
..l'unica ipotesi che sono riuscita a fare, considerando che questo problema si riscontra solo in alcuni casi, e recentemente più spesso, è che abbia qualcosa a che vedere con il fatto che alcuni nomi dei personaggi sono già stati utilizzati in precedenza, e dunque magari sono presenti in qualche altra sezione del database (non in "Personaggio", o all'iscrizione il sistema rimanda all'impossibilità di creare un pg con quel nome).
Allego il codice della pagina adibita all'invio della mail. Non sapendo dove mettere le mani, incollo un po tutto, scusate la ridondanza, eventualmente.
<? session_start();
include ("inc/parametri.inc.php");
include ("inc/open2.php");
#echo "<font color=white>Stiamo finendo la riprogrammazione dell'iscrizione!<br>Potrebbero verificarsi degli errori o imprecisioni nella scheda del Personaggio</font>";
If (($_POST['OKSesso'] == "")
|| ($_POST['OKNome'] == "")
|| ($_POST['OKPass'] == "")
|| ($_POST['OKEmail'] == "")) {
$_POST['errore'] == "<b>ERRORE! Dati incompleti!</b>";
#header("Location: iscrizione1.php", false);
echo $_POST['errore']."<br>";
echo $_POST['OKSesso']."<br>";
echo $_POST['OKNome']."<br>";
echo $_POST['OKPass']."<br>";
echo $_POST['OKEmail']."<br>";
//exit();
}
$OKNome = $_POST['OKNome'];
$OKEmail = $_POST['OKEmail'];
$OKPass = $_POST['OKPass'];
$OKSesso = $_POST['OKSesso'];
include("inc/controlloesilio.php");
$MySql = "Select Nome FROM Personaggio WHERE Nome = '$OKNome' or Email = 'OKEmail'";
$Result = mysql_query($MySql);
if ($rs = mysql_fetch_array($Result)) {$_POST['errore'] .= "Il personaggio ".htmlspecialchars($OKNome)." è già presente o l'email è già utilizzata!<br>";};
$rs->close;
if ($_POST['errore'] != "") {
echo $_POST['errore'];
#header("Location: iscrizione1.php", false);
exit();
}
function Lettera() {
mt_srand((double)microtime()*1000000);
return(chr(mt_rand(0, 24) + ord("A")));
}
$pass = Lettera();
$pass .= Lettera();
$pass .= Lettera();
$pass .= Lettera();
$pass .= Lettera();
$pass .= Lettera();
$pass .= Lettera();
$pass .= Lettera();
$password=sha1($OKPass);
$MySql = "INSERT INTO Personaggio (Nome, Pass, DataIscrizione, Sesso, Email, URLImg, Banca, ICQ, Affetti, Capacita, DataUltimaGilda, Attivo) ";
$MySql .= "VALUES (";
$MySql .= "'$OKNome'";
$MySql .= ", '$OKPass'";
$MySql .= ", NOW()";
$MySql .= ", '".strtolower($OKSesso)."'";
$MySql .= ", '".$OKEmail."'";
$MySql .= ", 'img/stemmi/spacer.gif'";
$MySql .= ", '0'";
$MySql .= ", '-'";
$MySql .= ", '-'";
$MySql .= ", '-'";
$MySql .= ", NOW()";
$MySql .= ", '0'";
$MySql .= ")";
$Result = mysql_query($MySql);
$StrBody = "BENVENUTO/A a ".$par_SiteName."!
Registrazione confermata di: ".$OKNome.chr(10);
$StrBody = "Durante l'iscrizione a The L Word è stata fornita questa mail per il personaggio di nome ";
$StrBody .= $OKnome."<br>Se non è stato lei a iscriversi al nostro gdr la preghiamo di cancellare questa email, tale personaggio non verrà cosi attivato e tali dati verranno cancellati dal nostro database<br>";
$StrBody .= "Per attivare il personaggio per giocare la preghiamo di cliccare sul seguente codice<br>";
$StrBody .= "http://lword.altervista.org/attivazione.php?pass=".$OKPass."&nome=".$OKNome;
$StrBody .= "<br>Alcuni provider di posta elettronica non permettono il link diretto, in tale caso, la pregiamo di copiare e incollare il link soprastante in un'altra pagina del suo browsers.";
$StrBody .= "<br>I dati del vostro personaggio sono i seguenti. Le raccomandiamo di non fornire questi indicazioni a terzi<br>";
$StrBody .= "Nome utente: ".$OKNome."<br>Password: ".$OKPass;
$StrBody .= "Per orientarti meglio dai un occhiata al nostro Regolamento che trovi sul menu alla voce Servizi,per qualsiasi altro chiarimento non esitare a rivolgerti ad un membro dello staff.
Ciao e buona permanenza :--)".chr(10).chr(10);
$target=$OKEmail;
$subject = $par_SiteName.' - Registrazione di '.$OKNome;
mail($target, $subject, $StrBody, 'From: '.$par_WebmasterEmail);
$MySql1 = "INSERT INTO 'Messaggi' ('ID' , 'Mittente' , 'Destinatario' , 'Spedito' , 'Letto' , 'Testo' ) ";
$MySql1 .= "VALUES (";
$MySql1 .= "''";
$MySql1 .= ", 'Staff The L Word'";
$MySql1 .= ", '$OKNome'";
$MySql1 .= ", NOW()";
$MySql1 .= ", '0'";
$MySql1 .= ", 'Benvenuto/a a The Loudest Word Gdr, <br>
..ecc
'";
$MySql1 .= ")";
$Result1 = mysql_query($MySql1);
include ("inc/header.html.inc.php");
?>
<title><?= htmlspecialchars($par_SiteName) ?> - Iscrizione</title>
</head>
<body>
<table id="frameHome">
<tr>
<td>
Nome del Personaggio:
<br/>
<b><?= $OKNome ?></b>
<br/><br/>
E-mail di riferimento:
<br />
<b><?= $OKEmail ?></b>
<br /><br />
<? if ($errore != "") { ?>
<?= $errore ?>
<? } else { ?>
Ti è stata inviata una e-mail con la password di accesso del personaggio.</b><br><br>
Se la e-mail non dovesse arrivare entro un tempo ragionevole (1-2 ore): <br />
<b>1) tentare di recuperare la password tramite il modulo "recupera password" raggiungibile dalla home page; <br />
<b>2) scrivere a <a href="mailto:<?= $par_WebmasterEmail ?>"><?= $par_WebmasterEmail ?></a>.</b><br/>
<? }
$Errore = ""; ?>
<br/>
<a href="index.html" class="home">Torna alla Home</a>
</td>
</tr>
</table>
</center></div></center>
</body>
</html>
Pagine → 1 2
07/11/2013 10:44:46
prova a fare un check per vedere se la mail viene inviata dal sistema, a volte capita che alcuni indirizzi mail legittimi finiscono nelle blacklist di spam dei provider. Ad esempio libero considera @altervista come spam
08/11/2013 13:37:34
Come dice breaker devi controllare se l'email esce per davvero o no.
Se esce per davvero allora il problema non è dal tuo lato, è il server ricevente che ti cataloga come una fonte di email spazzatura.
Purtroppo inviare email non è una scienza esatta <.<
ultimamente è sempre più facile finire nello spam. I consigli che posso dare sono:
_non usare la funzione mail() di php direttamente. Usa delle librerie che generano email tipo PHPMailer. Il formato delle email esatto è difficile da beccare e se inserisci delle parti sbagliate i server riceventi inizieranno a non fidarsi più di te.
_Usa come email mittente un'indirizzo che appartiene al dominio del server da cui l'email parte! Per esempio se usi i server di altervista usa un email [email protected] (tutti gli account altervista ne hanno una)
08/11/2013 18:23:06
Usa PHPMailer e dagli come consigliato dei parametri veri!
Puoi anche inviare con un dominio gmail ad esempio, che dovrebbe essere una delle più flessibili.
Crei un VERO account e configuri su PhpMailer il servizio smtp.
per evitare il blocco con @hotmail, sempre su PhpMailer imposta alta priorità ;)
14/11/2013 23:14:12
Ecco, lo stesso problema purtroppo sta capitando a noi.
Molti utenti non riescono a loggare se si iscrivono con libero, purtroppo =(
Conviene magari avvisarli con una e-mail per avvertirli di quanto accade? o come potremmo fare? Grazie infinite!
15/11/2013 00:48:16
Per superare il problema con libero dovete usare, come email di invio, una email il cui dominio abbia un record MX correttamente registrato nei DNS. In parole povere, se create un account tipo [email protected] andrà benone, se disponete di un account @altervista.org idem.
Ottenuta una email valida, il consiglio è di usare PHPMailer https://github.com/Synchro/PHPMailer/blob/master/class.phpmailer.php ↗, come già suggerito.
Ho un vecchio esempio di utilizzo, ma che tutt'ora oggi mi funziona con libero, ve lo posto qui:
#> Invio Email
$mail = new PHPMailer();
$mail->Sender = '[email protected]'; #> L'email valida che dicevo prima
$mail->From = '[email protected]';
$mail->FromName = 'Staff Land';
$mail->Subject = 'Oggetto Email';
$mail->Body = '<html><body>Html Email!</body></html>';
$mail->AltBody = 'Versione Mail solo testo per client di posta che non supportano email html';
$mail->IsHTML(true);
$mail->AddAddress('[email protected]');
$mail->AddReplyTo('[email protected]', 'Staff Land');
if($mail->Send())
{
echo "Ok, sono riuscito a mettere la mail in coda d'invio, dovrebbe arrivare a breve all'utente";
}else
{
echo "Ho avuto qualche problema ad inviare la mail, forse dovresti controllarmi con un try/catch e leggere le eccezioni che ho sollevato.";
}
Fatto questo, PHPMailer si prenderà cura del resto dei settaggi, come ulteriori intestazioni email o altro.
Se anche così dovesse non andare, probabilmente libero ha in blacklist l'ip del mail server di altervista (o comunque dove poggia la vostra land).
A quel punto, sempre tramite PHPMailer, dovete stabilire una connessione SMTP con un altro fornitore di servizi email (gmail andrà benone) in questo modo sarà un altro server che spedirà l'email.
Per questo caso non ho un esempio a portata di mano, ma se cercate su google sicuramente troverete un mucchio di articoli.
Off Topic: Andy Prevost, il creatore di PHPMailer, ha gravi problemi di salute e le spese mediche sono veramente ingenti. Ormai la campagna di ricerca fondi online è quasi al termine, ma se in caso vogliate mostrare il vostro apprezzamento per il suo lavoro vi lascio questo link http://www.youcaring.com/medical-fundraiser/please-help-this-family-in-need-of-your-help/100774 ↗
15/11/2013 14:08:01
Consiglio da un profano: se doveste avere problemini ad applicare nella pratica i consigli di Blancks e pulcioli vari, magari inserite semplicemente nella paginetta finale di conferma della registrazione l'avviso "Se la mail non ti arriva, controlla anche nel Cestino!", così risolvete il 50% di questi imbarazzi (per carità, è sempre meglio risolvere in maniera definitiva tramite il codice, come consigliato dagli altri, ma in mancanza di altre possibilità questa è una soluzione come un'altra)!
15/11/2013 14:15:59
wingsofmemories ha scritto: "Se la mail non ti arriva, controlla anche nel Cestino!"
Cestino e Spam, approvo.
17/11/2013 21:48:32
La mail viene registrata correttamente nel database (controllando all'interno, la cella contiene sempre la mail e si tratta di mail funzionanti (ho sperimentato)..a quanto pare, oltretutto, non si tratta di mail che vengono mandate nella cartella Spam, perchè facendo una prova io stessa tale cartella resta vuota. Semplicemente, l'e-mail non arriva :/
18/11/2013 00:33:11
Spesso questo succede perchè il server ricevente non si fida di te.
Può accadere perchè i server del tuo Hosting sono considerati non affidabili o con ranking basso (per esempio spesso i server SMTP non si fidano di mittenti su indirizzi IP retail).
Oppure perchè invii email usando un indirizzo che non centra niente con il server da cui invii (tipo un server di altervista che scrive con un indirizzo di hotmail). Spesso i server riceventi controllano i record SPF e PTR (quasi tutti i server lo fanno) dei domini a cui appartiene l'indirizzo mittente e se non centra nulla con il server mittente potrebbero decidere di rifiutare il messaggio.
Il consiglio è sempre di usare indirizzi inerenti al server mittente, altrimenti si corre il rischio di far scattare i più fantasiosi sistemi anti-spam
26/02/2014 00:35:49
Mi permetto di uppare questa discussione onde evitare di aprire altri topic.
Stiamo avendo lo stesso problema nel nostro gdr, ma la cosa strana è che dai controlli che ho fatto risulta che la funzione mail() restituisce 1 come valore, che indicherebbe una corretta spedizione della mail stessa. Ho controllato anche il corretto inserimento dei parametri all'interno del database e tutto è nella norma. Tuttavia, la mail non viene inviata non solo agli account hotmail, che come sappiamo sono soliti dare problemi in questo senso, ma neanche a quelli Gmail. Premetto che il gdr è ospitato su server aruba con indirizzo mail dedicato e reale, con reindirizazione al mio indirizzo privato per una consultazione rapida della posta. In seguito allego anche il codice che uso per l'invio della mail
$nome = ControlInput(stripslashes($_POST[nome]), 'Name');
$cognome = ControlInput(stripslashes($_POST[cognome]), 'Name');
$sesso = ControlInput($_POST[sesso], 'Text');
$idrazza = ControlInput($_POST[idrazza], 'Number') + 4;
$email = $_POST[email];
$ip = $_SERVER[REMOTE_ADDR];
//Controllo del corretto inserimento delle informazioni
$errore = "";
if ($nome == '') {$errore .= "Bisogna inserire un nome valido!<br />";}
if ($cognome == '') {$errore .= "Bisogna inserire un cognome valido!<br />";}
if ($sesso == '') {$errore .= "Devi scegliere il sesso del personaggio!<br />";}
if ($idrazza == '') {$errore .= "Devi scegliere una razza!<br />";}
if ($email == '') {$errore .= "Devi inserire l'indirizzo e-mail!<br />";}
if (!preg_match('/[a-z0-9._-]+@[a-z0-9._-]+.[a-z]{2,4}/', $email)) {$errore .= "L'indirizzo inserito non è valido!<br />";}
#elseif (strpos($email, ".") == FALSE) {$errore .= "L'indirizzo inserito non è valido! Inserire il carattere '.'<br />";}
//Reindirizzazione alle pagine opportune a seconda della presenza o meno di errori
if ($errore == '')
{
//Controllo del blocco ip
$controllo = mysqli_query($connessione_db, "SELECT * FROM ipbloccati WHERE emailassociata = '$email'");
$verifica = mysqli_num_rows($controllo);
if ($verifica == 0)
{
//Controllo della presenza del personaggio
$esistenza = mysqli_query($connessione_db, "SELECT * FROM personaggio WHERE nome = '".addslashes($nome)."' OR email = '$email'");
$verifica_esistenza = mysqli_num_rows($esistenza);
if ($verifica_esistenza == 0)
{
//Generazione della password casuale. Essa è composta da tre numeri e tre lettere.
$passSignIn = chr (mt_rand(97, 122));
$passSignIn .= chr (mt_rand(97, 122));
$passSignIn .= mt_rand(0, 9);
$passSignIn .= mt_rand(0, 9);
$passSignIn .= chr (mt_rand(97, 122));
$passSignIn .= mt_rand(0, 9);
$passSignIn .= mt_rand(0, 9);
$passSignIn .= chr (mt_rand(97, 122));
$passSignIn .= chr (mt_rand(97, 122));
$passSignIn .= mt_rand(0, 9);
//Creazione del messaggio di benvenuto all'interno del gdr
$benvenuto = addslashes("Benvenuto/a a Dream Gate!
Oggi comincia la tua avventura nelle terre di Esper, la prima cosa di cui avrai bisogno sarà un personaggio da poter muovere all’interno del gioco. Nella colonna di destra, all’interno della sezione “Uffici” potrai trovare molte informazioni utili, tra cui il “Manuale Pg” che contiene le indicazioni necessarie per poter passo a passo creare il personaggio che ti permetterà di vivere qualunque tipo di avventura la tua fantasia saprà suggerirti. Ulteriori informazioni possono essere trovate anche nelle Bacheche della razza del tuo personaggio (abbreviato pg).
Se è la prima volta che giochi non esitare a chiedere aiuto o consiglio ai giocatori presenti. All’interno del sito è, infatti, possibile comunicare grazie alle missive, specificando il nome del giocatore a cui desideri inviare lo scritto.
Alcune figure hanno il compito di aiutarti a vivere al meglio questo gioco:
-Le guide hanno il compito di aiutarti nel primo periodo di permanenza nel gioco , risolvendo i tuoi dubbi e consigliandoti qualora tu ne avessi bisogno
-I moderatori sono coloro ai quali puoi rivolgerti se mai ritenessi che qualcuno si è comportato in modo scorretto nei tuoi confronti ( si consiglia caldamente la visione del regolamento, presente in uffici )
-Gli Admin sono i creatori del gioco e puoi rivolgerti a loro per qualunque segnalazione, dubbio o idea riguardante la struttura del sito, perché è loro compito rendere gradevole l’ambiente di gioco.
Puoi trovare l’elenco dei loro nomi nel riquadro in alto a destra.
La cosa più importante, come in qualunque gioco, è il divertimento. Dai libero sfogo alla tua fantasia, inizia a divertirti, incontra altri personaggi, crea la tua storia!
Non ci resta che rinnovarti il nostro benvenuto e buon gioco!
Staff");
//Inserimento delle informazioni all'interno del database
#echo $nome."<br>";
#echo $cognome."<br>";
#echo $pass."<br>";
#echo $email."<br>";
#echo $idrazza."<br>";
#echo $ip."<br>";
#echo $sesso."<br>";
$PassEncripted = hash("sha512", $passSignIn);
$iscrizione = mysqli_query($connessione_db, "INSERT INTO personaggio (nome, password, idrazza, cognome, sesso, email, ipiscrizione, dataiscrizione) VALUES('".addslashes($nome)."', '$PassEncripted', $idrazza, '".addslashes($cognome)."', '$sesso', '$email', '$ip', NOW())");
//echo $iscrizione."<br>";
$msgbenvenuto = mysqli_query($connessione_db, "INSERT INTO telegrammi (mittente, destinatario, oggetto, messaggio, datainvio, tipo) VALUES ('Staff', '".addslashes($nome)."', 'Benvenuto!', '$benvenuto', now(), 0)");
$msgbenvenutolog = mysqli_query($connessione_db, "INSERT INTO logtelegrammi (mittente, destinatario, oggetto, messaggio, datainvio, tipo) VALUES ('Staff', '".addslashes($nome)."', 'Benvenuto!', '$benvenuto', now(), 0)");
//echo $msgbenvenuto."<br>";
if ($iscrizione) {
//Creazione della mail di benvenuto
$benvenutomail = "Benvenuto in Dreamgate.
Ecco i dati per accedere con il tuo personaggio
Nome: $nome
Password: $passSignIn
Ti preghiamo di cliccare su questo link in modo che il tuo personaggio possa essere attivato
http://www.thedreamgate.it/confermamail.php?character=$nome
Lo staff ti invita, se non lo hai fatto prima dell'iscrizione, a prendere visione della regolamentazione off e dell'ambientazione del gdr. Una cosa che non smetteremo mai di ribadire è che questo, essendo un gioco, è un luogo fatto per divertirsi. Non accettiamo insulti alle persone, chiunque siano, nè confusione tra on ed off. Siamo qui per giocare e divertirci, e speriamo vivamente che anche tu possa condividere questa nostra stessa passione. Detto questo, ancora benvenuto nella nostra land.
Lo staff";
$MailConferma = mail ($email, "Iscrizione di ".$nome, $benvenutomail, "From: [email protected]");
if ($MailConferma) { echo "Iscrizione avvenuta con successo. Attendi l'arrivo dell'email per attivare il tuo personaggio."; } else { echo "Iscrizione avvenuta con successo, tuttavia c'è stato un problema con l'invio della email di conferma. Si prega di contattare l'amministrazione del gdr all'indirizzo email [email protected] per risolvere il problema"; }
} else {
echo "Iscrizione non riuscita. Riprovare ad iscrivere il persoanggio. Se non si dovesse riuscire, contattare l'amministrazione";
}
Discussione seguita da
Pagine → 1 2
Rispondi alla Discussione Segui Discussione Inoltra Discussione Forum Programmazione, Open Source e Hosting Elenco Forum
Articoli, Interviste e altre Risorse!
World of Warship ↗
Raja Dunia ↗
State of Survival ↗
Enlisted ↗
Cafuné ↗
Sea of Conquest ↗
CRSED: F.O.A.D. ↗