22 09 | 2011

Envoi de mail via php et esmtp/ssmtp

Rédigé par Sorrodje

Classé dans : Informatique, Mémos techniques

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"




  1. Serveur autohébergé : envoi de mail via php/esmtp/FAI



  2. 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=
    
    # 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.

  3. Serveur VPS GANDI : envoi de mail via php/ssmtp et le mail associé à un nom de domaine



  4. 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=
    
    # 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=
    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::mailhub.your.domain[:port]
    # where [:port] is an optional port number that defaults to 25.
    root::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 :
Mots clés : esmtp, ssmtp, Debian, mail, php, php.ini

1 commentaire

lundi 10 octobre 2011 à 12:36 hotel luxueux à paris a dit : #1

Salut,

Merci pour votre article, j’apprécie votre style. On en apprend un peu plus chaque jour! Bonne continuation.

Ludivine

Écrire un commentaire

Quelle est la deuxième lettre du mot qrtcna ? : 

Archives

Contrat Creative Commons
Ce(tte) oeuvre est mise à disposition selon les termes de la Licence Creative Commons Paternité - Partage à l'Identique 2.0 France
.