PHPList : installation mailing-lists

De wikiGite

Installation

Charger PHPList

wget http://downloads.sourceforge.net/project/phplist/phplist/2.10.14/phplist-2.10.14.tgz

Décompresser

tar -xvzf phplist-2.10.14.tgz

Copier le sous-répertoire "lists" (sous public_html) dans le futur répertoire DocumentRoot du virtualhost créé pour PHPList

mkdir /var/www/phplist
mv /<chemin vers>/phplist-2.10.14/public_html/lists /var/www/phplist

Créer un virtualhost dans apache (ex. sur Debian : /etc/apache2/sites-enabled/002-phplist)

<VirtualHost 192.168.1.20:80>
 ServerName phplist.domain.ltd
 DocumentRoot /var/www/phplist
</VirtualHost>

Note : il est important de conserver le sous-répertoire "lists" sous DocumentRoot, certaines pages de PHPList y font référence en dur !!!

Editer /var/www/phplist/lists/config/config.php. Modifier les informations MySQL :

# what is your Mysql database server
$database_host = "localhost";
# what is the name of the database we are using
$database_name = "phplistdb";
# who do we log in as?
$database_user = "phplist";
# and what password do we use
$database_password = 'password_mysql';

L'adresse de retour des mails en erreur (ou retours out-of-office)

$message_envelope = 'bounce@domain.tld';

Si ce mail est sur un autre serveur (pas en local en mbox), il faut que PHPList y accède en POP pour récupérer les mails en retour et les traiter

$bounce_protocol = 'pop';
$bounce_mailbox_host = 'mail.domain.tld';
$bounce_mailbox_user = 'bounces';
$bounce_mailbox_password = 'password_bounce';

Vitesse d'envoi : combien de mails par période ? Si MAILQUEUE_BATCH_SIZE=0, les mails sont evoyés aussi vite que possible. Ici, on envoit 1000 mails par heure, avec 1 seconde entre chaque mails :

define("MAILQUEUE_BATCH_SIZE",1000);
define("MAILQUEUE_BATCH_PERIOD",3600);
define('MAILQUEUE_THROTTLE',1);

Ajouter un filtre par domaine (nombre max de mail envoyés à un même domaine par période) pour éviter d'être spammé. Dans l'exemple, envoie 10 mails d'un même domaines toutes les 2 heures.

define('USE_DOMAIN_THROTTLE',1);
define('DOMAIN_BATCH_SIZE',10);
define('DOMAIN_BATCH_PERIOD',120);

Paramétrer le language (voir dans le sous-répertoire "texts"):

$language_module = "french_utf8.inc";

Un peu de sécurité (les autres paramètres sécurité peuvent être laissés par défaut)

$check_for_host = 1;

En laissant "define ("TEST",1);" PHPList n'envoie rien mais affiche ce qu'il aurait du faire. De même en phase de test mettre "define ("VERBOSE",1);" pour qu'il affiche le contenu du mail.

Dans un navigateur aller sur <URL de PHPList>/lists/admin. Si la base est vide, il propose de l'initialiser.

Puis continuer l'installation, en se connectant en admin/phplist, suivre les "tâches restant à faire" à l'URL http://<URL PHPList>/lists/admin/?page=setup.

Il reste à tester tout ça, notamment, vérifier que les "bounce" (les retours en erreurs) sont bien enregistrés, que le mail est désactivé (passé en "non-confirmé" en fait, ce qui fait que PHPList ne lui envoie plus rien) au bout de 5 retours en erreur.

Tips and tricks

Wanadoo/Orange "refuse to talk to me"

Trop sensible, Orange ! Même les réglages par domaine de PHPList ne suffisent pas. En plus ils changent leurs règles tous les 15 jours ! Le mieux est de paramétrer Postfix directement.

Dans /etc/postfix/transport

wanadoo.com slow:
wanadoo.fr slow:
orange.com slow:
orange.fr slow:

puis

postmap /etc/postfix/transport

dans /etc/postfix/master.cf

#==========================================================================
# service type private unpriv chroot wakeup maxproc command + args
# (yes) (yes) (yes) (never) (100)
#==========================================================================
slow unix - - n - 5 smtp -o syslog_name=postfix-slow -o smtp_destination_concurrency_limit=3 -o slow_destination_rate_delay=1

dans /etc/postfix/main.cf

transport_maps = hash:/etc/postfix/transport # Vérifier que cette ligne n'existe pas déjà !
slow_destination_recipient_limit = 20
slow_destination_concurrency_limit = 2

puis relancer Postfix

Passer les barre des 1Mo pour les imports

Les fichiers d'import sont limités à 1Mo par défaut. Il y a 2 choses à modifier :

  • PHP : dans php.ini, au minimum :
max_execution_time = 300
max_input_time = 300
memory_limit = 1024M
post_max_size = 8M
upload_max_filesize = 16M
  • Dans PHPList, admin/import1.php, ~ ligne 49
if (filesize($_FILES["import_file"]['tmp_name']) > 1000000) {

passer 1000000 (=1Mo) à 5000000 (=5Mo)

Enlever le texte "Powered by..."

L'image PHPList est supprimée par config/config.php, ~ligne 260

define ("REGISTER",0);

Pour supprimer aussi la référence texte, éditer admin/connect.php, ~ligne 149. Commenter (par "//") la ligne $PoweredByText = ...

Modifier le comportement de la recherche d'utilisateurs

Sur la page "Utilisateurs", la recherche se fait par défaut sur "tout ce qui contient" la chaîne de caractère passée en paramètre.

Sur de grosses bases, on peut avoir besoin de chercher sur une partie exacte pour limiter le nombre d'adresses, par exemple "exactement égale à", ou "ceux qui commencent par" ou "ceux qui finissent par".

Editer admin/commonlib/users.php, remplacer toutes les occurences de "%%%s%%" par "%s" (au moins en 3 endroits). Maintenant, au lieu chercher sur "%votre chaîne de recherche%", PHPList recherchera exactement "votre chaîne de recherche". Il suffira ensuite d'ajouter à cette chaîne un "%" bien placé pour chercher "ce qui commence par" (% à la fin) ou "ce qui finit par" (% au début).

EDIT : quelle différence entre admin/commonlib/users.php et admin/users.php ?? Les modifications dans ce dernier fichier ne changent rien au comportement de PHPList... A quoi sert-il ?