php & mail

  • Creatore Discussione Creatore Discussione idkfa46
  • Data di inizio Data di inizio

idkfa46

Utente Attivo
17 Ott 2010
40
0
0
ciao ragazzi, ancora una volta mi trovo costretto a chiedere il vostro aiuto per risolvere l'ennesimo problema con il mio sito web...

ho creato una pagina chiamata site_key.tpl
di cui vi riporto il codice:
PHP:
{include file='file:core/header.tpl'} 

    <!-- B. MAIN --> 
    <div class="main"> 

        {include file='file:sidebars/left.tpl'} 
  
        <!-- B.2 MAIN CONTENT --> 
        <div class="main-content"> 
        <!-- Pagetitle --> 
            <h1 class="pagetitle">Points key</h1> 
{if count($message.messages) > 0} 
            <div class="{$message.type}"> 
                <ul> 
            {foreach item=text from=$message.messages} 
                    <li>{$text}</li> 
            {/foreach} 
                </ul> 
            </div> 
{/if} 
{if $user.is_admin}    

        <div class="column1-unit" align="center"> 
          <div class="contactform" align="center"> 
            <form method="post" action="{$script_url}?act=key"> 
              <fieldset><legend>&nbsp; {$user.name}'s MALL POINTS DELIVERING SISTEM &nbsp;</legend> 
                    <p>Please enter here the key gonna active now:</p> 
                                 <p>&nbsp;<input type="text" name="act_key" id="act_key" class="bigfield" value="{$form_key}" tabindex="1" /></p> 
                    <p>Please enter here the point's quantity:</p> 
                                 <p>&nbsp;<input type="text" name="points" id="points" class="bigfield" value="{$form_points}" tabindex="1" /></p>     
                                                                                 <p>Please enter here the donator's email:</p> 
                                 <p>&nbsp;<input type="text" name="mail" id="mail" class="bigfield" value="{$form_mail}" tabindex="1" /></p> 
                    <p>Please enter here the donator's char name:</p> 
                                 <p>&nbsp;<input type="text" name="charname" id="charname" class="bigfield" value="{$form_charname}" tabindex="1" /></p> 
                     <p><input type="submit" id="submit" class="button" name="a_key" value="Submit"></p> 
             </fieldset> 
            </form> 
          </div>               
        </div> 
            <div class="notice"> 
                <ul> 
                    <li>- A Key only contains 16 Letters!</li> 
                    <li>- Every Key can be used only once!</li> 
                    <li>- You can obtain keys from events or by donating for the Server</li> 
                    <li>- If you got any problems useing this System please contact the team over the Contact form!</li> 
                </ul> 
            </div> 
        </div> 
{else}                 

         
            <!-- Pagetitle --> 
            <h1 class="pagetitle">Login</h1> 

                      <div class="contactform"> 
                <form method="post" action="{$script_url}?act=login"> 
                    <input type="hidden" name="login" value="doit" /> 
                    <p><label for="username" class="left">Username:</label> 
                        <input type="text" name="username" id="username" class="shortfield" value="{$form_username}" tabindex="1" /></p> 
                    <p><label for="password" class="left">Password:</label> 
                        <input type="password" name="password" id="password" class="shortfield" value="" tabindex="2" autocomplete="off" /></p> 
                    <p><input type="submit" name="submit" id="submit" class="button" value="Login" tabindex="3" /></p> 
                    <p>&nbsp;</p> 
                </form> 
            </div> 
            </div>               
{/if}     
        {include file='file:sidebars/right.tpl'} 

    </div> 

{include file='file:core/footer.tpl'}

come potete vedere ho creato semplicemente 4 righe di testo dove posso inserire alcuni dati quali "key,points,mail,charname"

il codice php a cui questo file fa riferimento è nel file inc.key.php
di cui vi riporto il contenuto:
PHP:
<?php 
    // Include needed files 
    if (isset($_SESSION['aid'])) 
    { 
        if (isset($_POST['a_key'])) { 

            $act_key        = trim((isset($_POST['act_key']) ? $_POST['act_key'] : '')); 
            $points        = trim((isset($_POST['points']) ? $_POST['points'] : '')); 
            $mail        = trim((isset($_POST['mail']) ? $_POST['mail'] : '')); 
            $charname        = trim((isset($_POST['charname']) ? $_POST['charname'] : '')); 

            $query = doQuery("SELECT * FROM item_key WHERE act_key = '$act_key'", DATABASE_WEBSITE);  

                                                if(mssql_num_rows($query) > 0)  
                                                                                           {  
                                                                                                         $oSmarty->assign('message',            array( 'type'        => 'error', 
                                            'messages'    => array( 'KEY USED, TRY WITH A DIFFERENT ONE!' ) ) ); 
                                                                                            }  
                                                                 else  
                                                                           {  


            $actkey = doQuery("INSERT INTO item_key (act_key,wasted,points,mail,charname) VALUES ('$act_key','0','$points','$mail','$charname')", DATABASE_WEBSITE); 
             
             
            if(!$actkey)  
                        { 
                            $oSmarty->assign('message',            array( 'type'        => 'error', 
                                            'messages'    => array( 'Error key' ) ) ); 
                        } 
                    else 
                        {                 
                            $oSmarty->assign('message',            array( 'type'        => 'ok', 
                                            'messages'    => array( 'Your key has been succesful actived!' ) ) ); 
                        } 
                                                                              } 
            } 
    } 
    else 
    { 
                            $oSmarty->assign('message',            array( 'type'        => 'error', 
                                            'messages'    => array( 'Please log-in to acces this feature!.' ) ) ); 
    } 
     

    // Build breadcrumb-navigation 

    $breadcrumbs    = array(); 

    $breadcrumbs[]    = array( 'caption'    => 'Home', 
                 'url'        => ''    ); 
    $breadcrumbs[]    = array( 'caption'    => 'Active Key', 
                 'url'        => ''    ); 

    $oSmarty->assign('breadcrumbs',        $breadcrumbs); 

    // Display page 

    $oSmarty->display('file:pages/mall/site_key.tpl'); 

?>


praticamente, con questo codice apparentemente funzionante, sono in grado di prendere i dati inseriti e rigistrarli in un database SQL, più precisamente nella database "website" alla tabella item_key !

ora però vorrei implementare il codice aggiungendo due cose:

prima cosa:
vorrei che quando registro i file sul database mi inserisca anche una colonna con la data... devo aggiungere una colonna al database e questo non è un problema ma non so come gestire il formato della cella e come far scrivere in automatico data e ora senza doverla inserire manualmente...

seconda cosa:
vorrei implementare lo script in modo tale che, quando avviene la registrazione dei dati sul database venga anche automaticamente inviata una mail all'indirizzo che ho inserito con un semplice testo del tipo:
"la tua activation key è: $key"

il secondo punto è quello più importante per la gestione del sito...
gia utilizzo l'invio di email per la conferma di registrazione quindi parte del codice è gia integrato infatti:
nel file inc.config.php c'è:

PHP:
... 
$config['mail'] = array( 'mode' => 'smtp', 'use_ssl' => false, 'server' => 'smtp.email.it', 'port' => 25, 'email' => '******@email.it', 'username' => '*******', 'password' => '*******', 'use_auth' => 'yes' ); 
...

Confido nel vostro aiuto perchè non so più come procedere...
Vi ringrazio anticipatamente per la vostra disponibilità
Matteo
 
ciao
secondo me il modo migliore per inserire le date è inserirle in formato timestamp, il campo dovrà essere del tipo int(15)
poi basta che nella query di inserimento tu aggiunga (poi puoi mettere time direttamente nella query)
PHP:
<?php
//....
$data_ins=time();//da la data in timestamp al momento dell'inserimento
$actkey = doQuery("INSERT INTO item_key (act_key,wasted,points,mail,charname,data_ins) VALUES ('$act_key','0','$points','$mail','$charname', $data_ins)");
//.....
?>
io uso sempre il timestamp in quanto è molto più facile da gestire, sia nell'ordinamento che nell'eventuale calcolo di differenza tra date.

poi quando lo visualizzi la trasformi in formato "umano" con la funzione date();
es. se estrai dal db la data
PHP:
<?php
//....
$data_in_timestamp=$rov['data_ins'];//sarè un numero intero tipo 1283416220
//se provi
//echo date("d/m/Y",1283416220);// out -> 02/09/2010
$data_umana=date("d/m/Y",$data_in_timestamp);//
//....
echo date("d/m/Y",1283416220);// 02/09/2010
?>
per inviare la mail cosa usi? la funzione mail() o una classe es, maillerphp?
 
Mitico! ho implementato la data secondo il tuo suggerimento e funziona perfettamente!

Per inviare la email pensavo di usare il mail() che credo sia la strada più semplice... so che dovrebbe essere strutturata in questo modo:
mail($destinatario, $oggetto, $messaggio)
ma non so come rendere la teoria praticamente funzionante!
 
ciao
tuo suggerimento e funziona perfettamente
non è merito mio ma di php:)
per invire em se dal tuo sito (tuo_dominio) l'utente invia un em a te es pinco@tuo_dominio.it non ci sono problemi ad usare la funzione nativa php mail(), ma se devi inviare ad altri ci possono essere problemi in quanto alcini host di posta non accettano l'invio con tale funzione (es. tipo @libero.it, @tin.it, @email.it ...) qindi per essere "abbastanza" sicura che l'em sia ricevuti dovresi usare la classe PHPmailer che puoi trovare un tutorial al seg link
https://www.mrw.it/php/articoli/inviare-email-classe-phpmailer_631.html
poi eventualmente devi sapermi dire quale è il punto del tuo script in cui si trova l'indirizzo em del destinatario e la variabile che vuoi inviare $key.
 
Rieccomi qui...
ho fatto un paio di prove...

per iniziare ho inserito nel mio codice php questa riga:
PHP:
mail($mail, "Activation Key", "La tua activation key è: $act_key");

Funziona! mi invia le mail ma come dicevi non funziona con alcuni provider tipo email.it e libero.it

Allora ho deciso di utilizzare un'altra via, sfruttando il gia presente sistema di conferma via email delle registrazioni account che utilizza la funziona sendmail

nel file di config.php ho:
PHP:
$config['mail']				= array( 'mode'		=> 'smtp',
							 'use_ssl'		=> false,
							 'server'		=> 'smtp.somewhere.com',
							 'port'		=> 25,
							 'email'		=> '[email protected]',
							 'username'	=> 'u123456',
							 'password'	=> 'pw123456',
							 'use_auth'	=> 'yes'		);

ho poi definito il testo della mail da inviare nel file activation_key.tpl

e ho implementato il codice della pagina key.php inserendo:

PHP:
...
$Amail		= $oSmarty->fetch('file:others/activation_key.tpl');
						sendmail($mail,$config['servername'].' - Activation Key', $Amail);
....

Praticamente la email viene inviata correttamente ma...
all'interno del file activation_key.tpl ho inserito la variabile $act_key che non mi viene ricosciuta! Praticamente ricevo una mail con scritto $act_key e non il valore corrispondente alla variabile!
:(((

Devo aver commesso qualche Ca....ata delle mie come al solito...
 
ciao
scusa non ho capito bene
ti invia un'em con scritto nel body
$act_key
oppure
Activation Key
sensa il valore della key?

se è il secondo caso prova a scrivere
sendmail($mail,$config['servername'].' - Activation Key '.$act_key, $Amail);


p.s.
non conosco la classe che stai usando in quanto non l'ho mai usata quindi posso dire una caz..ta anche io:book:
 
praticamente ricevo una mail con:
mittente corretto: la casella di posta che ho impostato
oggetto della mail corretto: $config['servername'].' - Activation Key '
body della mail quasi corretto!

nel corpo della email c'è esattamente quello che ho scritto nel file activation_key.tpl ! unico problema è che all'interno del suddetto file ho utilizzato la variabile $act_key e non viene sostituita con il corrispondente valore della variabile!

Credo che sia un problema di Smarty... probabilmente devo associare la variabile $act_key allo smarty con qualcosa di simile a

PHP:
$oSmarty->assign('act_key',	$act_key);

ma sinceramente non trovo il modo di farlo funzionare... :(

ho provato a cambiare la variabile come mi hai suggerito tu ma il risultato non cambia; nella mail che ricevo leggo .$act_key !
 
ciao
un piccolo dubbio
dici che arriva l'em con oggetto ok e corpo cira ok
nella riga
sendmail($mail,$config['servername'].' - Activation Key', $Amail);


$mail è l'inirizzo a cui spedisci?
$config['servername'].' - Activation Key' è l'oggetto?
$Amail è il body? o qualcosaltro?

se $Amail è il corpo la variabile devi aggiungerla li, se è qualcosaltro quale è il body dell'em?
 
ciao
come avevo detto non conosco la classe, ma se $Amail contiene il corpo dell'email, cioè quello che vuoi venga inviato es "la tua Activation Key è PINCO_PALLO" e PINCO_PALLO è il valore di $act_key per aggiungerla intendo
sendmail($mail,$config['servername'].' - Activation Key', $Amail.$act_key);

oppure (sempre che $Amail sia il body) aggiungerla nel punto in cui la definisci
es.
$Amail ="la tua Activation Key è ".$act_key;
 
ho provato in tutti i modi!
se $act_key = PINCO PALLINO

Il body della mail che ricevo è sempre:
la tua Activation Key è .$act_key

invece di:
la tua Activation Key è PINCO PALLINO

:incazz2::incazz2::incazz2::incazz2::incazz2::incazz2::incazz2:
 
ciao
verifica gli apici perchè se hai es.
$stringa ="pinco";
e poi scrivi
echo 'nella stringa ho $stringa';//apici singoli
l'out è
nella stinga fo $stringa
se invece scrivi
echo "nella stringa ho $stringa";//apici doppi
l'uot è
nella stinga ho pinco
 
Ti adoro! Adesso funziona perfettamente!
inserendo la variabile nell'oggetto della mail è sufficiente inserire " al posto di '
mentre inserendo la variabile nel corpo della mail
utilizzando un file tpl e lo smarty per la separezione del codice php dall'interfaccia grafica ho risolto assegnando la variabile allo smarty nel seguente modo:
PHP:
$oSmarty->assign('act_key',	$act_key);

e poi inserendo la variabile nel corpo della mail tra parentesi graffe!

Non so come ringraziarti....
 
ciao
HTML:
Ti adoro!
se sei una ragazza è pericoloso, non so cosa potrebbe dire mia moglie, se sei un ragazzo...non sei il mio tipo:):)

l'importante che funzi

buon natale
 

Discussioni simili