Configurar phpList para envío de correos y newsletters

phpList es una potente herramienta para el envío de boletines y correos de forma masiva.

Aunque por defecto y nada más instalarla (la puedes instalar de forma sencilla desde Softaculous) cumplirá su función, el envío de correos masivos es una tarea compleja y delicada, si la configuración de phpList no es correcta, ocasionaría que los emails tengan una baja reputación, sean clasificados como spam, rebotados causa de bloqueos externos o de nuestros propios sistemas al detectar un volumen anormal de emails.

Configuración SMTP

En otros artículos hemos hablado de la importación del uso de autenticación SMTP para el envío de correos frente al uso de la función mail de PHP, por ello el primer paso para dar credibilidad a nuestros envíos es configurar el envío por medio de SMTP.

Para ello vamos a editar el fichero config/config.php que contiene toda la configuración de phpList, localiza las siguientes líneas:

// To use a SMTP server please give your server hostname here, leave it blank to use the standard
// PHP mail() command.
define('PHPMAILERHOST', '');

// in the above you can specify multiple SMTP servers like this:
// 'server1:port1;server2:port2;server3:port3' eg
//define('PHPMAILERHOST','smtp1.mydomain.com:25;smtp2.mydomain.com:2500;smtp3.phplist.com:5123');

// if you want to use smtp authentication when sending the email uncomment the following
// two lines and set the username and password to be the correct ones
//$phpmailer_smtpuser = 'smtpuser';
//$phpmailer_smtppassword = 'smtppassword';

//# you can set this to send out via a different SMTP port
// define('PHPMAILERPORT',25);

Debes editar las siguientes líneas (recuerda habilitar las líneas de código a modificar que tienen delante // eliminando dichos caracteres):

define('PHPMAILERHOST', 'localhost');
$phpmailer_smtpuser = 'correo@tudominio.com';
$phpmailer_smtppassword = 'password';

En PHPMAILERHOST indicamos el servidor de correo, debe ser localhost, para $phpmailer_smtpuser indicamos una cuenta de correo que usaremos para envío, debe estar previamente creada en cPanel y para $phpmailer_smtppassword usaremos el password de dicha cuenta de correo.

Con estos cambios el envío SMTP queda configurado correctamente.

SPF y DKIM

Estos registros permiten dar autenticidad a los envíos, de forma que el servidor receptor pueda comprobar que el servidor emisor tiene permisos para enviar emails en nombre del dominio que conecta, por defecto nuestros sistemas configuran ambos correctamente, no obstante siempre recomendamos revisar que están activos.

Configuración por lotes

Por seguridad todos nuestros sistemas limitan el envío en 1000 emails por hora y dominio, una limitación más que suficiente en la mayoría de los casos (podemos aumentarlo si se demuestra que es para un uso regular y no masivo).

Por este motivo es necesario configurar phpList para que automatice la división de los envíos en lotes, de forma que únicamente envíe un máximo de x correos por hora hasta completar todos los envíos, evitando problemas causados por esta restricción y mejorando también la reputación de los envíos al no producirse todos al mismo tiempo.

Para ello vamos a editar el fichero config/config.php que contiene toda la configuración de phpList, localiza las siguientes líneas:

// define the amount of emails you want to send per period. If 0, batch processing
// is disabled and messages are sent out as fast as possible
define('MAILQUEUE_BATCH_SIZE', 0);

// define the length of one batch processing period, in seconds (3600 is an hour)
define('MAILQUEUE_BATCH_PERIOD', 3600);

// to avoid overloading the server that sends your email, you can add a little delay
// between messages that will spread the load of sending
// you will need to find a good value for your own server
// value is in seconds, and you can use fractions, eg "0.5" is half a second
// (or you can play with the autothrottle below)
define('MAILQUEUE_THROTTLE', 0);

Quedarían de la siguiente forma:

// define the amount of emails you want to send per period. If 0, batch processing
// is disabled and messages are sent out as fast as possible
define('MAILQUEUE_BATCH_SIZE', 800);

// define the length of one batch processing period, in seconds (3600 is an hour)
define('MAILQUEUE_BATCH_PERIOD', 3600);

// to avoid overloading the server that sends your email, you can add a little delay
// between messages that will spread the load of sending
// you will need to find a good value for your own server
// value is in seconds, and you can use fractions, eg "0.5" is half a second
// (or you can play with the autothrottle below)
define('MAILQUEUE_THROTTLE', 0.2);

MAILQUEUE_BATCH_SIZE define el número de correos que se enviará en cada lote, hemos definido 800 emails, MAILQUEUE_BATCH_PERIOD nos indica el periodo en el que se procesará cada lote, definimos 3600 segundos para que se envíe un lote por hora. Finalmente MAILQUEUE_THROTTLE define el tiempo de espera entre cada envío, indicamos 0.2 segundos para reducir la intensidad de la tarea.

Puedes jugar con estos valores siempre que no excedas el máximo por hora establecido en tu dominio

Mantén "limpia" tu lista de contactos

Cuando se dispone de listas de correo de cierto tamaño, es habitual que algunas cuentas reboten los emails enviados, normalmente por tener el buzón lleno, por ya no existir el dominio o el propio usuario y similares, estos errores causan una bajada de reputación en el resto de entregas si son repetitivos y además en un número alto pueden ocasionar el bloqueo por parte de nuestros sistemas de seguridad al considerar la acción sospechosa.

Es por ello que cuando recibas un rebote debes analizar el mensaje de error que lo acompaña para considerar eliminar la cuenta de correo de la lista, evitando que envíos futuros generen nuevos errores.

Servicios especializados

Es importante entender que en ciertos volúmenes se requiere de servicios especializados en el envío masivo.

Nuestros servicios de correo están enfocados a un uso empresarial con flujo constante, pero el envío masivo de emails es un concepto diferente ya que se envían grandes cantidades de correo en cortos intervalos de tiempo, por ello se requiere de técnicas especializadas como implementar múltiples sistemas e IPs que distribuyan la cargan y eviten consideraciones negativas.

Este tipo de características y pautas son implementadas por servicios especializados que podrás usar con independencia del servicio de hosting contratado, entre ellos destacaríamos: