[SSMTP & PHP] - Envoi d'un mail via la fonction mail() - (Résolu)

Applications, problèmes de configuration réseau
Répondre
Avatar de l’utilisateur
Maltergate
Hankyu
Messages : 11
Inscription : dim. 14 déc. 2014, 12:11
Contact :

[SSMTP & PHP] - Envoi d'un mail via la fonction mail() - (Résolu)

Message par Maltergate »

Bonjour à tous et à toutes.

J'aimerais sur l'un de mes sites avoir un formulaire de contact qui, une fois rempli par l'utilisateur, m'enverrait un mail avec les informations.

J'ai décidé d'utiliser ssmtp plutôt que de monter un postfix ou autre... J'ai configuré ce dernier pour qu'il transmette le message au SMTP de Gmail à l'aide d'une adresse perso. Ssmtp fonctionne bien puisque lorsque j'exécute la commande suivante :

Code : Tout sélectionner

echo test121 | mail -v -s "encore un autre test" monadresse@outlook.fr
J'ai bien un mail envoyé par Gmail, qui atterrit dans ma boîte Outlook.

Cependant, lorsque je passe à PHP, les choses se compliquent. J'ai un fichier contact.php :

Code : Tout sélectionner

<?php
$name = $_POST['name'];
$email_address = $_POST['email'];
$phone = $_POST['phone'];
$message = $_POST['message'];
	
$to = 'monadresse@outlook.fr';
$email_subject = "Formulaire de contact Invie:  $name";
$email_body = "You have received a new message from your website contact form.\n\n"."Here are the details:\n\nName: $name\n\nEmail: $email_address\n\nPhone: $phone\n\nMessage:\n$message";	
mail($to,$email_subject,$email_body);			
?>
Et là, c'est le drame. Ça n'envoie rien. Pourtant, j'ai bien été faire les manipulations dans le php.ini :

Code : Tout sélectionner

[mail function]
; For Win32 only.
; http://php.net/smtp
;SMTP = localhost
; http://php.net/smtp-port
;smtp_port = 25

; For Win32 only.
; http://php.net/sendmail-from
;sendmail_from = me@example.com

; For Unix only.  You may supply arguments as well (default: "sendmail -t -i").
; http://php.net/sendmail-path
sendmail_path = /usr/bin/ssmtp -t
Si quelqu'un a une idée ou a déjà été confronté au problème, je suis fort preneur. J'ai beau :google: dans tous les sens, je ne trouve pas...

Merci beaucoup pour votre aide !
Dernière modification par Maltergate le mar. 22 sept. 2015, 21:39, modifié 2 fois.
121Ch212
Avatar de l’utilisateur
benjarobin
Maître du Kyudo
Messages : 17632
Inscription : sam. 30 mai 2009, 15:48
Localisation : Lyon

Re: [SSMTP & PHP] - Envoi d'un mail via la fonction mail()

Message par benjarobin »

Bonjour,
As tu regardé les logs du serveur, cela aiderait je pense. Tu peux aussi essayer d'afficher les erreurs php au client, voir php.ini
Zsh | KDE | PC fixe : AMD Ryzen 9900X, Radeon RX 7700 XT
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
Avatar de l’utilisateur
papajoke
Elfe
Messages : 820
Inscription : sam. 30 août 2014, 19:54

Re: [SSMTP & PHP] - Envoi d'un mail via la fonction mail()

Message par papajoke »

Bonjour,
On configure ssmtp par utilisateur et pour php l'utilisateur doit être http(nginx)
Arch stable - Kde 6 / fish - btrfs/mbr - Intel Core i3 - 6Go RAM - GeForce 405 video-nouveau
Avatar de l’utilisateur
benjarobin
Maître du Kyudo
Messages : 17632
Inscription : sam. 30 mai 2009, 15:48
Localisation : Lyon

Re: [SSMTP & PHP] - Envoi d'un mail via la fonction mail()

Message par benjarobin »

@papajoke Euh non... C'est toujours bien de vérifier vite fait avant :-(
https://wiki.archlinux.org/index.php/SSMTP
Zsh | KDE | PC fixe : AMD Ryzen 9900X, Radeon RX 7700 XT
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
Avatar de l’utilisateur
papajoke
Elfe
Messages : 820
Inscription : sam. 30 août 2014, 19:54

Re: [SSMTP & PHP] - Envoi d'un mail via la fonction mail()

Message par papajoke »

? pour moi
il fallait utiliser le fichier /etc/ssmtp/revaliases pour donner accès à un utilisateur particulier

Code : Tout sélectionner

root:p.test@serveur.fr:smtp.free.fr
papajoke:p.test@serveur.fr:smtp.free.fr
http:p.test@serveur.fr:smtp.free.fr
Arch stable - Kde 6 / fish - btrfs/mbr - Intel Core i3 - 6Go RAM - GeForce 405 video-nouveau
Avatar de l’utilisateur
benjarobin
Maître du Kyudo
Messages : 17632
Inscription : sam. 30 mai 2009, 15:48
Localisation : Lyon

Re: [SSMTP & PHP] - Envoi d'un mail via la fonction mail()

Message par benjarobin »

Absolument pas... Cela permet juste de changer la valeur par défaut du From
A reverse alias gives the From: address placed on a user's outgoing messages and (optionally) the mailhub these messages will be sent through.
Edit: Après test, je confirme mes dires
Zsh | KDE | PC fixe : AMD Ryzen 9900X, Radeon RX 7700 XT
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
oktoberfest
Maître du Kyudo
Messages : 1855
Inscription : mer. 06 janv. 2010, 13:51
Localisation : Ried - Alsace - France

Re: [SSMTP & PHP] - Envoi d'un mail via la fonction mail()

Message par oktoberfest »

Hello,

j'utilise ssmtp lors de mes sauvegardes nocturnes pour envoyer un compte-rendu d'exécution, ceci via un script shell lancé par un timer systemd. Et comme toi je me suis rendu compte que mes mails ne partaient pas alors qu'un essai en ligne de commande fonctionnait très bien.

La dernière ligne de mon script ressemble à ça :

Code : Tout sélectionner

journalctl --since today --unit=backup.service | mailx -s 'Backup' -r <email emetteur> <email destinataire>
Si à la suite de cette ligne de code j'ajoute une temporisation (j'ai mis un 'sleep 60') alors le mail part. Je n'ai pas cerné complètement le problème mais je pense que le souci est que mon script s'achève avant que ssmtp ait eu le temps d'envoyer le mail et ça pose problème.
Dans ton cas le souci peut être similaire : ton script php se termine après l'exécution de la commande mail. Essaye d'ajouter une petite pause (60 secondes est exagéré dans ton cas) pour voir si ça résoud ton problème.
La majorité des bugs se situe entre la chaise et le clavier...
Arrêtez de vous prendre la tête avec les partitions... passez au LVM
Avatar de l’utilisateur
benjarobin
Maître du Kyudo
Messages : 17632
Inscription : sam. 30 mai 2009, 15:48
Localisation : Lyon

Re: [SSMTP & PHP] - Envoi d'un mail via la fonction mail()

Message par benjarobin »

@oktoberfest Sans le verbose j'ai tout de suite la main, retour au prompt, tandis qu'avec le verbose il faut quelques secondes pour avoir le message "closing connection"
Et voilà trouvé :D :mrgreen: Rajoute l'option -Ssendwait Ce qui donne :

Code : Tout sélectionner

journalctl --since today --unit=backup.service | mailx -Ssendwait -s 'Backup' -r <email emetteur> <email destinataire>
Fin du HS
Zsh | KDE | PC fixe : AMD Ryzen 9900X, Radeon RX 7700 XT
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
Avatar de l’utilisateur
papajoke
Elfe
Messages : 820
Inscription : sam. 30 août 2014, 19:54

Re: [SSMTP & PHP] - Envoi d'un mail via la fonction mail()

Message par papajoke »

test sous nginx (localhost sur mon desktop) de la fonction php.mail()
false sans la ligne http:mon.email@serveur.fr:smtp.free.fr dans revaliases et email bien envoyé/reçu avec
ps: mail envoyé dans la seconde

Code : Tout sélectionner

$cat ssmtp.conf
#
# /etc/ssmtp.conf -- a config file for sSMTP sendmail.
#
# The person who gets all mail for userids < 1000
# Make this empty to disable rewriting.
#root=papajoke@archlinux.info
# The place where the mail goes. The actual machine name is required
# no MX records are consulted. Commonly mailhosts are named mail.domain.com
# The example will fit if you are in domain.com and you mailhub is so named.
#mailhub=mail.archlinux.info:587
# Where will the mail seem to come from?
#rewriteDomain= archlinux.info
# The full hostname
hostname=localhost

# Use SSL/TLS before starting negotiation
#UseTLS=Yes
#UseSTARTTLS=Yes

# Username/Password
#AuthUser=
#AuthPass=

# Email 'From header's can override the default domain?
FromLineOverride=yes

#-----------------------------#

root=MOI@free.fr
mailhub=smtp.free.fr
avec dans revaliases

Code : Tout sélectionner

root:MOI@serveur.fr:smtp.free.fr
patrick:MOI@serveur.fr:smtp.free.fr
http:MOI@serveur.fr:smtp.free.fr
Dernière modification par papajoke le mar. 22 sept. 2015, 21:23, modifié 1 fois.
Arch stable - Kde 6 / fish - btrfs/mbr - Intel Core i3 - 6Go RAM - GeForce 405 video-nouveau
Avatar de l’utilisateur
benjarobin
Maître du Kyudo
Messages : 17632
Inscription : sam. 30 mai 2009, 15:48
Localisation : Lyon

Re: [SSMTP & PHP] - Envoi d'un mail via la fonction mail()

Message par benjarobin »

@papajoke Tu as peut être mit exprès (ou involontairement) les valeurs par défaut à des valeurs invalides
Peux tu donner le contenu de /etc/ssmtp/ssmtp.conf en modifiant bien sûr ton user et mot de passe.
Pour comprendre ce que tu as modifié, peux tu mettre en utilisateur abcdef, en email abcdef@servmail.fr, en mot de passe 123456, et le serveur mail smtp.servmail.fr
Zsh | KDE | PC fixe : AMD Ryzen 9900X, Radeon RX 7700 XT
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
oktoberfest
Maître du Kyudo
Messages : 1855
Inscription : mer. 06 janv. 2010, 13:51
Localisation : Ried - Alsace - France

Re: [SSMTP & PHP] - Envoi d'un mail via la fonction mail()

Message par oktoberfest »

benjarobin a écrit : Et voilà trouvé :D :mrgreen: Rajoute l'option -Ssendwait Ce qui donne :

Code : Tout sélectionner

journalctl --since today --unit=backup.service | mailx -Ssendwait -s 'Backup' -r <email emetteur> <email destinataire>
Fin du HS
Cool je viens de modifier mon script (Le 'sleep', je trouvais ça vraiment moche). Je verrai demain matin si j'ai ou pas un mail dans ma boite aux lettres.
La majorité des bugs se situe entre la chaise et le clavier...
Arrêtez de vous prendre la tête avec les partitions... passez au LVM
Avatar de l’utilisateur
Maltergate
Hankyu
Messages : 11
Inscription : dim. 14 déc. 2014, 12:11
Contact :

Re: [SSMTP & PHP] - Envoi d'un mail via la fonction mail()

Message par Maltergate »

J'ai vérifié dans mon mail.log : je n'ai absolument rien.

Le fichier contact_me.php est en root:root 755.

J'ai essayé avec un petit fichier php de test test_mail.php :

Code : Tout sélectionner

<?php
mail('monadresse@outlook.fr', 'Objet de test', 'Corps du message de test');
?>
Et ça fonctionne... Donc ça vient de mon coté, une page qui pointe pas.

Mais du coup je profite que le thread soit ouvert et je me pose la question du root:root et 755 :arrow: j'ai l'impression que c'est pas top.
121Ch212
Avatar de l’utilisateur
benjarobin
Maître du Kyudo
Messages : 17632
Inscription : sam. 30 mai 2009, 15:48
Localisation : Lyon

Re: [SSMTP & PHP] - Envoi d'un mail via la fonction mail()

Message par benjarobin »

Je confirme, un fichier php devrait dans l'idéal être en : root:root 644
Zsh | KDE | PC fixe : AMD Ryzen 9900X, Radeon RX 7700 XT
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
Avatar de l’utilisateur
Maltergate
Hankyu
Messages : 11
Inscription : dim. 14 déc. 2014, 12:11
Contact :

Re: [SSMTP & PHP] - Envoi d'un mail via la fonction mail() - (Résolu)

Message par Maltergate »

Super. Merci beaucoup :)
121Ch212
Avatar de l’utilisateur
papajoke
Elfe
Messages : 820
Inscription : sam. 30 août 2014, 19:54

Re: [SSMTP & PHP] - Envoi d'un mail via la fonction mail()

Message par papajoke »

donné les codes des fichiers + haut.

en console(zsh pas php)
j'ai la même attitude, si je supprime la ligne : patrick:MOI@serveur.fr:smtp.free.fr
$ mail... ne fonctionne plus, erreur :
sendmail: 504 5.5.2 <patrick@localhost>: Sender address rejected: need fully-qualified address
par contre sudo mail... fonctionne bien
Dernière modification par papajoke le mar. 22 sept. 2015, 22:10, modifié 2 fois.
Arch stable - Kde 6 / fish - btrfs/mbr - Intel Core i3 - 6Go RAM - GeForce 405 video-nouveau
Avatar de l’utilisateur
benjarobin
Maître du Kyudo
Messages : 17632
Inscription : sam. 30 mai 2009, 15:48
Localisation : Lyon

Re: [SSMTP & PHP] - Envoi d'un mail via la fonction mail() - (Résolu)

Message par benjarobin »

C'est normal que cela échoue, la valeur par défaut n'est pas la bonne... Remplace

Code : Tout sélectionner

hostname=localhost
par

Code : Tout sélectionner

hostname=MOI@serveur.fr
Après je ne dis pas que ta configuration est mauvaise, je dis juste que le fichier revaliases est optionnel si tout est correctement configuré
Zsh | KDE | PC fixe : AMD Ryzen 9900X, Radeon RX 7700 XT
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
Avatar de l’utilisateur
papajoke
Elfe
Messages : 820
Inscription : sam. 30 août 2014, 19:54

Re: [SSMTP & PHP] - Envoi d'un mail via la fonction mail() - (Résolu)

Message par papajoke »

merci
benjarobin a écrit :@papajoke Tu as peut être mit exprès (ou involontairement) les valeurs par défaut à des valeurs invalides
:bravo:
Arch stable - Kde 6 / fish - btrfs/mbr - Intel Core i3 - 6Go RAM - GeForce 405 video-nouveau
Avatar de l’utilisateur
benjarobin
Maître du Kyudo
Messages : 17632
Inscription : sam. 30 mai 2009, 15:48
Localisation : Lyon

Re: [SSMTP & PHP] - Envoi d'un mail via la fonction mail() - (Résolu)

Message par benjarobin »

Pour la sécurité par contre, j'utilise ceci qui est bien plus sécurisant que ta technique :

Code : Tout sélectionner

chmod 640 /etc/ssmtp/ssmtp.conf
chown root:mail /etc/ssmtp/ssmtp.conf
Ce qui implique que seul les utilisateurs dans le groupe mail peuvent envoyer des emails, tous les autres utilisateurs ne peuvent pas voir le mot de passe
Zsh | KDE | PC fixe : AMD Ryzen 9900X, Radeon RX 7700 XT
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
oktoberfest
Maître du Kyudo
Messages : 1855
Inscription : mer. 06 janv. 2010, 13:51
Localisation : Ried - Alsace - France

Re: [SSMTP & PHP] - Envoi d'un mail via la fonction mail() - (Résolu)

Message par oktoberfest »

Pour ma part, l'option sendwait marche très bien et fait exactement ce qu'il me manquait. Merci pour l'info benjarobin
La majorité des bugs se situe entre la chaise et le clavier...
Arrêtez de vous prendre la tête avec les partitions... passez au LVM
Avatar de l’utilisateur
benjarobin
Maître du Kyudo
Messages : 17632
Inscription : sam. 30 mai 2009, 15:48
Localisation : Lyon

Re: [SSMTP & PHP] - Envoi d'un mail via la fonction mail() - (Résolu)

Message par benjarobin »

Je n'avais pas l'information, j'ai vraiment pris que 3 minutes pour trouver la réponse :-)
Zsh | KDE | PC fixe : AMD Ryzen 9900X, Radeon RX 7700 XT
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
Répondre