75 votes

Comment faire en sorte que mon PHP envoie du courrier ?

J'ai installé Ubuntu 11.04, LAMP en utilisant tasksel.

Je trouve que PHP mail() ne fonctionne pas.

Je suppose que je dois l'activer ou quelque chose comme ça ? Comment dois-je faire ?

65voto

Dima L. Points 1727

Comme nous l'avons déjà noté, postfix serait une surcharge si vous avez juste besoin d'envoyer des courriels à partir de php tout en développant des applications sur votre ordinateur personnel.

J'utilise personnellement le paquet très simple et léger ssmtp. Il utilisera n'importe quel serveur smtp pour envoyer des emails sortants. Installez-le en exécutant :

sudo apt-get install ssmtp

Puis modifier /etc/ssmtp/ssmtp.conf commentez la ligne mailhub existante et ajoutez les lignes suivantes (cet exemple est pour le serveur smtp de gmail) :

mailhub=smtp.gmail.com:587
UseSTARTTLS=YES
AuthUser=<YOUR-EMAIL>@gmail.com
AuthPass=<YOUR-PASSWORD>

(Fournissez votre nom d'utilisateur et votre mot de passe gmail. Bien sûr, vous pouvez utiliser n'importe quel autre serveur SMTP).

Maintenant, assurez-vous que votre php.ini a correctement sendmail_path . Il devrait se lire comme suit :

sendmail_path = /usr/sbin/sendmail -t

( D'après les commentaires de @dima-l et @omar-sabic : Vous n'avez pas besoin de spécifier ssmtp ici parce que l'installation aurait dû créer un lien symbolique pour /usr/sbin/sendmail qui pointe correctement vers ssmtp . Sinon, vous devez spécifier sendmail_path = /usr/sbin/ssmtp -t )

Rechargez apache et votre php devrait être capable d'envoyer des emails sortants maintenant.

50voto

con-f-use Points 17925

Extrait du manuel de messagerie de php :

Exigences

Pour que les fonctions de courrier soient disponibles, PHP nécessite un système de messagerie installé et fonctionnel. Le programme à utiliser est défini par les paramètres de configuration dans le fichier php.ini dans le fichier php.ini.

Cela signifie que vous devez installer une sorte de serveur de messagerie et configurer php pour l'utiliser. Habituellement, ce serveur de messagerie est postfix dans Ubuntu. Cependant - si le côté php que vous codez sera finalement stocké sur le côté d'un service d'hébergement (par exemple xmission), un serveur de messagerie sera très probablement déjà installé là. Dans ce cas, testez simplement votre site en ligne plutôt que localement.

Si vous devez le tester sur votre propre système ou si vous avez l'intention de l'héberger sur votre propre serveur domestique, procédez comme suit :

Installation de Postfix

Installation : postfix Install postfix / sudo apt-get install postfix Au cours du processus, il vous sera demandé dans quel mode vous souhaitez installer postfix. Il y a quatre modes possibles :

  • Internet : Votre propre serveur de messagerie.
  • Satellite : Un fournisseur de courrier externe (par exemple Google) sera utilisé pour envoyer et recevoir du courrier. Le serveur ne recevra pas de courrier.
  • Smarthost : Mélange entre les deux. Le courrier est stocké localement mais envoyé par un fournisseur de courrier externe.
  • Local uniquement : Ça ne vous concerne pas. C'est un serveur de courrier interne au système. Vous ne pouvez envoyer du courrier que d'utilisateur à utilisateur sur le système.

Le reste des options d'installation dépend de votre choix de cette configuration générale.

Vous choisirez très probablement une installation par satellite. Cela signifie que le courrier sera envoyé par un fournisseur externe. En tant que smtp-server (serveur de courrier sortant), vous devrez alors spécifier le smtp de votre fournisseur. Le reste des options est explicite.

Configuration après l'installation

La plupart des serveurs smtp exigent une authentification par mot de passe pour envoyer du courrier. Postfix aura donc besoin de connaître ce mot de passe. Il y a aussi des choses comme le cryptage à considérer (que vous devrez googler). Voici comment configurer postfix en utilisant l'authentification par mot de passe (sasl) :

  • Installer libsasl2-modules Install libsasl2-modules y sasl2-bin Install sasl2-bin en cliquant sur les icônes du centre logiciel ou à partir du terminal en utilisant :

    sudo apt-get install libsasl2-2 libsasl2-modules sasl2-bin
  • Activez sasl-auth en ajoutant ces lignes à /etc/postfix/main.cf

     # add to /etc/postfix/main.cf
     smtp_sasl_auth_enable = yes
     smtp_sasl_security_options = noplaintext noanonymous
     smtp_sasl_password_maps = hash:/etc/postfix/sasl_password
  • Créer un fichier /etc/postfix/sasl_password avec une ligne comme :

     smtp.gmail.com USERNAME@gmail.com:USERPASSWORD

    Remplacez le mot de passe, le nom d'utilisateur et l'adresse smtp réels.

  • Mise à jour de postfix :

     sudo chmod 600 /etc/postfix/sasl_password # for safety of your smtp password
     sudo postmap hash:/etc/postfix/sasl_password 
     sudo postmap /etc/postfix/sender_canonical
     sudo /etc/init.d/postfix restart   

    Vous devrez peut-être contourner le bogue "permission refusée". por chown postfix:postfix /etc/postfix à l'avance.

Cela devrait suffire dans la plupart des cas. Pourtant, certains fournisseurs smtp exigent une adresse spécifique comme expéditeur ou cryptage.

En rapport : PEAR::Mail pourrait également vous intéresser.

Gmail (et peut-être d'autres services) n'apprécient pas que vous essayiez d'envoyer du courrier de cette façon, car cela pourrait être considéré comme non sécurisé par leurs normes, et bloquerait votre tentative, c'est-à-dire que rien ne se produirait à l'écran ou qu'un endroit du processus entier bloquerait votre authentification. Votre POP3 doit également être activé.

Pour contrer cela, voir ici. (Si vous voulez être sûr, créez un compte Gmail factice).

29voto

colan Points 1135

PHP a besoin d'un client SMTP pour envoyer du courrier. Vous pouvez installer un agent de transfert de courrier (MTA) complet tel que Postfix pour remplir cette fonction, mais c'est une surcharge de travail si vous n'avez besoin que d'envoyer du courrier via PHP. A la place, installez msmtp . Il est léger et beaucoup plus simple à configurer.

Installer msmtp

sudo apt-get install msmtp-mta ca-certificates

Configurez-le

Créez un nouveau fichier de configuration :

sudo vi /etc/msmtprc

...avec les informations de configuration suivantes :

# Set defaults.
defaults

# Enable or disable TLS/SSL encryption.
tls on
tls_starttls on
tls_trust_file /etc/ssl/certs/ca-certificates.crt

# Set up a default account's settings.
account default
host <smtp.example.net>
port 587
auth on
user <username@example.net>
password <password>
from <address-to-receive-bounces@example.net>
syslog LOG_MAIL

Vous devez remplacer les données de configuration représentées par tout ce qui se trouve entre "<" et ">" (inclusivement, supprimez-les). Pour l'hôte/le nom d'utilisateur/le mot de passe, utilisez vos informations d'identification normales pour envoyer du courrier via votre fournisseur de courrier.

Dites à PHP de l'utiliser

sudo vi /etc/php5/apache2/php.ini

Ajoutez cette seule ligne :

sendmail_path = /usr/bin/msmtp -t

4voto

Mufaka Points 54

Ça devrait être une réparation simple. Il suffit d'installer Postfix qui se charge de l'envoi des e-mails.

sudo apt-get install postfix

Vous devez l'exécuter à partir d'un terminal (et non du centre logiciel) car il doit vous poser quelques questions de configuration. Vous devriez pouvoir accepter tous les paramètres par défaut (local-only, etc).

2voto

vrobinson Points 21

C'est une vieille question et il y a des réponses valables ci-dessus, mais j'avais besoin de exim pour mon environnement. Confirmez également que vous avez installé sendmail en premier lieu ( $ which sendmail -- devrait retourner quelque chose comme /usr/sbin/sendmail). J'ai trouvé un bon guide à linode.com mais l'essentiel est que :

apt-get install exim4-daemon-light mailutils

suivi par :

dpkg-reconfigure exim4-config

qui vous mènera à un éditeur interactif.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X