WordPress para el Desarrollo de Aplicaciones Web: Correo Electrónico
() translation by (you can also view the original English article)
Uno de los componentes principales de toda aplicación web es su capacidad para enviar correo electrónico.
Ahora esto no significa que cada aplicación web se convierta fundamentalmente en un cliente de correo (aunque hay gente que verdaderamente crear sus propios clientes de correo).
Por el contrario, me estoy refiriendo a aplicaciones que normalmente envían mensajes de correo electrónico cuando un usuario se suscribe, modifica su contraseña, para notificar algún cambio en el sistema, o - más en generalmente - siempre que ocurra cualquier cosa de la que los propietarios de un sitio deseen notificar a sus usuarios.
Hasta ahora en esta serie, hemos visto los siguientes temas:
- Gestión de usuarios
- Permisos
- Gestión de Sesiones
El último artículo fue sin duda uno de los más complicados que vimos; sin embargo, es necesario para aquellos de vosotros que busquéis agregar una funcionalidad más avanzada vuestros proyectos.
Dicho esto, nos daremos un descanso respecto a algunos de los tópicos más complicados y veremos lo que WordPress nos puede ofrecer en lo relativo al envío de correos electrónicos.
Comprender el Correo Electrónico
Antes de profundizar en lo que ofrece la API de WordPress en la gestión de los envíos de mensajes de correo electrónico, personalización de los mensajes de email y similares, es importante entender un par de cosas sobre el correo electrónico.
Es decir, es importante comprender los componentes que intervienen en la creación de un correo electrónico real, después de todo, se trata de algo más que una dirección, un asunto y el contenido.
Hay algunos matices técnicos que vale la pena entender antes de construir nuestros propios correos electrónicos personalizados.
Cabeceras
Dicho brevemente, los encabezados de un correo electrónico contienen un conjunto mínimo de información entre la que se incluye: el remitente o quién lo envía, y las direcciones a las que se envía el correo electrónico, los destinatarios.
Generalmente, es muy probable que encuentres más información incluida en los encabezados de muchos mensajes de email. Por ejemplo, esta información puede incluir una fecha para saber cuando se realizó el envío del correo electrónico.
Cuando hablamos de WordPress en concreto, el remitente especificado en el encabezado del email se define siempre como el remitente predeterminado en los ajustes de WordPress, a menos que modifiques el ajuste.
Por ejemplo, si quieres establecer una dirección de respuesta como por ejemplo, "donotreply@domain.com", tendrás que especificarlo explicitamente.
Además, suele ser buena idea trabajar con encabezados de correo electrónico en forma de arrays para así construir, especificar y enviar con facilidad a las direcciones, direcciones de copia y destinatarios de copia oculta.
Tipo MIME
En cuanto al formato que siguen los emails, es probable que te encuentres con dos tipos:
- Texto "plano" o texto sin formato
- HTML
Estás acostumbrado a ver HTML en la mayoría de los clientes modernos de correo; sin embargo, si tienes un cliente más simplista, configurado para mostrar sólo texto sin formato, o lees tus emails en un móvil antiguo, leerás el contenido en texto sin formato.
WordPress permite el envío de mensajes de email en texto sin formato o creados mediante HTML.
Cuando veamos un ejemplo de cómo enviar mediante programación un correo electrónico, echaremos un vistazo exactamente a cómo hacerlo. En resumen, hay un gancho que hace que sea muy fácil, pero esperaremos a verlo en acción hasta que cubramos el resto de las piezas necesarias de un correo electrónico.
Archivos Adjuntos
Como sabéis, los adjuntos son prácticamente cualquier tipo de archivo que hayáis unido a un correo electrónico y enviado posteriormente a un destinatario.
El asunto es que hay algunas normas relativas a los correos electrónicos, aunque, no necesariamente establecidas por el software empleado. Sino por los servidores, los clientes o gestores de correo electrónico y otras reglas diversas que restringen lo que podemos recibir en nuestras bandejas de entrada.
Por ejemplo:
- Algunos clientes no permiten el envío de archivos zip o ejecutables.
- Muchos servicios de correo electrónico tienen un tamaño máximo de archivo permitido para los adjuntos
- Ciertos tipos de correo electrónico pueden estar marcados como spam debido a sus archivos adjuntos (o al contenido de estos)
A pesar de todo, esto es algo que está más allá de nuestro control, sólo necesitamos conocer las limitaciones de a quien estamos enviando nuestros correos electrónicos y asegurarnos de que cumplimos sus normas.
Con ese fin, es muy fácil crear archivos adjuntos para enviarse con los mensajes de email en WordPress.
Aunque es evidente que los adjuntos no son necesarios, puede que darse una situación en la que desees adjuntar un archivo e incluso múltiples archivos. En WordPress, esto puede hacerse con una cadena (string) o un array.
No vamos a ver cómo se hace exactamente ahora, pero lo haremos cuando veamos un ejemplo sobre cómo realizar envíos de correo electrónico programáticamente.
Para, Asunto, y Mensaje
A un nivel muy básico, cada correo electrónico consta de una dirección de correo electrónico "Para", un "Asunto" y un "Cuerpo del Mensaje".
En WordPress, estos son realmente fáciles de establecer, simplemente tienes que proporcionar un string para cada uno y ya lo tienes listo para funcionar.
Por supuesto, si quieres enviar un correo electrónico a varias personas puedes o bien iterar un conjunto de direcciones y enviar un correo electrónico por usuario, o proporcionar un array de destinatarios a la Mail API de WordPress y éste enviará el mensaje a todos aquellos incluidos.
Y recuerda, si quieres especificar una dirección de respuesta diferente reply-to
, lo hemos explicado en la cabecera de este artículo.
Utilizar la API para el Correo Electrónico de WordPress
Así que con todo esto dicho, ya estamos verdaderamente listos para echar un vistazo a la API para el Correo Electrónico de WordPress.
Realmente, toda la funcionalidad está dentro de una función llamada wp_mail
; sin embargo, existen algunos hooks que debemos tener en cuenta si queremos aprovechar al máximo lo que la aplicación nos puede ofrecer.
Los Hooks Necesarios
Concretamente, vamos a usar los siguientes hooks:
-
wp_mail_content_type
nos permite definir el tipo MIME del mensaje enviado -
wp_mail_from
es un filtro que podemos utilizar para definir la dirección del remitente, en lugar de utilizar el array$headers
-
wp_mail_from_name
es un filtro que podemos utilizar para definir la persona que realiza el envío, en lugar de utilizar el array$headers
-
wp_login
es el hook que usaremos para notificar a los usuarios mediante un email que, por ejemplo, acaban de iniciar sesión en el escritorio de WordPress
En pos de la integridad, comparto el código entero aquí abajo y luego lo vemos poco a poco.
El Código Fuente
1 |
<?php
|
2 |
function acme_email_individual( $input ) { |
3 |
|
4 |
/**
|
5 |
* Note: assume that $input has keys for 'email-address'.
|
6 |
*/
|
7 |
|
8 |
// Generate the password
|
9 |
$password = wp_generate_password ( 12, false ); |
10 |
|
11 |
// Email the user that they're profile was created
|
12 |
$message = 'Hey There,'; |
13 |
$message .= '<br /><br />'; |
14 |
$message .= 'Your account has been created. Your login information is below:'; |
15 |
$message .= '<br />'; |
16 |
$message .= '<ul>'; |
17 |
$message .= '<li>Username: ' . $input['email-address'] . '</li>'; |
18 |
$message .= '<li>Password: ' . $password . '</li>'; |
19 |
$message .= '</ul>'; |
20 |
$message .= '<br />'; |
21 |
$message .= 'You can login to the application <a href="' . get_bloginfo( 'siteurl' ) . '">here</a>.'; |
22 |
|
23 |
add_filter( 'wp_mail_content_type', create_function( '', 'return "text/html";' ) ); |
24 |
add_filter( 'wp_mail_from', 'acme_mail_from' ); |
25 |
add_filter( 'wp_mail_from_name', 'acme_mail_from_name' ); |
26 |
wp_mail( $input['email-address'], 'Your Acme Account Has Been Created!', $message, array() ); |
27 |
|
28 |
}
|
29 |
|
30 |
function acme_mail_from( $email ) { |
31 |
// NOTE: replace [at] with @. This was causing problems with the syntax highlighter.
|
32 |
return 'donotreply[at]acme.com'; |
33 |
}
|
34 |
|
35 |
function acme_mail_from_name( $name ) { |
36 |
return 'The Acme Company'; |
37 |
}
|
Si has estado siguiendo este artículo hasta ahora, nada de esto debería sorprenderte demasiado: después de todo, estamos aprovechando los hooks que nos proporciona WordPress, y construyendo cadenas o "strings" que pasamos como argumentos de la función, y después invocamos la función wp_mail
.
Sin embargo, ten en cuenta que estamos pasando un array vacío como argumento de $headers
para este correo. Esto es así porque estamos usando el filtro personalizado "From Name" y otro filtro ,"From Address" y una función enlazada en lugar de un array.
Esta forma no es necesariamente mejor que la alternativa; sin embargo, ha servido para demostrar que existen múltiples maneras de lograr un mismo resultado.
¡Y Ahora, a los Datos!
Así que ésta es otra característica de WordPress que facilita la inclusión de funcionalidades para el correo electrónico en la aplicación web.
De hecho, creo que el modelo de eventos de WordPress hace que la inclusión de funcionalidades de correo electrónico para cualquier escenario imaginable sea ridículamente fácil, si se dispone de un hook, un correo electrónico puede ser enviado.
Dicho esto, es momento de volcar nuestra atención a uno de los aspectos más comunes en el desarrollo de aplicaciones web: la gestión de datos.
En concreto, necesitamos ver cómo se puede guardar información en la base de datos y extraerla de los datos, y cómo hacerlo con seguridad y eficacia.
Empezaremos exactamente con esto en el siguiente artículo.