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