Clase Email
La robusta clase Email de CodeIgniter soporta las siguientes características:
- Múltiple Protocolos: Mail, Sendmail, y SMTP
- Varios Destinatarios
- CC y BCCs
- HTML o email de texto plano
- Adjuntos
- Ajuste de Linea(Word wrapping)
- Prioridades
- BCC Modo Batch, permitiendo grandes listas de correo electrónico que se divida en pequeños lotes BCC.
- Herramientas de depuración de Email
Enviando Correo Electrónico
Enviar un correo electrónico no es simple, pero puedes configurarlo 'al vuelo' o establecer tus preferencias en un archivo de configuración.
Aquí está un ejemplo básico demostrando como debes enviar un email. Nota: Este ejemplo asume que estas enviando un email desde uno de tus controladores.
$this->load->library('email');
$this->email->from('tu_direccion@tu_sitio.com', 'Tu nombre');
$this->email->to('alguien@ejemplo.com');
$this->email->cc('otro@otro-ejemplo.com');
$this->email->bcc('ellos@su-ejemplo.com');
$this->email->subject('Correo de Prueba');
$this->email->message('Probando la clase email');
$this->email->send();
echo $this->email->print_debugger();
Estableciendo Preferencias de Correo Electrónico
Hay 17 diferentes preferencias disponibles para adaptar la forma en la que se envían sus correos electrónicos. Puedes establecer cualquiera de ellos manualmente como se describe aquí, o automáticamente por las preferencias establecidas en tu archivo de configuración, descrita mas abajo:
Las preferencias son establecidas por el paso de valores de un arreglo de preferencias a la funcion initialize(inicialización) de email. Aqui tenemos un ejemplo de como debes establecer algunas preferencias:
$config['protocol'] = 'sendmail';
$config['mailpath'] = '/usr/sbin/sendmail';
$config['charset'] = 'iso-8859-1';
$config['wordwrap'] = TRUE;
$this->email->initialize($config);
Nota: La mayoría de las preferencias tienen un valor por defecto que será usado si no los estableces
Estableciendo preferencias de Email (Correo Electrónico) en un archivo de configuración
Si prefieres no establecer preferencias usando el método anterior, puedes ubicarlos en un archivo de configuración. Simplemente debes crear un nuevo archivo llamado email.php, agrega el arreglo $config en ese archivo. Luego guárdalo en config/email.php y el sera usado automáticamente. Tu NO necesitas usar la función $this->email->initialize() si guardas las preferencias en un archivo de configuración.
Email Preferences
Lo que sigue es una lista de todas las preferencias que pueden ser establecidas cuando se envia un e-mail.
| Preferencia | Valor por defecto | Opciones | Descripción |
|---|---|---|---|
| useragent | CodeIgniter | None | El "user agent". |
| protocol | mail, sendmail, or smtp | El protocolo en envio de email. | |
| mailpath | /usr/sbin/sendmail | None | La ruta al Sendmail. |
| smtp_host | No Default | None | Dirección del servidor SMTP. |
| smtp_user | No Default | None | Usuario SMTP. |
| smtp_pass | No Default | None | Clave SMTP. |
| smtp_port | 25 | None | Puerto SMTP. |
| smtp_timeout | 5 | None | SMTP Timeout (en segundos). |
| wordwrap | TRUE | TRUE or FALSE (boolean) | Activar ajuste de linea. |
| wrapchars | 76 | Cantidad de caracteres para ajustar. | |
| mailtype | text | text or html | Tipo de correo. Si envias un correo HTML debes enviarla como una pagina web completa. Asegurese de que no tiene links relativos o rutas de imagenes relativas, de otra forma no funcionaran. |
| charset | utf-8 | Juego de Caracteres(utf-8, iso-8859-1, etc.). | |
| validate | FALSE | TRUE or FALSE (boolean) | Si se validara la direccion del correo. |
| priority | 3 | 1, 2, 3, 4, 5 | Prioridad del email. 1 = Alta. 5 = Baja. 3 = Normal. |
| newline | \n | "\r\n" or "\n" | Caracter de nueva linea. (Usa "\r\n" para cumplir con la RFC 822). |
| bcc_batch_mode | FALSE | TRUE or FALSE (boolean) | Activa el Modo Batch BCC. |
| bcc_batch_size | 200 | None | Numero de emails en cada BCC batch. |
Referencia de la función email
$this->email->from()
Establece la dirección de email y el nombre de la persona que envía el email:
$this->email->from('tu@tu-sitio.com', 'Tu Nombre');
$this->email->reply_to()
Establece la direccion de respuesta. Si la información no es proveida, se usara de la funcion "from". Ejemplo:
$this->email->reply_to('tu@tu-sitio.com', 'Tu Nombre');
$this->email->to()
Establece la(s) direccion(es) de email del destinatario(s). Puede ser una direccion simple, una lista separada por comas o un arreglo:
$this->email->to('alguien@ejemplo.com');
$this->email->to('uno@ejemplo.com, dos@ejemplo.com, tres@ejemplo.com');
$list = array('uno@ejemplo.com', 'dos@ejemplo.com', 'tres@ejemplo.com');
$this->email->to($list);
$this->email->cc()
Estable las direcciones CC (con copia). Igual al "to", puede ser una dirección simple, o una lista separada por comas, o un arreglo.
$this->email->bcc()
Establece las direcciones BCC (con copia oculta). Es igual a la forma "to", puede ser una direccion simple, una lista delimitada por comas, o un array.
$this->email->subject()
Establece el asunto del email:
$this->email->subject('Este es el asunto');
$this->email->message()
Establece el cuerpo del mensaje:
$this->email->message('Este es mi mensaje');
$this->email->set_alt_message()
Establece un cuerpo de mensaje alternativo:
$this->email->set_alt_message('Este es el mensaje alternativo');
Este es una cadena de mensaje opcional que puede ser usado si envias un email con formato HTML. El te permite especificar un mensaje alternativo sin formato HTML el cual es adherido a la cadena de la cabecera. Para la gente que no acepta email con formato HTML. Si no estableces un mensaje alternativo, CodeIgniter extraera el mensaje de tu email HTML y quitara las etiquetas.
$this->email->clear()
Inicializa todas las variables de email a un estado vacio. Esta función esta hecha para ser usada en caso de que se use la funcion enviar email en un ciclo repetitivo (loop), permitiendo que los datos sean restablecidos entre los ciclos.
foreach ($lista as $nombre => $direccion)
{
$this->email->clear();
$this->email->to($direccion);
$this->email->from('tu@tu-sitio.com');
$this->email->subject('Aqui tu informacion '.$nombre);
$this->email->message('Hola '.$nombre.' Aqui esta la informacion que solicitaste.');
$this->email->send();
}
Si estableces el parametro a TRUE cualquier adjunto sera limpiado también:
$this->email->clear(TRUE);
$this->email->send()
La función de envío de emails. Retorna el booleano TRUE o FALSE basado en el exito o el fracaso, permitiendo su uso condicionalmente:
if ( ! $this->email->send())
{
// Generar error
}
$this->email->attach()
Te permite enviar un adjunto. Coloque el path/nombre en el primer parametro. Nota: Use un path al archivo, no una URL. Para multiples adjuntos use la función varias veces. Por ejemplo:
$this->email->attach('/path/a/photo1.jpg');
$this->email->attach('/path/a/photo2.jpg');
$this->email->attach('/path/a/photo3.jpg');
$this->email->send();
$this->email->print_debugger()
Retorna una cadena conteniendo cualquier mensaje del servidor, la cabecera del email, y el mensaje. Muy util para debugging.
Sobre-escribiendo el ajuste de palabras
Si tienes el ajuste de palabras (word wrapping) activado (recomendado para cumplir con la RFC 822) y tienes un enlace muy largo en tu email, este puede ser ajustado tambien, causando que se vuelva in-clickeable por la persona que lo reciba. CodeIgniter te permite manualmente sobre-escribir el (word wrapping) ajuste de palabra en una parte de tu mensaje como este:
El texto de tu email que
sera ajustado normalmente.
{unwrap}http://www.ejemplo.com/un_largo_enlace_que_deberia_no_ser_ajustado.html{/unwrap}
Mas texto que luego deberia
ser ajustado normalmente.
Ubique el item que quieres que no sea ajustado entre :{unwrap} {/unwrap}