Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 04/04/2023, à 13: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, à 15:29)

Hors ligne

#2 Le 04/04/2023, à 13: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, à 15:13)


On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#3 Le 04/04/2023, à 14: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.

Hors ligne

#4 Le 04/04/2023, à 15: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, à 15:11

sputnick

Re : [Résolu] Envoyer un mail en PHP depuis le localhost

Salut Hizoka smile

Note: sSMTP is unmaintained. Consider using something like msmtp or OpenSMTPD instead.

Source: https://wiki.archlinux.org/title/SSMTP

Préférer msmtp


On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#6 Le 04/04/2023, à 15: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.

sputnick a écrit :

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, à 15:33

Hizoka

Re : [Résolu] Envoyer un mail en PHP depuis le localhost

Bon bah voilà la réponse smile

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, à 15:34

sputnick

Re : [Résolu] Envoyer un mail en PHP depuis le localhost

k22bis a écrit :

Le 'beurk' fait allusion à gmail c'est bien ça Sputnik?! :-)

sputnick wink

Oui!


On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#9 Le 04/04/2023, à 16: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, à 17: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

Hors ligne

#11 Le 04/04/2023, à 17: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.


krodelabestiole a écrit :

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, à 17:52)


On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#12 Le 04/04/2023, à 18:06

k22bis

Re : [Résolu] Envoyer un mail en PHP depuis le localhost

krodelabestiole a écrit :

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, à 18:08

k22bis

Re : [Résolu] Envoyer un mail en PHP depuis le localhost

sputnick a écrit :

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, à 19: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, à 19: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


On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#16 Le 04/04/2023, à 19:31

k22bis

Re : [Résolu] Envoyer un mail en PHP depuis le localhost

Hizoka a écrit :

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, à 19:33

k22bis

Re : [Résolu] Envoyer un mail en PHP depuis le localhost

sputnick a écrit :

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, à 19: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, à 20: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, à 20: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


On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#21 Le 04/04/2023, à 20:50

krodelabestiole

Re : [Résolu] Envoyer un mail en PHP depuis le localhost

sputnick a écrit :

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().

Hors ligne

#22 Le 04/04/2023, à 21: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, à 21: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, à 22:03)


On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#24 Le 04/04/2023, à 22: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, à 23: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