Page 1 sur 1
[SSMTP & PHP] - Envoi d'un mail via la fonction mail() - (Résolu)
Publié : mar. 22 sept. 2015, 18:55
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

dans tous les sens, je ne trouve pas...
Merci beaucoup pour votre aide !
Re: [SSMTP & PHP] - Envoi d'un mail via la fonction mail()
Publié : mar. 22 sept. 2015, 19:34
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
Re: [SSMTP & PHP] - Envoi d'un mail via la fonction mail()
Publié : mar. 22 sept. 2015, 19:53
par papajoke
Bonjour,
On configure ssmtp par utilisateur et pour php l'utilisateur doit être http(nginx)
Re: [SSMTP & PHP] - Envoi d'un mail via la fonction mail()
Publié : mar. 22 sept. 2015, 20:15
par benjarobin
@papajoke Euh non... C'est toujours bien de vérifier vite fait avant
https://wiki.archlinux.org/index.php/SSMTP
Re: [SSMTP & PHP] - Envoi d'un mail via la fonction mail()
Publié : mar. 22 sept. 2015, 20:29
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
Re: [SSMTP & PHP] - Envoi d'un mail via la fonction mail()
Publié : mar. 22 sept. 2015, 20:39
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
Re: [SSMTP & PHP] - Envoi d'un mail via la fonction mail()
Publié : mar. 22 sept. 2015, 20:43
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.
Re: [SSMTP & PHP] - Envoi d'un mail via la fonction mail()
Publié : mar. 22 sept. 2015, 21:04
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é

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
Re: [SSMTP & PHP] - Envoi d'un mail via la fonction mail()
Publié : mar. 22 sept. 2015, 21:08
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
Re: [SSMTP & PHP] - Envoi d'un mail via la fonction mail()
Publié : mar. 22 sept. 2015, 21:17
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
Re: [SSMTP & PHP] - Envoi d'un mail via la fonction mail()
Publié : mar. 22 sept. 2015, 21:22
par oktoberfest
benjarobin a écrit :
Et voilà trouvé

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.
Re: [SSMTP & PHP] - Envoi d'un mail via la fonction mail()
Publié : mar. 22 sept. 2015, 21:24
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

j'ai l'impression que c'est pas top.
Re: [SSMTP & PHP] - Envoi d'un mail via la fonction mail()
Publié : mar. 22 sept. 2015, 21:29
par benjarobin
Je confirme, un fichier php devrait dans l'idéal être en : root:root 644
Re: [SSMTP & PHP] - Envoi d'un mail via la fonction mail() - (Résolu)
Publié : mar. 22 sept. 2015, 21:38
par Maltergate
Super. Merci beaucoup

Re: [SSMTP & PHP] - Envoi d'un mail via la fonction mail()
Publié : mar. 22 sept. 2015, 21:41
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
Re: [SSMTP & PHP] - Envoi d'un mail via la fonction mail() - (Résolu)
Publié : mar. 22 sept. 2015, 22:09
par benjarobin
C'est normal que cela échoue, la valeur par défaut n'est pas la bonne... Remplace
par
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é
Re: [SSMTP & PHP] - Envoi d'un mail via la fonction mail() - (Résolu)
Publié : mar. 22 sept. 2015, 22:14
par papajoke
merci
benjarobin a écrit :@papajoke Tu as peut être mit exprès (ou involontairement) les valeurs par défaut à des valeurs invalides

Re: [SSMTP & PHP] - Envoi d'un mail via la fonction mail() - (Résolu)
Publié : mar. 22 sept. 2015, 22:31
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
Re: [SSMTP & PHP] - Envoi d'un mail via la fonction mail() - (Résolu)
Publié : mer. 23 sept. 2015, 13:12
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
Re: [SSMTP & PHP] - Envoi d'un mail via la fonction mail() - (Résolu)
Publié : mer. 23 sept. 2015, 13:39
par benjarobin
Je n'avais pas l'information, j'ai vraiment pris que 3 minutes pour trouver la réponse
