Pour mes divers sites et outils web , on peut avoir besoin d'envoyer des mails via php/apache2 , pour cela il faut que le serveur soit équipé pour envoyer des mail et assurer le lien avec apache/php ... on peut utiliser un vrai serveur de mail genre exim ou postfix ou faire en sorte d'utiliser le serveur de mail d'un fournisseur ( par exemple FAI ou gestionnaire de noms de domaine genre GANDI .
En l'occurence ici dans les deux exemples suivant, j'utilise deux outils pour assurer le transfert de mail via les serveurs SMTP de mon FAI ou de Gandi avec esmtp et ssmtp le tout sur deux Debian 6.0 "Squeeze"
Serveur autohébergé : envoi de mail via php/esmtp/FAI
Serveur VPS GANDI : envoi de mail via php/ssmtp et le mail associé à un nom de domaine
Première étape : passe en root puis installer esmtp
#apt-get install esmtp
puis configurer le fichier /etc/esmtprc
#nano /etc/esmtprc
En l'occurence pour une configuration avec le serveur SMTP d'orange , j'obtiens le fichier suivant :
# Config file for ESMTP sendmail # The SMTP host and service (port) hostname=smtp.orange.fr:587 # The user name username=sorrodje@orange.fr # The password password=mot_de_passe_de_sorrodje # Whether to use Starttls #starttls=disabled # The certificate passphrase #certificate_passphrase= # The Mail Delivery Agent mda="/usr/bin/procmail -d %T"
Ensuite on fait en sorte que l'envoi classique via /usr/bin/sendmail renvoie en fait vers /usr/bin/esmtp . Pour cela on fait un lien :
#ln -s /usr/bin/esmtp /usr/bin/sendmail
On configure le fichier php.ini pour l'envoi de mail :
#nano /etc/php5/apache2/php.ini
On cherche les lignes qui vont bien dans ce gros fichier en faisant ctrl+W et en donnant le mot-clef sendmail. On modifie la bonne ligne pour obtenir ceci :
[mail function]
.... ; For Unix only. You may supply arguments as well (default: "sendmail -t -i"). sendmail_path = /usr/bin/sendmail -t -i
Enfin on redémarre apache service apache2 restart pour faire prendre en compte la modification du php.ini puis on teste le bon fonctionnement de l'envoi de mail. Si ça ne fonctionne pas : aller voir dans /var/log/mail.log ce que ça raconte.
A noter qu'Orange n'utilisant pas de cryptage SSL/TLS ça fonctionne sans rien faire d'autre . Pour du SMTP utilisant le cryptage , ça va être un peu plus compliqué ( Pour les emmerdements divers , la doc ESTMP est alors notre amie.
D'ailleurs, dans mon deuxième exemple avec ssmtp , le SMTP Gandi exige le cryptage TLS.
On commence par installer le paquet:
#apt-get install ssmtp
Puis on passe à la configuration :
#nano /etc/ssmtp/ssmtp.conf
Pour obtenir ça pour utiliser le serveur mail GANDI et le mail associé au nom de domaine.
# # Config file for sSMTP sendmail # # The person who gets all mail for userids < 1000 # Make this empty to disable rewriting. root=toto@alter-it.fr # The place where the mail goes. The actual machine name is required no # MX records are consulted. Commonly mailhosts are named mail.domain.com mailhub=mail.gandi.net:587 # Where will the mail seem to come from? #rewriteDomain= # The full hostname hostname=nom_de_serveur # Are users allowed to set their own From: address? # YES - Allow the user to specify their own From: address # NO - Use the system generated From: address FromLineOverride=YES UseSTARTTLS=YES AuthUser=toto@alter-it.fr AuthPass=totopassword
A noter le UseSTARTTLS=Yes , en effet le SMTP Gandi ( contrairement à orange ) utilise le chiffrement TLS ;). j'ai d'abord essayé sans cette directive et ça s'est traduit par un envoi de mail impossible et un message clair dans /var/log/mail.log quand au fait que le serveur nécessistait l'activation de TLS.
Deuxième fichier de conf à modifier:
#nano /etc/ssmtp/revaliases
Pour obtenir ce qui suit :
# sSMTP aliases # # Format: local_account:outgoing_address:mailhub # # Example: root:your_login@your.domain:mailhub.your.domain[:port] # where [:port] is an optional port number that defaults to 25. root:toto@alter-it.org:mail.gandi.net:587
Comme ci dessus il faut aller faire une modification du php.ini pour configurer l'envoi de mail de cette façon:
[mail function]
.... ; For Unix only. You may supply arguments as well (default: "sendmail -t -i"). sendmail_path = /usr/sbin/ssmtp -t
Enfin redémarrer apache :
#service apache2 restart
And "It works" comme diraient les apaches ;-) ... Analyse des problèmes éventuels : /var/log/mail.log
Sources pour mes manips :
1 commentaire
lundi 10 octobre 2011 à 12:36 hotel luxueux à paris a dit : #1