Enviar correos con Codeigniter

En este articulo vamos a ver como enviar correos con Codeigniter utilizando la librería que incluye el framework, la cual funciona estupendamente bien. Utilizaremos el SMTP de Gmail para enviar el email desde localhost, esto funcionará también si tenemos la web subida a un servidor remoto. Haremos el típico formulario de contacto.

application/controllers/contacto.php

<?php
class contacto extends CI_Controller {
   public function __construct(){
        parent::__construct();
        $this->load->helper('url');
        $this->load->library('session');
    }
	
   public function index(){	
        $this->load->view('contacto_view');
   }
   
   public function enviar(){
      /*
       * Cuando cargamos una librería
       * es similar a hacer en PHP puro esto:
       * require_once("libreria.php");
       * $lib=new Libreria();
       */
       
       //Cargamos la librería email
       $this->load->library('email');
       
       /*
        * Configuramos los parámetros para enviar el email,
        * las siguientes configuraciones es recomendable
        * hacerlas en el fichero email.php dentro del directorio config,
        * en este caso para hacer un ejemplo rápido lo hacemos 
        * en el propio controlador
        */
       
       //Indicamos el protocolo a utilizar
        $config['protocol'] = 'smtp';
        
       //El servidor de correo que utilizaremos
        $config["smtp_host"] = 'smtp.gmail.com';
        
       //Nuestro usuario
        $config["smtp_user"] = 'correo@gmail.com';
        
       //Nuestra contraseña
        $config["smtp_pass"] = 'contraseña';	
        
       //El puerto que utilizará el servidor smtp
        $config["smtp_port"] = '587';
       
       //El juego de caracteres a utilizar
        $config['charset'] = 'utf-8';

       //Permitimos que se puedan cortar palabras
        $config['wordwrap'] = TRUE;
        
       //El email debe ser valido  
       $config['validate'] = true;
      
       
      //Establecemos esta configuración
        $this->email->initialize($config);

      //Ponemos la dirección de correo que enviará el email y un nombre
        $this->email->from('correo@gmail.com', 'Victor Robles');
        
      /*
       * Ponemos el o los destinatarios para los que va el email
       * en este caso al ser un formulario de contacto te lo enviarás a ti
       * mismo
       */
        $this->email->to('correo@gmail.com', 'Víctor Robles');
        
      //Definimos el asunto del mensaje
        $this->email->subject($this->input->post("asunto"));
        
      //Definimos el mensaje a enviar
        $this->email->message(
                "Email: ".$this->input->post("email").
                " Mensaje: ".$this->input->post("mensaje")
                );
        
        //Enviamos el email y si se produce bien o mal que avise con una flasdata
        if($this->email->send()){
            $this->session->set_flashdata('envio', 'Email enviado correctamente');
        }else{
            $this->session->set_flashdata('envio', 'No se a enviado el email');
        }
        
        redirect(base_url("contacto"));
   }	
}

?>

application/views/contacto_view.php

<h2>Contacto</h2>
<form action="<?=base_url("contacto/enviar")?>" method="post">
    Correo electronico: <br/>
    <input type="email" name="email" /><br/>
    Asunto: <br/>
    <input type="text" name="asunto" /><br/>
    Mensaje:<br/>
    <textarea name="mensaje"></textarea><br/>
    <input type="submit" name="submit" value="Enviar"/>
</form>
<?php
if($this->session->flashdata('envio')){
    echo $this->session->flashdata('envio');
}
?>

Más información:
Clase Email Documentación oficial de Codeigniter

Víctor Robles WEB

Autor: Victor

Desarrollador web - Formador online - Blogger

Compartir este post

4 Comentarios

  1. Buenas he realizo el ejemplo desde mi web y me da el siguiente error

    Se encontró el error SMTP siguiente:
    No se puede enviar correo electrónico usando PHP SMTP. Su servidor no está configurado para enviar correo mediante este método.

    Eso quiere decir que donde tengo alojada mi web no puede enviar email? Como puedo resolver esto?

    Muchas gracias

    Responder
    • Puedes utilizar otro protocolo de envió o configurar un servidor SMTP en tu servidor web. Si es un hosting contacta con el servicio técnico que seguro que te ayudan.

      Responder
  2. Me envia el mensaje que no se envio el email ??? que puedo hacer…

    Responder
  3. Buenas, realmente me sirvío de mucha ayuda, sigue así.

    Responder

Poner un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *