Fecha: 2026-04-19 - San Expedito   Calendario 2026  | Info

Blog Blog

Envío de correos o emails con CodeIgniter, guía rápida


En esta entrada veremos cómo enviar correos con el framework CodeIgniter, CodeIgniter ofrece una gran librería de manera nativa para trabajar con el envío de correo, la misma permite enviar emails simples sin realizar configuraciones sobre el servidor SMTP, realizando configuraciones para poder emplear el servidor SMTP al 100%, e incluso un modo debugging para la impresión de posibles errores en configuración, y envío de correos en general; además permite el envío de correos en formato HTML; hoy veremos en detalle cada uno de los escenarios anteriores.

Por supuesto, para que funcione el envío de correos debe de tener configurado un servidor de correos en su máquina o emplear el de algun hosting como iPage, Godaddy, Hostgator, etc.

Envío de correo simple con CodeIgniter

El envío de correo más sencillo que podemos realizar con CodeIgniter está configurado de la siguiente manera:

public function email() {
	$CI = & get_instance();
	$CI->load->helper('url');
	$CI->load->library('session');
	$CI->config->item('base_url');

	$CI->load->library('email');

	$subject = 'Bienvenido a mi app';

	$msg = 'Mensaje de prueba';

	$CI->email
		->from('barackobama@gmail.com')
		->to($email)
		->subject($subject)
		->message($msg)
		->send();
}

El inconveniente con este método, como podemos apreciar es que podemos colocar lo que queramos para el parámetro de from y es muy posible que los motores de correo etiqueten estos mensajes como SPAM al ser recibidos ya que no están siendo enviados desde la cuanta reflejada en dicho campo from además de que no todos los hosting permiten el envío de correos de tal forma.

Envío de correo con configuración en CodeIgniter

Este sería el formato más adecuado para enviar correos con CodeIgniter, ya que configuramos todo lo necesario para tal fin; para eso definimos una variable config con los siguientes parámetros:

public function email() {

    $config = Array(
        'protocol' => 'smtp',
        'smtp_host' => 'smtp.1and1.com',
        'smtp_port' => 25,
        'smtp_user' => 'barackobama@misitio.com',
        'smtp_pass' => '12345',
        'charset' => 'utf-8',
        'priority' => 1
    );

    $CI = & get_instance();
    $CI->load->helper('url');
    $CI->load->library('session');
    $CI->config->item('base_url');

    $CI->load->library('email');

    $CI->email->initialize($config);

    $subject = 'Bienvenido a mi app';

    $msg = 'Mensaje de prueba';

    $CI->email
            ->from('barackobama@gmail.com')
            ->to($email)
            ->subject($subject)
            ->message($msg)
            ->send();
}

En la variable config especificamos elementos como el protocolo, el nombre del servidor SMTP, el puerto del servidor SMTP, el nombre de la cuenta, la contraseña de la cuenta, la codificación, la prioridad, etc.

Es importante notar que si estamos trabajando con un servidor web, hay parámetros que nos deben dar ellos que seguramente estan en algun apartado del CPanel; por ejemplo el de smtp_host en donde indicamos el servidor SMTP que vamos a emplear, también otros datos como smtp_port que debes de indicar el puerto.

smtp_user y smtp_pass user debes de especificar la dirección de email y password que vas a utilizar, la prioridad priority es simplemente una bandera, que por ejemplo Google toma en cuenta al momento de posicionar el correo en alguno de sus paneles:

gmail panel email

Por último las funciones message y subject en donde especificamos el asunto y cuerpo del contenido; si quieres que el contenido a enviar sea HTML debes de realizar los siguientes cambios:

$msg =  $CI->load->view('email/recuperar_cuenta', $data, TRUE);

***

$CI->email->from('barackobama@gmail.com')
		->to($email)
		->subject($subject)
		->message($msg)
		->set_mailtype('html')
		->send();

De esta forma, con el tercer parámetro establecido en TRUE le estamos diciendo a CodeIgniter que devuelva el contenido de la vista y la guardamos en una variable, luego el método set_mailtype lo establecemos como HTML.

Como puedes ver, estos parámetros indicados en la variable config depende en gran medida de la configuración que emplee su hosting y deben preguntar por los mismos a su hosting en caso de no estar en su panel.

Envío de correos con formato HTML en CodeIgniter

Hasta ahora se ha mostrado cómo enviar correos sin formato, es decir puro texto, veamos cómo enviar un correo con formato HTML; para ello:

public function email() {
    $CI = & get_instance();
    $CI->load->helper('url');
    $CI->load->library('session');
    $CI->config->item('base_url');

    $CI->load->library('email');

    $subject = 'Bienvenido a mi app';

    $msg = $CI->load->view('email/vista', $data, true);

    $CI->email
            ->from('barackobama@gmail.com')
            ->to($email)
            ->subject($subject)
            ->message($msg)
            ->set_mailtype('html')
            ->send();
}

$CI->load->view con el parámetro true permite obtener o retornar el código fuente de la vista, la cual establecemos en el parámetro message.

Debugging al momento del envío de los emails

En caso de ocurrir algún error en los parámetros de configuración es muy útil el llamado e impresión de esta función, la misma nos provee de más datos como error en las credenciales del correo, si el servidor existe o no, etc; muy útil al momento de configurar nuestra función de envío de correos:

public function email() {

$config = Array(
'protocol' => 'smtp',
'smtp_host' => 'smtp.1and1.com',
'smtp_port' => 25,
'smtp_user' => 'barackobama@gmail.com',
'smtp_pass' => '12345',
'charset' => 'utf-8',
'wordwrap' => true,
'priority' => 1
);

$CI = & get_instance();
$CI->load->helper('url');
$CI->load->library('session');
$CI->config->item('base_url');

$CI->load->library('email');

$subject = 'Bienvenido a mi app';

$msg = 'Mensaje de prueba';

$CI->email
->from('barackobama@gmail.com')
->to($email)
->subject($subject)
->message($msg)
->send();

echo $CI->email->print_debugger();

}

Atachar archivos en los correos

Por último mostramos cómo podemos atachar múltiples archivos o un archivo (remover el foreach en un email):


$path = realpath('proyectos/archivos/');

foreach ($archivos_proyecto as $archivo_proyecto) {
    var_dump($path . $archivo_proyecto->archivo);
    $CI->email->attach($path . '/' . $archivo_proyecto->archivo);
}

Necesitamos el verdadero path o path completo de los archivos que deseamos adjuntar, y por eso empleamos la función provista por la API de PHP realpath, si el archivo no existe, simplemente no se adjuntará al momento de enviar el email.

Por supuesto puedes combinar entre sí las distintas secciones que vimos anteriormente según sea lo que amerite.

Extra: enviar emails en CodeIgniter con Gmail y Yahoo

El siguiente código muestra como enviar correos con Gmail y/o Yahoo lo cual puede no ser siempre la mejor opción ya que los hosting tienden a bloquear el acceso a estos servicios pero de igual forma les dejo el código:

 //configuracion para gmail

 $config = array(
 'protocol' => 'smtp',
 'smtp_host' => 'ssl://smtp.gmail.com',
 'smtp_port' => 465,
 'smtp_user' => 'mi_correo_gmail@gmail.com',
 'smtp_pass' => 'password',
 'mailtype' => 'html',
 'charset' => 'utf-8',
 'newline' => "\r\n"
 ); 

//configuracion para yahoo
$configYahoo = array(
 'protocol' => 'smtp',
 'smtp_host' => 'smtp.mail.yahoo.com',
 'smtp_port' => 587,
 'smtp_crypto' => 'tls',
 'smtp_user' => 'mi_correo_yahoo@yahoo.com',
 'smtp_pass' => 'password',
 'mailtype' => 'html',
 'charset' => 'utf-8',
 'newline' => "\r\n"
 ); 


Su Comentario:

Deje aquí su comentario acerca de este artículo...


Otros artículos del blog

¿Qué precio tiene hacer el diseño de tu página Web?
¿Cómo crear una API REST con CodeIgniter?
¿Cómo redimensionar imágenes con CodeIgniter?
¿Qué documentos necesitas para solicitar la ayuda como emigrante retornado?
¿Qué es y para qué sirve un archivo robots.txt?
Adapta tu sitio web a la nueva normativa sobre cookies
Atributo download HTML5 para descargar archivos del servidor mediante enlaces
Botón redondeado con CSS
Bucle para recibir todas las variables por POST en PHP
Carga o upload de archivos con CodeIgniter
Columnas múltiples con CSS3
Como evitar la inyección SQL en PHP
Cómo optimizar la cabecera de una página web para SEO: guía avanzada y completa
Cómo optimizar la etiqueta de título para atraer más tráfico de Google
Como puedo abrir puertos en mi router para acceder remotamente a mi ordenador personal
Contador de caracteres con JQuery
Copias de seguridad avanzadas para bases de datos MySQL
Creando fácilmente imágenes de relleno para tus prototipos
Crear un sticky desplegable en la web
Detectar el sistema operativo, navegador y versión del cliente
Diseño y desarrollo web a la medida
Ejecutar script automáticamente con Cron en Linux
El elemento meter HTML5
El filtro Blur (desenfoque) en CSS y alguno de sus posibles usos
El nuevo elemento <picture> de HTML5 para crear imágenes responsive
Elementos fundamentales para trabajar con Codeingniter
Envío de correos o emails con CodeIgniter, guía rápida
Función para extraer la extensión de un archivo con PHP
Guía rápida sobre el elemento br en HTML
Guía rápida sobre el elemento p en HTML
Guía rápida sobre los bordes en CSS
La etiqueta meta viewport en html5
La relación entre el contenido extenso y el convencimiento del usuario
Las fuentes de Google Font para nuestra web y efectos sobre nuestras fuentes
Lo bueno y lo malo del SEO
Los helpers en CodeIgniter para definir nuestras funciones
Mensaje aceptar cookies para cumplir con la Ley General de Protección de Datos (LGPD)
Meta tags de HTML
Múltiples bordes en un contenedor con CSS
Script para automatizar backups de MySQL en servidores Windows
Streams en PHP
Trucos y ejemplos de configuración del archivo htaccess de Apache
Uso de las páginas de error 404 como soporte estratégico de contenidos