DesarrolloLibre

Desarrollo Web, Android, juegos y mucho más

Categorias
15-05-2017

En esta entrada veremos cómo enviar correos con 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 de impresión muy útil para detectar posibles errores en configuración y 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.

Envío de correo con configuración en CodeIgniter

Esta sería el formato más adecuado para enviar correos con CodeIgniter, 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; puedes consultar la lista completa en el siguiente enlace: CodeIgniter Email Class

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.

Envío debugging

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.


Publicidad

Give me for a beer!

Algunos recursos que te pueden interesar

API REST en CodeIgniter

API REST en CodeIgniter

Algunos artículos que te pueden interesar

¿Cómo crear una API REST con CodeIgniter?

¿Cómo crear una API REST con CodeIgniter?

La API REST es una librería de funciones que se accede mediante HTTP y puede ser integrado con CodeIgniter mediante librerías PHP.

Andrés Cruz 20-06-2016

Login Social en Twitter con PHP-CodeIgniter y la Twitteroauth

Login Social en Twitter con PHP-CodeIgniter y la Twitteroauth

Andrés Cruz 23-02-2017

¿Cómo redimensionar imágenes con CodeIgniter?

¿Cómo redimensionar imágenes con CodeIgniter?

En este artículo veremos cómo redimensionar imágenes con Codeigniter.

Andrés Cruz 21-05-2014