Hola,
he instalado phpmailer, he creado una classe llamada InviaEmail y la he puesta en la carpea models (todo esto siguendo un tutorial en YouTube).
Mi classe:
<?php
Yii::import('application.extensions.phpmailer.JPhpMailer');
class InviaEmail{
public function Invia_Email(array $from, array $to, $subject, $message)
{
$mail = new JPhpMailer;
$mail->IsSMTP();
$mail->Host = 'localhost';
$mail->SetFrom($from[0],$from[1]);
$mail->Subject = $subject;
$mail->MsgHTML($message);
$mail->AddAdress($to[0], $to[1]);
$mail->send();
}
}
Luego he creado un formulario llavado recuperopassword (vistas directory site)para que el usuario pueda insertar su username, su contrasena y el codico captcha:
<?php
$this->pageTitle = 'Recupero Password';
$this->breadcrumbs = array('Recupero Password');
echo $msg;
?>
<div class="form">
<?php
$form=$this->beginWidget('CActiveForm',
array(
'method'=>'POST',
'action'=> Yii::app()->createUrl('site/recuperopassword'),
'enableClientValidation'=>true,
'clientOptions'=>array(
'validateOnSubmit'=>true,
),
));
?>
<div class="table_box">
<table class="table" style="width: 45%; margin: auto;">
<tbody>
<tr>
<td colspan=2 class="table_info_header table_first_lr"><center>Recupero Password</center></td>
</tr>
<tr>
<td class="table_info_desc">
<?php
echo $form->labelEx($model, 'username');
?>
</td>
<td class="table_info_data">
<?php
echo $form->textField($model, 'username');
echo $form->error($model, 'username', array('class'=>'text-error'));
?>
</td>
</tr>
<tr>
<td class="table_info_desc">
<?php echo $form->labelEx($model, 'email');?>
</td>
<td class="table_info_data">
<?php
echo $form->textField($model, 'email');
echo $form->error($model, 'email', array('class'=>'text-error'));
?>
</td>
</tr>
<tr>
<td class="table_info_desc">
<?php echo $form->labelEx($model, 'Secure Code');?>
<?php $this->widget('CCaptcha', array('buttonLabel'=>'Rigenera Codice'));
?>
</td>
<td class="table_info_data">
<div class="text-info">
Inserisci Secure Code
</div>
<?php echo $form->textField($model, 'captcha');?>
<?php
echo $form->error($model, 'captcha', array('class'=>'text-error'));
?>
</td>
</tr>
<tr class="table_data_footer">
<td colspan=2 class="table_last_lr">
<center><?php echo CHtml::submitButton('Recupero Password', array('class'=>'btn btn-primary'));?>
<?php $this->endWidget();?></center>
</td>
</tr>
</tbody>
</table>
</div>
Despues he creado adentro de la carpeta models una classe que extende la classe CFormModel y que sirve por la validacion del los datos insertados en el formulario, y la he llamada RecuperoPassword:
<?php
class Recuperopassword extends CFormModel{
public $username;
public $email;
public $captcha;
public function rules(){
return array(
array(
'username, email, captcha',
'required',
'message' => 'Campo obbligatorio',
),
array(
'username',
'match',
'pattern' => '/^[a-z0-9_]+$/i',
'message'=>'Inserire solo lettere e numeri',
),
array
(
'email',
'email',
'message'=>'Formato email NON corretto',
),
array(
'captcha',
'captcha',
'message'=>'Secure Code NON corretto',
),
);
}
}
Al final in SiteController he creado la accion para hacer el controle de lo que llega por POST y enviar una email a el usuario con su contrsena.
//RECUPERO PASSWORD FORM
public function actionRecuperopassword()
{
$model=new RecuperoPassword;
$msg='';
if (isset($_POS["Recuperopassword"]))
{
$model->attributes=$_POST['Recuperopassword'];
if(!$model->validate())
{
$msg="<strong class='text-error'>Errore durante l1' invio del Form</strong>";
}
else
{
$connessione=Yii::app()->db;
//verifica se esiste l username
$ricerca="SELECT username, email FROM user WHERE";
$ricerca = "SELECT username, email FROM user WHERE ";
$ricerca .= "username='".$model->username."' AND email='$model->email'";
$risultato = $connessione->createCommand($ricerca);
$righe = $risultato->query();
$esiste = false;
foreach ($righe as $riga)
{
$esiste = true;
}
//se l' username esiste
if ($esiste === true)
{
//Trova la sua password
$ricerca = "SELECT password FROM user WHERE ";
$ricerca .= "username='".$model->username."' AND email='".$model->email."'";
$risultato=$connessione->createCommand($ricerca)->query();
$risultato->bindColumn(1, $password);
while($risultato->read()!==false)
{
$password=$password;
}
$email=new InviaEmail;
$subject="Hai richiesto il recupero della tua password";
$subject.=Yii::app()->name;
$message="Benvenuto" .$model->username. "questa è la tua password";
$message.=$password;
$message.= "<br /><br />";
$message.="<a href='http://localhost/sito/site/login/'>Vai al Sito</a>";
$email->Invia_Email
(
array(Yii::app()->params['adminEmail'], Yii::app()->name),
array($model->email, $model->username),
$subject,
$message
);
$msg="<strong class='text-info'>Ti abbiamo inviato una email con la tua password</strong>";
}
else{
$msg="<strong class='text-error'>Non è stato trovato nessun utente con le credenziali inserite nel form. Contatta l\' amministratore</strong>";
}
}
}
$this->render('recuperopassword', array('model'=>$model, 'msg'=>$msg));
}
Cuando se hace click en el boton para enviar el formulario,no pasa nada.
Solo parece que se hace un refresh de la pagina
Estoy haciendo pruebas en local con xampp y MercuryMail con account gmail.
Si entendo enviar una mail desde MercuryMail todo sale bien.
Si, al reves, entento desde el formulario, no pasa nada.
Alguien puede ayudarme por favor? Gracias!!!