#1 Le 04/04/2023, à 12:03
- k22bis
[Résolu] Envoyer un mail en PHP depuis le localhost
Bonjour,
je suis sur Ubuntu 20.04 LTS,
J'ai un serveur web installé sur Apache 2.4.41 avec PHP 7.4.3
Je suis en local et j'aimerais faire un script PHP qui envoie un mail de mon local host vers ma messagerie par exemple.
Je parcours différents forum, test différents tuto et finalement rien ne fonctionne à part que le script ci dessous me dit que le mail a été envoyé sans qu'il n'arrive car je n'ai pas su configurer correctement quoique ce soit !
<?php
ini_set( 'display_errors', 1 );
error_reporting( E_ALL );
echo "L'email va etre envoyé.";
$from = "titi@gmail.com";
$to = "toto@gmail.com";
$subject = "Essai de PHP Mail";
$message = "PHP Mail fonctionne parfaitement";
$headers = "De :" . $from;
mail($to,$subject,$message, $headers);
echo "L'email a été envoyé.";
?>
J'ai un fichier de log qui me dit que je n'ai pas fait ce qu'il fallait, et qui m'envoie des messages différents en fonction des configurations nouvelles que je teste.
Les derniers messages sont sachant que j'ai remplacé ici l'adresse de l’émetteur par titi@gmail.com et le destinataire par toto@gmail.com pour ne pas donner mon adresse mail publiquement.
Apr 4 12:00:37 localhost sendmail[13031]: 334A0bEf013031: from=www-data, size=114, class=0, nrcpts=1, msgid=<202304041000.334A0bEf013031@localhost.localdomain>, relay=www-data@localhost
Apr 4 12:00:37 localhost sm-mta[13032]: 334A0bok013032: from=<www-data@localhost.localdomain>, size=398, class=0, nrcpts=1, msgid=<202304041000.334A0bEf013031@localhost.localdomain>, proto=ESMTP, daemon=MTA-v4, relay=localhost.localdomain [127.0.0.1]
Apr 4 12:00:37 localhost sendmail[13031]: 334A0bEf013031: to=toto@gmail.com, ctladdr=www-data (33/33), delay=00:00:00, xdelay=00:00:00, mailer=relay, pri=30114, relay=[127.0.0.1] [127.0.0.1], dsn=2.0.0, stat=Sent (334A0bok013032 Message accepted for delivery)
Apr 4 12:00:37 localhost sm-mta[13034]: STARTTLS=client, relay=smtp.gmail.com., version=TLSv1.3, verify=FAIL, cipher=TLS_AES_256_GCM_SHA384, bits=256/256
Apr 4 12:00:38 localhost sm-mta[13034]: 334A0bok013032: to=<k22bis@gmail.com>, ctladdr=<www-data@localhost.localdomain> (33/33), delay=00:00:01, xdelay=00:00:01, mailer=relay, pri=120398, relay=smtp.gmail.com. [209.85.202.108], dsn=5.0.0, stat=Service unavailable
Apr 4 12:00:38 localhost sm-mta[13034]: 334A0bok013032: 334A0cok013034: DSN: Service unavailable
Apr 4 12:00:38 localhost sm-mta[13034]: 334A0cok013034: to=<www-data@localhost.localdomain>, delay=00:00:00, xdelay=00:00:00, mailer=local, pri=30000, dsn=2.0.0, stat=Sent
J'ai bien compris que je dois configurer un serveur SMTP auquel la fonction mail va passer la main, tel sendmail ou Postfix (enfin je ne crois pas que sendmail soit un serveur SMTP, mais une fonction faisant le boulot)
Je tourne en rond, et je crois que je pourrais encore longtemps tourner en rond de tuto en tuto et de forum en forum.
Je suis prés à tout reprendre à zéro, ce serait même chouette de remettre tout à plat.
Avez vous connaissance d'une procédure existante, ou un tuto efficace pour paramétrer tout ce qu'il y a à paramétrer afin de pouvoir envoyer un mail sur une messagerie quand on est en local?
Merci de votre attention.
Bonne journée.
Cordialement.
Dernière modification par k22bis (Le 07/04/2023, à 14:29)
Hors ligne
#2 Le 04/04/2023, à 12:09
- sputnick
Re : [Résolu] Envoyer un mail en PHP depuis le localhost
Si tu veut, j'ai une solution plus simple basée sur msmtp. Ca évite d'avoir à faire tourner un postfix pour rien, et tu peut utiliser un compte riseup++/gmail (beurk) ou autres.
Voir https://wiki.archlinux.org/title/Msmtp
Cherche l’occurrence PHP
Une fois configuré aux petits oignons, tu peux utiliser
<?php
$mailto = 'me@mail.tld';
$subject = 'test';
$message = 'A que coucou';
mail($mailto,$subject,$message);
?>
Dernière modification par sputnick (Le 04/04/2023, à 14:13)
Je sais, un peu partout, tout le monde s'entretue, c'est pas gai, mais d'autres s'entrevivent, j'irai les retrouver.
https://sputnick.fr
Hors ligne
#3 Le 04/04/2023, à 13:08
- bruno
Re : [Résolu] Envoyer un mail en PHP depuis le localhost
Et la doc msmtp en français sur le wiki ubuntu-fr.
#4 Le 04/04/2023, à 14:05
- Hizoka
Re : [Résolu] Envoyer un mail en PHP depuis le localhost
Salut,
voici ce que je fais perso :
# Installation du paquet ssmtp et aha pour l’html
sudo apt install ssmtp aha
Config avec Gmail :
# Configuration de sstmp
echo "hostname=KimsufiServeur
root=xxx@gmail.com
FromLineOverride=YES
UseTLS=YES
UseSTARTTLS=YES
mailhub=smtp.gmail.com:587
rewriteDomain=gmail.com
FromLineOverride=YES
AuthUser=xxx@gmail.com
AuthPass=yyy" > "/etc/ssmtp/ssmtp.conf"
Il faut modifier AuthUser / AuthPass / root
Se connecter sur gmail avec le compte.
Activer les applications moins sécurisées sur https://www.google.com/settings/security/lesssecureapps
Pour ajouter le serveur à la liste des pc OK, aller sur https://accounts.google.com/DisplayUnlockCaptcha et cliquer sur continuer.
Envoyer un mail bidon, le serveur est ajouté.
Config avec OVH :
# Configuration de sstmp
echo "hostname=Kimsufi
root=zzz
FromLineOverride=YES
UseTLS=YES
UseSTARTTLS=YES
mailhub=SSL0.OVH.NET:587
rewriteDomain=OVH.NET
FromLineOverride=YES
AuthUser=xxx@xxx
AuthPass=yyy" > "/etc/ssmtp/ssmtp.conf"
Il faut modifier AuthUser / AuthPass / root
Puis pour s'envoyer un mail simple :
echo "Corps du texte" | mail -s "Titre du mail" \
-A "Fichier à joindre" \
-a "From: xxx <xxx@xxx>" \
-a "Content-Type: text/plain; charset=utf-8" \
mail de destination
Pour un mail avec html :
aha FichierAvecHtml.log | mail -s "Titre du mail" \
-A "Fichier à joindre" \
-a "From: xxx <xxx@xxx>" \
-a "Content-Type: text/html; charset=utf-8" \
mail de destination
Je ne sais pas si msmtp est mieux ou non.
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#5 Le 04/04/2023, à 14:11
- sputnick
Re : [Résolu] Envoyer un mail en PHP depuis le localhost
Salut Hizoka
Note: sSMTP is unmaintained. Consider using something like msmtp or OpenSMTPD instead.
Source: https://wiki.archlinux.org/title/SSMTP
Préférer msmtp
Je sais, un peu partout, tout le monde s'entretue, c'est pas gai, mais d'autres s'entrevivent, j'irai les retrouver.
https://sputnick.fr
Hors ligne
#6 Le 04/04/2023, à 14:33
- k22bis
Re : [Résolu] Envoyer un mail en PHP depuis le localhost
Bonjour
merci pour vos réponses si rapides! Je vais les étudier et tenter de les mettre en œuvre. Ce sont de nouvelles pistes très intéressantes.
Si tu veut, j'ai une solution plus simple basée sur msmtp. Ca évite d'avoir à faire tourner un postfix pour rien, et tu peut utiliser un compte riseup++/gmail (beurk) ou autres.
Le 'beurk' fait allusion à gmail c'est bien ça Sputnik?! :-)
Je reviens vers vous très vite pour vous tenir informé de mes avancées.
A très vite donc.
Belle après midi à vous.
Hors ligne
#7 Le 04/04/2023, à 14:33
- Hizoka
Re : [Résolu] Envoyer un mail en PHP depuis le localhost
Bon bah voilà la réponse
Merci Sputnick.
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#8 Le 04/04/2023, à 14:34
- sputnick
Re : [Résolu] Envoyer un mail en PHP depuis le localhost
Le 'beurk' fait allusion à gmail c'est bien ça Sputnik?! :-)
sputnick
Oui!
Je sais, un peu partout, tout le monde s'entretue, c'est pas gai, mais d'autres s'entrevivent, j'irai les retrouver.
https://sputnick.fr
Hors ligne
#9 Le 04/04/2023, à 15:00
- k22bis
Re : [Résolu] Envoyer un mail en PHP depuis le localhost
Sputnik,
je suis face à une première interrogation, au bout de deux lignes ! Si si!
Je lis
7.3 Send mail with PHP using msmtp
Look for sendmail_path option in your php.ini and edit like this:
sendmail_path = "/usr/bin/msmtp -C /path/to/your/config -t"
Le " /path/to/your/config" , v'est bien l'emplacement où je vais ranger le fichier de config de msmtp dont il est question au 2 Basic setup ?
Par exemple, si mon script envoi-mail.php se trouve sur /www/mail, je doit placer mon fichier de config cfig.user dans /www/mail également ou à la racine /www/?
Ou je n'ai rien compris?
~/.msmtprc
# Set default values for all following accounts.
defaults
auth on
tls on
tls_trust_file /etc/ssl/certs/ca-certificates.crt
logfile ~/.msmtp.log
# Gmail
account gmail
host smtp.gmail.com
port 465
tls_starttls off
from username@gmail.com
user username
password plain-text-password
# A freemail service
account freemail
host smtp.freemail.example
from joe_smith@freemail.example
...
# Set a default account
account default : gmail
Hors ligne
#10 Le 04/04/2023, à 16:28
- krodelabestiole
Re : [Résolu] Envoyer un mail en PHP depuis le localhost
tu devrais suivre la doc (en français) que t'a proposée bruno : https://doc.ubuntu-fr.org/msmtp
nouveau forum ubuntu-fr on en parle là : refonte du site / nouveau design
profil - sujets récurrents - sources du site
Hors ligne
#11 Le 04/04/2023, à 16:44
- sputnick
Re : [Résolu] Envoyer un mail en PHP depuis le localhost
La conf sur archwiki parle de /etc/msmtprc (conf globale != conf user)
Donc
mv .msmtprc /etc/msmtprc
Du coup, ça fonctionnera pour PHP et pour ton user.
tu devrais suivre la doc (en français) que t'a proposée bruno : https://doc.ubuntu-fr.org/msmtp
Il ne s'agit pas seulement de faire marcher msmtp mais de le faire fonctionner dans PHP
Dernière modification par sputnick (Le 04/04/2023, à 16:52)
Je sais, un peu partout, tout le monde s'entretue, c'est pas gai, mais d'autres s'entrevivent, j'irai les retrouver.
https://sputnick.fr
Hors ligne
#12 Le 04/04/2023, à 17:06
- k22bis
Re : [Résolu] Envoyer un mail en PHP depuis le localhost
tu devrais suivre la doc (en français) que t'a proposée bruno : https://doc.ubuntu-fr.org/msmtp
Bonjour krodelabestiole,
oui tu as raison, je me suis précipité, je vais prendre le temps.
Hors ligne
#13 Le 04/04/2023, à 17:08
- k22bis
Re : [Résolu] Envoyer un mail en PHP depuis le localhost
La conf sur archwiki parle de /etc/msmtprc (conf globale != conf user)
Donc
mv .msmtprc /etc/msmtprc
Du coup, ça fonctionnera pour PHP et pour ton user.
Je vais essayer de ne pas prendre de mauvaises habitudes, mais ça ne va pas être facile car ta réponse répond exactement à ma question ! Merci une fois de plus!
Hors ligne
#14 Le 04/04/2023, à 18:25
- k22bis
Re : [Résolu] Envoyer un mail en PHP depuis le localhost
Me revoilà avec une nouvelle question!
Dans le fichier de conf, est ce que je dois mettre le mot de passe entre quote ou double quote car visiblement, ça ne passe pas :
k22bis@k22:~$ echo 'message' | msmtp toto@gmail.com
msmtp: échec de l'authentification (méthode PLAIN)
msmtp: message du serveur : 535-5.7.8 Username and Password not accepted. Learn more at
msmtp: message du serveur : 535 5.7.8 https://support.google.com/mail/?p=BadCredentials d7-20020adfe2c7000000b002d419f661d6sm12788257wrj.82 - gsmtp
msmtp: le courriel n'a pas pu être envoyé (compte default dans /etc/msmtprc)
k22bis@k22:
Hors ligne
#15 Le 04/04/2023, à 18:29
- sputnick
Re : [Résolu] Envoyer un mail en PHP depuis le localhost
Si t'a des caractères spéciaux ça importe, sinon non
Je sais, un peu partout, tout le monde s'entretue, c'est pas gai, mais d'autres s'entrevivent, j'irai les retrouver.
https://sputnick.fr
Hors ligne
#16 Le 04/04/2023, à 18:31
- k22bis
Re : [Résolu] Envoyer un mail en PHP depuis le localhost
Salut,
Se connecter sur gmail avec le compte.
Activer les applications moins sécurisées sur https://www.google.com/settings/security/lesssecureapps
Depuis mai 2022 "Ce paramètre n'est plus disponible" que ça me répond.
Hors ligne
#17 Le 04/04/2023, à 18:33
- k22bis
Re : [Résolu] Envoyer un mail en PHP depuis le localhost
Si t'a des caractères spéciaux ça importe, sinon non
Oui, j'en ai un. Je vais tenté avec simple quote car avec double quote ça ne le fait pas.
Hors ligne
#18 Le 04/04/2023, à 18:50
- k22bis
Re : [Résolu] Envoyer un mail en PHP depuis le localhost
NI avec des quote, ni avec des double quote.
Ça a pourtant l'air simple à vous lire.
J'ai crée le fichier de conf en root, c'est peut être ça le problème?
k22bis@k22:~$ ls -l /etc/msmtprc
-rw-r--r-- 1 root root 423 avril 4 19:34 /etc/msmtprc
k22bis@k22:~$
Hors ligne
#19 Le 04/04/2023, à 19:04
- k22bis
Re : [Résolu] Envoyer un mail en PHP depuis le localhost
J'ai réessayer en supprimant le fichier de conf et en le recréant en tant que utilisateur, mais sans plus de succès:
k22bis@k22:~$ ls -l /etc/msmtprc
-rw-rw-r-- 1 k22bis k22bis 423 avril 4 19:59 /etc/msmtprc
k22bis@k22:~$
Hors ligne
#20 Le 04/04/2023, à 19:29
- sputnick
Re : [Résolu] Envoyer un mail en PHP depuis le localhost
gmail est pas forcement le plus facile à paramétrer, c'est pour ça que je t'avais donné riseup en premier.
T'est sur du mot de passe? Y'a ptet desnouveles regles google pour empecher le app 'non secure' de se connecter.
Moi je chercherais un fournisseur alternatif.
Ma conf qui marche avec riseup:
defaults
logfile /tmp/msmtp.log
aliases /etc/aliases
tls_starttls on
tls_certcheck on
tls_trust_file /etc/ssl/certs/ca-certificates.crt
account riseup
tls on
auth on
host smtp.riseup.net
port 587
from toi@riseup.net
user toi@riseup.net
password xxxxxx
account gmail
tls on
auth on
host smtp.gmail.com
port 587
from toi@gmail.com
user toi@gmail.com
password xxxxx
# Set a default account
account default : riseup
Pas testé récemment gmail, mais la conf doit être bonne
Je sais, un peu partout, tout le monde s'entretue, c'est pas gai, mais d'autres s'entrevivent, j'irai les retrouver.
https://sputnick.fr
Hors ligne
#21 Le 04/04/2023, à 19:50
- krodelabestiole
Re : [Résolu] Envoyer un mail en PHP depuis le localhost
Il ne s'agit pas seulement de faire marcher msmtp mais de le faire fonctionner dans PHP
ben une fois que msmtp fonctionne (avec le bon symlink sendmail, comme indiqué dans cette doc), niveau php c'est un bête usage de la fonction mail().
nouveau forum ubuntu-fr on en parle là : refonte du site / nouveau design
profil - sujets récurrents - sources du site
Hors ligne
#22 Le 04/04/2023, à 20:12
- k22bis
Re : [Résolu] Envoyer un mail en PHP depuis le localhost
Visiblement ce n'est plus possible chez gmail
Les applications moins sécurisées et votre compte Google
Pour vous aider à sécuriser votre compte, à compter du 30 mai 2022, Google ne prendra plus en charge l'utilisation d'applications ou d'appareils tiers qui vous demandent uniquement votre nom d'utilisateur et votre mot de passe pour vous connecter à votre compte Google.
Chez riseup il faut un code d'invitation et je n'en ai point.
Je vais peut-être devoir revoir ma stratégie dans ce cas et essayer d'installer un serveur smtp ?
Hors ligne
#23 Le 04/04/2023, à 20:45
- sputnick
Re : [Résolu] Envoyer un mail en PHP depuis le localhost
@k22bis, c'est ce qui me semblait quand je disait: Y'a ptet des nouveles regles google pour empêcher les app 'non secure' de se connecter.
Envoie moi un mail ou un MP, je t'invite chez riseup
Edit: j'ai parlé trop vite, il n'y a plus d'invit's disponibles:
We were having several new accounts causing problems for others in cases that go from from sending spam to harassment. As an emergency option we reduced the amount of accounts that can create invites while we figure out a better way to proceed with this.
We are sorry for the problems this could be producing, but we have not an easy problem to solve here and we need time to figure out the next steps.
https://account.riseup.net/invites
Edit2 Y'a pas que riseup et gmail comme fournisseurs de mails. Y'a protonmail par exemple.
Et si tu lis le lien archwiki, il y a une solution google via OAuth, chercher OAuth2 Setup
Dernière modification par sputnick (Le 04/04/2023, à 21:03)
Je sais, un peu partout, tout le monde s'entretue, c'est pas gai, mais d'autres s'entrevivent, j'irai les retrouver.
https://sputnick.fr
Hors ligne
#24 Le 04/04/2023, à 21:07
- k22bis
Re : [Résolu] Envoyer un mail en PHP depuis le localhost
J'aurais peut être créé une boucle infernale!
Ils ont juste anticipé!
Merci en tout cas pour toute cette aide.
Je crois que je vais tenter l'aventure de postfix et consort pour m'arracher les cheveux encore un peu plus longtemps.:D
Bonne soirée.
Hors ligne
#25 Le 04/04/2023, à 22:54
- k22bis
Re : [Résolu] Envoyer un mail en PHP depuis le localhost
En grattant dans google, j'ai trouvé ceci !
Les mots de passe d'application vous permettent de vous connecter à votre compte Google à partir d'applications sur des appareils non compatibles avec la validation en deux étapes.
Alors finalement non, je ne vais pas me lancer dans postfix car en utilisant la fonction proposée par gmail 'les mots de passe d'application', j'ai généré un mot de passe associé à msmtprc que j'ai mis dans le fichier de config à la place de mon mot de passe de messagerie et là, ô miracle la commande
k22bis@k22:~$ echo 'message' | msmtp moi@gmail.com
m'a envoyé un mail !!!
Pour le moment le script php ne m'envoie pas de mail mais déjà en batch ça part et ça arrive!
Alors je verrais demain pour le PHP. Cette journée s'achève par un demi succès!
Hors ligne