Sites e aplicações

Configurar o phpList para o envio de e-mails e newsletters

Revisto a 8 min de leitura SMTP entregabilidade

O phpList é uma ferramenta para enviar boletins e e-mails a listas de subscritores. Pode instalá-lo em dois cliques a partir do Softaculous.

Acabado de instalar funciona, mas, com a configuração predefinida, envia com a função mail() do PHP e tudo de uma vez. Isso faz com que os e-mails acabem no spam, sejam rejeitados por outros servidores ou bloqueados pelos nossos sistemas ao verem um volume anormal. Estas três definições evitam-no.

Todas se fazem no ficheiro config/config.php do phpList (dentro da pasta da instalação, normalmente lists/config/config.php). Edite-o a partir do gestor de ficheiros do cPanel. Se uma linha começar por //, está desativada: retire esses caracteres para a ativar. Se o seu config.php não tiver alguma das linhas, adicione-a no fim.

1. Enviar por SMTP autenticado

Enviar com o utilizador e a palavra-passe de uma conta de correio, em vez de com a função mail do PHP, é o primeiro passo para que os seus envios tenham credibilidade.

Procure estas linhas:

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

// 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';

E deixe-as assim:

define('PHPMAILERHOST', 'localhost');
$phpmailer_smtpuser = 'boletines@tudominio.com';
$phpmailer_smtppassword = 'contraseña-del-buzon';
  • PHPMAILERHOST: o servidor de correio. Como o phpList está no mesmo alojamento, coloque localhost.
  • $phpmailer_smtpuser: uma conta de correio do domínio, criada antes em cPanel > Email Accounts.
  • $phpmailer_smtppassword: a palavra-passe dessa conta.

Se enviar através de um fornecedor externo, coloque o servidor dele em PHPMAILERHOST e acrescente a porta e a encriptação com define('PHPMAILERPORT', 587); e define('PHPMAILER_SECURE', 'tls');.

2. Rever o SPF e o DKIM

Estes registos DNS permitem ao servidor que recebe o e-mail verificar que o seu está autorizado a enviar em nome do domínio. Os nossos sistemas configuram-nos por predefinição, mas verifique se estão ativos, sobretudo se os DNS do domínio estiverem fora da Hostsuar.

3. Dividir os envios em lotes

Por segurança, os nossos servidores limitam o número de e-mails que cada domínio pode enviar por hora. O limite predefinido é de 700 e-mails por hora, suficiente para o uso normal (podemos aumentá-lo se for para um uso regular e não para envios em massa). Se o phpList enviar mais de uma vez, os que ultrapassarem o limite falham.

Por isso, é preciso configurar o phpList para que reparta a campanha em lotes por hora até a concluir. Além disso, enviar pouco a pouco melhora a reputação dos seus envios.

Procure estas linhas:

// 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
define('MAILQUEUE_THROTTLE', 0);

E deixe-as assim:

define('MAILQUEUE_BATCH_SIZE', 500);
define('MAILQUEUE_BATCH_PERIOD', 3600);
define('MAILQUEUE_THROTTLE', 0.2);
  • MAILQUEUE_BATCH_SIZE: e-mails por lote. Com 500 deixa margem para o correio normal do domínio e para outras aplicações (formulários do site, a loja…), que contam para o mesmo limite.
  • MAILQUEUE_BATCH_PERIOD: duração de cada período em segundos. Com 3600, é enviado um lote por hora.
  • MAILQUEUE_THROTTLE: pausa em segundos entre um e-mail e o seguinte. Com 0,2, o envio é menos intenso.

Pode ajustar estes valores, desde que o lote mais o restante correio do domínio não ultrapasse o limite por hora.

Processar a fila automaticamente

O phpList só envia enquanto alguém processa a fila. Se o fizer a partir do painel do phpList, terá de deixar a página aberta durante horas. É melhor criar uma tarefa agendada em cPanel > Cron Jobs que a processe a cada poucos minutos, por exemplo a cada 15:

*/15 * * * * php /home/USUARIO/public_html/lists/admin/index.php -p processqueue -c /home/USUARIO/public_html/lists/config/config.php > /dev/null 2>&1

Substitua USUARIO pelo seu utilizador do cPanel e ajuste o caminho se o phpList não estiver em public_html/lists. Para ser executado a partir do cron, o config.php deve ter esta linha ativa (vem assim na configuração de referência do phpList):

$commandline_users = array();

Tem mais detalhes sobre as tarefas agendadas em como configurar cron jobs.

Mantenha a sua lista de contactos limpa

Em listas de alguma dimensão há sempre endereços que devolvem os e-mails: caixas de correio cheias, domínios ou utilizadores que já não existem. Se as devoluções se repetirem, baixam a reputação dos restantes envios e, em grande número, os nossos sistemas de segurança podem bloquear o envio por o considerarem suspeito.

Quando receber uma devolução, veja o erro. Se o endereço não existir, elimine-o da lista. Uma caixa de correio cheia é temporária e pode bastar esperar. Certifique-se também de que a ligação para cancelar a subscrição funciona.

Para grandes volumes, um serviço especializado

O nosso correio foi pensado para o uso de uma empresa, com um fluxo constante. Os envios em massa são outra coisa: grandes quantidades de e-mails em pouco tempo, que exigem vários servidores e IPs para repartir a carga sem perder reputação. Para isso existem serviços especializados que pode usar com qualquer alojamento, por exemplo:

Muitos permitem continuar a usar o phpList e enviar através do seu SMTP: basta colocar os dados deles no passo 1.

Mais informação em problemas e soluções do envio de e-mails em massa.

Também lhe pode ser útil

Algo não bate certo ou mudou? Diga-nos e revemos.