Email

Cómo mejorar el envío de emails en los sitios web de WordPress

¿Hay alguna forma mejor de enviar emails mediante WordPress? Descubre por qué el método predeterminado podría causar problemas de entregabilidad y del servidor. Además, aprende a utilizar una alternativa viable de código abierto.
Imagen para Cómo mejorar el envío de emails en los sitios web de WordPress

Si estás utilizando la función predeterminada mail() de PHP para enviar emails mediante WordPress, podrías estar sufriendo problemas de entregabilidad o del servidor, especialmente al realizar envíos de gran volumen. Por suerte, existe una forma más fiable de hacerlo. Con las soluciones adecuadas, puedes utilizar en su lugar servidores de protocolo simple de transferencia de correo (SMTP).

Para toda su comunicación por email, WordPress tiene una función especial llamada wp_mail() que, en un entorno predeterminado, utiliza phpMailer , una biblioteca de código abierto, para elaborar el email, configurar los encabezados adecuados, gestionar las versiones en HTML y texto sin formato y, a continuación, poner el email en cola para su entrega. A nivel interno, phpMailer utiliza por defecto la función integrada de PHP llamada mail().

En la mayoría de los sistemas, la función mail() de PHP simplemente llama al ejecutable que se haya configurado en la directiva de configuración sendmail_path. Este programa lee la entrada estándar para los encabezados, el cuerpo del email, los adjuntos, etc., y realiza varias comprobaciones. Por ejemplo, comprueba que la dirección del destinatario sea válida.

Si todo está en orden, dependiendo de la configuración del sistema, este programa suele enviar el email a través de un servidor SMTP local o lo pone en una cola para que el servidor SMTP local lo procese más tarde.

Desgraciadamente, este método no es el mejor para la entregabilidad del email ni para los envíos de gran volumen.

El problema de cómo envía emails WordPress

WordPress-logotype-standard

Poner el email en cola para el servidor SMTP local es bastante eficiente, ya que la función mail() de PHP puede responder de inmediato, sin tener que esperar a que el mensaje se envíe de verdad. 

Sin embargo, el propio servidor SMTP local puede convertirse rápidamente en un cuello de botella. Esto se debe a que puede tener que comunicarse con cientos de agentes de transferencia de correo (MTA) de terceros y hacer un seguimiento de cada email, reintentar el envío en caso de fallo, etc. Esto puede suponer mucho trabajo para un servidor que no ha sido diseñado para ser un servidor de emails.

Y esa es solo una parte del problema. El segundo y principal problema es la entregabilidad. Te darás cuenta de que gran parte del email enviado directamente desde servidores web suele acabar en la carpeta de spam, debido a una configuración incorrecta o incompleta de los protocolos de autenticación de emails (SPF, DKIM, etc.), que pueden ser difíciles de configurar. La reputación de la dirección IP del servidor web también desempeñará un rol muy importante en la entregabilidad.

Y en entornos de alojamiento compartido es aún más complicado, porque (por lo general) solo tienes un servidor SMTP, pero múltiples dominios, direcciones de remitente y firmas. Esto es realmente difícil de configurar bien, y todavía más de mantener limpio para evitar abusos.

Por eso la mayoría de los proveedores de alojamiento, en especial los de servicios de alojamiento gestionado de WordPress, limitan la velocidad y filtran todo el email saliente. Esto no resulta muy útil, sobre todo en el comercio electrónico, donde los emails son más frecuentes y esenciales para el éxito: carritos abandonados, listas de seguimiento, ofertas especiales, etc.

La mayoría de plataformas de alojamiento recomiendan utilizar un servicio de email transaccional de terceros, como Mailgun, para resolver todos estos problemas.

Las ventajas de un servicio de email transaccional

Mailgun y otros servicios de email transaccional se encargarán de entregar el email de la forma más rápida y eficiente posible. Configurarán los encabezados de email, firmas, etc. adecuados, y te asesorarán sobre cómo establecer los registros DNS correctos para tus dominios, lo que aumenta las probabilidades de que tus mensajes lleguen a las bandejas de entrada de los destinatarios.

Mailgun también ofrece un montón de funciones adicionales, como validación de emails, comprobaciones de reputación, registros, analíticas, test A/B y mucho más.

Lo único que le queda por hacer a la persona propietaria del sitio web es hacer que el mensaje pase de su aplicación de WordPress a la cola de Mailgun. Hay múltiples formas de hacerlo.

Cómo configurar Mailgun por SMTP con filtros de WordPress

blog_post_default_image

La mayoría de profesionales del desarrollo en WordPress conocen el concepto de acciones y filtros de WordPress, por lo que crear un pequeño plugin personalizado de uso obligatorio sería la forma más ágil y rápida de empezar a utilizar Mailgun:

                                

                                    add_action( 'phpmailer_init', function( $m ) {rnrnt$m->Host = 'smtp.mailgun.org';rnrnt$m->Port = 587;rnrnt$m->Username = 'postmaster@yourdomain.org';rnrnt$m->Password = 'your secret password';rnrnt$m->isSMTP();rnrnt$m->SMTPAuth = true;rnrnt$m->SMTPSecure = 'tls';rnrn} );rn
                                
                            

Esto crea una función vinculada a la acción phpmailer_init en WordPress, que configura la biblioteca phpMailer para enviar emails utilizando un servidor SMTP externo. El nombre de usuario y la contraseña se pueden obtener (o restablecer) en tu panel de control de Mailgun.

Una vez activo, este fragmento de código evitará que phpMailer utilice la función mail() de PHP y, en su lugar, enrutará todo el email saliente a los servidores SMTP de Mailgun. Puedes verificarlo si te envías un email de recuperación de contraseña, por ejemplo, y revisas la sección de registros en tu panel de control de Mailgun.

mailgun-dashboard-screenshot

Cómo usar un plugin SMTP para WordPress

Escribir tu propio pequeño plugin no siempre es una buena opción, especialmente si no conoces bien el lenguaje de programación PHP o cómo funcionan las acciones y filtros de WordPress. La alternativa es utilizar un plugin ya creado.

                                

                                    rnadd_action( 'phpmailer_init', function( $m ) {rnrnt$m->Host = 'smtp.mailgun.org';rnrnt$m->Port = 587;rnrnt$m->Username = 'postmaster@yourdomain.org';rnrnt$m->Password = 'your secret password';rnrnt$m->isSMTP();rnrnt$m->SMTPAuth = true;rnrnt$m->SMTPSecure = 'tls';rnrn} );rn
                                
                            

El plugin de Mailgun es una excelente opción que, además de realizar envíos por SMTP, también permite enviar mensajes salientes mediante la API HTTP de Mailgun. Esto resulta especialmente útil en entornos de alojamiento compartido donde se bloquea cualquier comunicación SMTP saliente para evitar abusos.

Las credenciales de la API también se encuentran en tu panel de control de Mailgun.

También hay otras opciones de plugins SMTP , que pueden resultar útiles si quieres realizar tus envíos a través de un servidor SMTP de terceros que no sea Mailgun.

Consideraciones de rendimiento y alternativas

Algo que debes tener en cuenta es que, al usar estos plugins o fragmentos para que WordPress entregue el email a un servicio SMTP de terceros, estás comprometiendo el rendimiento de la aplicación.

En lugar de simplemente pasar algo de texto al ejecutable del sistema local sendmail, estos plugins obligan a WordPress a hacer mucho más trabajo. Esto incluye abrir una nueva conexión, realizar un protocolo de enlace TLS y llevar a cabo la autenticación mediante SMTP con un servicio externo de terceros. En el caso de los envíos de gran volumen, es posible que esto ni siquiera sea una opción, tan solo por el factor de la latencia.

Hay una descripción muy detallada sobre estos problemas de rendimiento en el artículo wp_mail() no está roto, donde utilizamos el profiler de Sail para WordPress para medir el tiempo necesario para enviar 20 emails. Los plugins SMTP funcionaron hasta 90 veces más lento que el método sendmail predeterminado.

La mejor alternativa es usar una combinación tanto de cola local como de un servicio de email transaccional. Esto se puede hacer utilizando un MTA local, como Postfix, en un modo de retransmisión SMTP, en el que actuará como un servidor SMTP local. Pero todo lo que reciba se retransmitirá directamente al servicio de terceros, como Mailgun.

Esto garantiza que WordPress no tenga que hacer el trabajo pesado en lo que respecta al envío de emails y también mejora la entregabilidad del email al enviarlo a través de Mailgun.

Ten en cuenta que este método requiere tener privilegios a nivel de superusuario para instalar y configurar este software en tu servidor. Por tanto, da un poco más de trabajo que un simple plugin de WordPress. Sin embargo, si utilizas Sail para implementar y gestionar WordPress en DigitalOcean, entonces podrás tener esta misma configuración en un único blueprint:

                                

                                    rnsail blueprint mailgun.yamlrn
                                
                            

Este blueprint instalará y configurará una instancia de Postfix en tu servidor, para retransmitir emails a los servidores SMTP de Mailgun. Se te pedirá el nombre de usuario y la contraseña SMTP, que puedes obtener o restablecer desde tu panel de control de Mailgun.

Si no utilizas Sail y prefieres hacer las cosas manualmente, aquí tienes una excelente guía sobre cómo configurar una retransmisión local con Postfix en Ubuntu Linux.

Elige una forma fiable de enviar emails con WordPress

Para muchas empresas, el email es una pieza fundamental del negocio. Es necesario disponer de un método de confianza para enviar mensajes, en especial emails transaccionales. Si eres un remitente de gran volumen, el equipo de desarrollo debería considerar soluciones de email para WordPress distintas a la predeterminada.

Una de las grandes ventajas de usar soluciones de código abierto como WordPress es que los equipos de desarrollo tienen acceso a todo tipo de recursos, entre los que se incluyen plugins y soluciones gratuitas. Combinar Mailgun con Sail CLI es un excelente ejemplo de cómo los equipos de desarrollo pueden escalar aplicaciones de WordPress e implementar una forma mejor de enviar emails a través de la plataforma.

Konstantin Kovshenin colabora en el núcleo de WordPress, imparte conferencias, desarrolla plugins y es especialista en rendimiento, escalabilidad y seguridad de WordPress.