Ver como enviar un email con codeIgniter
Empecemos por cargar las librerías que necesitaremos para enviar el correo y validar los formularios, además nos ayudaremos con la librería Table; verificamos que todas las librerias y helpers que necesitamos esten cargadas en en el método constructor del controlador products.php
function __construct() {
parent::__Construct(); $this ->load->model('Products_Model');
$this->load->library(array('pagination', 'cart', 'form_validation','email', 'table'));
$this->load->helper('text');
}
ahora añadimos el último método que va a tener el controlador products.php Método checkout
unction checkout(){enseguida necesitamos crear 2 vistas, una la vamos a llamar checkout.php, la guardamos en cart/application/views/; aquí es donde crearemos el formulario para que el cliente pueda enviar sus datos con el pedido. Código de checkout.php
$data['title'] = 'Solicitar Pedido';
$this->form_validation->set_rules('name', 'Nombre', 'required');
$this->form_validation->set_rules('phone', 'Celular', 'required|numeric');
$this->form_validation->set_rules('address', 'Ciudad y dirección', 'required');
$this->form_validation->set_rules('email', 'Email', 'required|valid_email');
$this->form_validation->set_message('required', 'el campo %s es requerido');
$this->form_validation->set_message('valid_email', 'El email no es válido');
$this -> form_validation -> set_error_delimiters('<ul><li>', '</li></ul>');
if ($this->form_validation->run() == FALSE)
{
$this->load->view('front/header', $data);
$this->load->view('front/checkout');
$this->load->view('front/footer');
}else{
$name = $this->input->post('name');
$mobil = $this->input->post('phone');
$email = $this->input->post('email');
if($cart=$this->cart->contents()){
$this->table->set_heading('Portatil', 'Detalle','Cantidad','Precio', 'Total'); // la tabla que irá en el correo
foreach($cart as $item){
$selected = '';
if ($this->cart->has_options($item['rowid'])) {
foreach ($this->cart->product_options($item['rowid']) as $option => $value) {
$selected = $option . ": <em>" . $value . "</em>";
}
}
$price = ($item['price']*$item['qty']);
$this->table->add_row($item['name'], $selected, $item['qty'], $price);
} // fin del foreach
$this->table->add_row('Total', '', '', '', $this->cart->format_number($this->cart->total()));
$message = 'Señor(a): '.$name.br(1).'Celular: '.$mobil.br(1).'Email: '.$email.br(2).'Detalles del pedido';
$pedido = $message.$this->table->generate(); // concatenamos el mensaje con la tabla que contiene el pedido
$config = array('protocol'=>'smtp',
'smtp_host'=>'ssl://smtp.googlemail.com',
'smtp_user'=>'mi-correo@gmail.com', // colocamos nuestra propia cuenta de Gmail
'smtp_pass'=>'mi-password', // contraseña de la cuenta Gmail
'smtp_port'=>'465',
'smtp_timeout'=>'6',
'mailtype'=>'html',
);
$this->email->initialize($config);
// Datos para enviar el correo
$this->email->from('admin-tienda@gmail.com', 'Tienda virtual');
$this->email->to($email);
$this->email->subject('Pedido de Computador(es) Portatil(es)');
$this->email->message($pedido);
$this->email->send(); // envia el correo
$data['title']='Detalles del Pedido';
$data['pedido']=$pedido;
// echo $this->email->print_debugger(); exit;
$this->load->view('front/header', $data);
$this->load->view('front/success');
$this->load->view('front/footer');
}
} // fin del else
} // fin del método
<?php if($this->cart->contents()){ // el formulario se puede ver solo si existe el carrito?>La otra vista la llamamos success.php, también la gurdamos en cart/application/views/; en esta vista es donde se informa que se ha enviado el pedido satisfactoriamente. Código de la vista success.php
<?=heading($title, 2).'Por favor llene el formulario que muy pronto le contactaremos para enviar su pedido.';?>
<?php if(validation_errors()): ?>
<div id="error"><?=validation_errors();?></div>
<?php endif ?>
<?php $attributes = array('id' => 'form_checkout'); ?>
<div id="checkout">
<?=form_open('products/checkout', $attributes);
$name = array('name'=>'name', 'id'=>'name','placeholder'=>'Nombre y apellidos','value'=>set_value('name'), 'size'=> '35',);
$phone = array('name'=>'phone', 'id'=>'phone','placeholder'=>'Teléfono o celular','value'=>set_value('phone'), 'size'=> '35',);
$address = array('name'=>'address','id'=>'address','placeholder'=>'Ciudad y dirección','value'=>set_value('address'), 'size'=> '48',);
$email = array('name'=>'email', 'id'=>'email','placeholder'=>'Correo electronico', 'value'=>set_value('email'), 'size'=> '48',);
?>
<div><?=form_label('Nombre');?></div>
<div><?=form_input($name);?></div>
<div><?=form_label('Celular');?></div>
<div><?=form_input($phone);?></div>
<div><?=form_label('Ciudad y direccción');?></div>
<div><?=form_input($address);?></div>
<div><?=form_label('Email');?></div>
<div><?=form_input($email);?></div>
<div id='button'>
<?=form_submit('submit', 'Enviar');?>
</div>
<?=form_close();?>
</div>
<?php }
else{
redirect('products');
}
?>
Por últimos vamos a cart/assets/template/ añadimos unos estilos a style.css
<?=heading($title, 3).'Hemos enviado el pedido a su email; gracias por la solicitud, pronto le contactaremos.'.br(2);
echo $pedido
?>
/****************************/
#checkout{
width:500px;
margin: 3em auto;
}
#form_checkout{
border: 1px solid #E5E5E5;
box-shadow: 0 2px 3px #C8C8C8;
border-radius: 11px;
margin-top: 20px;
padding: 16px;
width: 420px;
}
#form_checkout input, label {
padding: 3px;
}
#button{
margin-top: 3px;
}
#error{
border: 1px solid #bf0100;
background-color: #FFEBE8;
margin: 5px 30px 10px 30px;
}
#error p{
color: #bf0100;
margin-left:30px;
}
Descargar archivos