Comment envoyer mon courrier PHP?

68

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? Comment puis-je faire ça?

    
posée JM at Work 08.06.2011 - 12:25
la source

7 réponses

51

Dans le manuel de messagerie de php:

  

Configuration requise

     

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

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 éventuellement stocké du côté du service d'hébergement (par exemple, xmission), un serveur de messagerie sera probablement déjà installé sur ce serveur. Dans ce cas, testez simplement votre site en ligne plutôt que localement.

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

Postfix Installation

Installation: postfixe / sudo apt-get install postfix Pendant le processus, il vous sera demandé dans quel mode vous souhaitez installer postfix. Il existe quatre modes possibles:

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

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

Vous choisirez probablement une installation par satellite. Cela signifie que le courrier sera envoyé à l'aide d'un fournisseur externe. En tant que serveur SMTP (serveur de courrier sortant), vous devrez alors spécifier vos fournisseurs SMTP. Le reste des options est explicite.

Configuration post-installation

La plupart des serveurs SMTP nécessitent une authentification par mot de passe pour envoyer des messages. Donc, postfix devra connaître ce mot de passe. Il y a aussi des choses comme le cryptage à prendre en compte (que vous devrez consulter sur Google). Voici comment vous configurez postfix en utilisant l'authentification par mot de passe (sasl):

  • Installer libsasl2-modules < img src="https://i.stack.imgur.com/9SOjZ.png"> sasl2-bin < img src="https://i.stack.imgur.com/9SOjZ.png"> en cliquant sur les icônes du Software Center ou 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éez un fichier /etc/postfix/sasl_password avec une ligne comme:

     smtp.gmail.com [email protected]:USERPASSWORD
    

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

  • Mettre à jour le 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 'autorisation refusée' bug par chown postfix:postfix /etc/postfix au préalable.

Cela devrait le faire dans la plupart des cas. Pourtant, certains fournisseurs de smtp nécessitent une adresse spécifique en tant qu’expéditeur ou cryptage.

Connexes: interface PEAR :: Mail être intéressant pour vous.

Gmail (et peut-être d'autres services) peut ne pas aimer que vous essayiez d'envoyer du courrier de cette façon, car il pourrait être considéré comme non sécurisé par ses normes et bloquerait votre tentative, car rien ne se passerait à l'écran ou ailleurs processus bloquerait votre authentification. De plus, votre POP3 doit être activé.

Pour contrer cela, voyez ici. (Si vous voulez être prudent, créez un compte Gmail factice)

    
réponse donnée con-f-use 08.06.2011 - 13:33
la source
58

Comme nous l’avons déjà noté, le postfix serait exagéré si vous avez juste besoin d’envoyer des e-mails à partir de PHP lors du développement d’applications sur votre ordinateur personnel.

Personnellement, j’utilise un paquet ssmtp très simple et léger. Il utilisera tout serveur smtp pour envoyer des e-mails sortants. Installez-le en lançant:

sudo apt-get install ssmtp

Ensuite, éditez le fichier /etc/ssmtp/ssmtp.conf , mettez en commentaire la ligne mailhub existante et ajoutez les lignes suivantes (cet exemple concerne le serveur smtp gmail):

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

(Indiquez votre nom d'utilisateur et votre mot de passe gmail. Vous pouvez bien sûr utiliser n'importe quel autre serveur SMTP).

Assurez-vous maintenant que votre fichier php.ini a la valeur sendmail_path . Il devrait se lire comme:

sendmail_path = /usr/sbin/sendmail -t

( D'après les commentaires de @ dima-l et @ omar-sabic : vous n'avez pas à spécifier ssmtp ici car l'installation doit avoir créé un lien symbolique pour /usr/sbin/sendmail , qui pointe correctement à ssmtp . Sinon, vous devez spécifier sendmail_path = /usr/sbin/ssmtp -t )

Rechargez apache et votre php devrait pouvoir envoyer des e-mails sortants maintenant.

    
réponse donnée Dima L. 29.10.2013 - 20:08
la source
27

PHP nécessite un client SMTP pour envoyer du courrier. Vous pouvez installer un agent de transfert de courrier complet (MTA) tel que Postfix pour y répondre. fonction, mais il est exagéré si vous avez seulement besoin d'envoyer du courrier via PHP. Au lieu de cela, installez msmtp . Il est léger et beaucoup plus simple à configurer.

Installez 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 <[email protected]>
password <password>
from <[email protected]>
syslog LOG_MAIL

Vous devez remplacer les données de configuration représentées par tout ce qui se trouve dans "& lt;" et "& gt;" (inclus, supprimez-les). Pour l'hôte / nom d'utilisateur / mot de passe, utilisez vos informations d'identification normales pour envoyer des messages via votre fournisseur de messagerie.

Dites à PHP de l’utiliser

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

Ajoutez cette seule ligne:

sendmail_path = /usr/bin/msmtp -t
    
réponse donnée colan 29.04.2012 - 21:19
la source
3

Doit être une solution simple. Vous avez juste besoin d'installer Postfix qui effectue l'e-mailing proprement dit.

sudo apt-get install postfix

Vous souhaitez exécuter cela depuis un terminal (et non le centre logiciel) car il doit vous poser quelques questions sur la configuration. Vous devriez vous contenter d'accepter tous les paramètres par défaut (local uniquement, etc.).

    
réponse donnée Oli 08.06.2011 - 12:47
la source
2

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 sendmail est installé en premier lieu ( $ which sendmail - devrait renvoyer quelque chose comme / usr / sbin / sendmail). J'ai trouvé un bon guide sur linode.com , mais le l'essentiel est:

apt-get install exim4-daemon-light mailutils

suivi de:

dpkg-reconfigure exim4-config

qui vous mènera à un éditeur interactif.

    
réponse donnée vrobinson 30.04.2014 - 23:46
la source
1

Excellente réponse , con-f-use.

J'ai une chose à ajouter à propos du "compte fictif gmail":

Ceci est fortement recommandé car vous devez configurer votre compte gmail pour autoriser des applications moins sécurisées: lien Sinon, vous obtiendrez une erreur "connectez-vous avec votre navigateur Web, puis réessayez" dans votre fichier /var/log/mail.log .

J'ai également constaté que j'obtiens une erreur de délai d'expiration à moins que je n'envoie le certificat racine de gmail smtp sever. Pour ce faire:

sudo nano /etc/postfix/main.cf

ajoutez ce qui suit au bas du fichier

smtp_tls_CAfile = /etc/postfix/cacert.pem

Copiez ensuite le certificat racine thawte dans le fichier cacert.pem :

cat /etc/ssl/certs/thawte_Primary_Root_CA.pem | sudo tee -a /etc/postfix/cacert.pem

Voici le lien que j'ai utilisé: Configurer Postfix pour utiliser Gmail SMTP sur Ubuntu | EasyEngine

Espérons que cela sauve quelqu'un de quelques follicules pileux ...

    
réponse donnée deputy_D 25.05.2016 - 19:12
la source
0

J'ai trouvé les solutions proposées par Dima L. le plus simple. léger au système.

Juste un ajout pour plus de clarté sur le réglage. Vous devriez commenter hostname dans le fichier /etc/ssmtp/ssmtp.conf . L'exemple de fichier ssmtp.conf est comme ci-dessous:

#
# Config file for sSMTP sendmail
#
# The person who gets all mail for userids < 1000
# Make this empty to disable rewriting.
root=postmaster

# 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=smtp.yourdomain.com
UseSTARTTLS=YES
[email protected]
AuthPass=YOUREMAILPASSWORD

# Where will the mail seem to come from?
#rewriteDomain=

# The full hostname
#hostname=

# 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
    
réponse donnée SD. 13.04.2018 - 08:33
la source

Lire d'autres questions sur les étiquettes