JeuWeb - Crée ton jeu par navigateur
Envoi de mail ne fonctionne pas ! - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Envoi de mail ne fonctionne pas ! (/showthread.php?tid=7874)



Envoi de mail ne fonctionne pas ! - L'Omniscient - 15-09-2017

Bonjour,

Bon j'ai toujours eu énormément de mal avec les envois de mail, et en plus mon dernier mail ne fonctionne pas. Du coup je viens demander votre aide pour régler ça et profiterai pour voir avec vous comment je peux ajuster les paramètres ^^ :

Code :
global $pseudo;
global $mail;
$pure_string = strip_tags($_POST['mdp']);
$message = "<html>
        <head>
            <title></title>
    </head>
    <body>
        <p>Bienvenue sur l'Ile du Coeur ".$pseudo." !
        <br/><br/>Conserve précieusement cet e-mail, car c'est le seul moyen de récupérer ton mot de passe !
        <br/>Ton mot de passe est : <strong>".$pure_string."</strong>
        <br/><br/>Nous te souhaitons d'agréables moments sur L'Ile du Coeur, à bientôt !</p>
    </body>
</html>";                
                
$headers  = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";

mail($mail, 'L\'Ile du Coeur', $message, $headers, "From: L\'Ile du Coeur");

(Je teste directement en ligne, j'ai essayé de configurer en local mais je ne sais pas quels identifiants je dois entrer)


RE: Envoi de mail ne fonctionne pas ! - Dioux - 15-09-2017

http://php.net/manual/fr/function.mail.php

Tes paramètres ne sont apparemment pas bon
mail ( string $to , string $subject , string $message [, string $additional_headers [, string $additional_parameters ]] )

et si je ne dit pas de bêtise le 'FROM' est a mettre dans le $additional_headers


RE: Envoi de mail ne fonctionne pas ! - niahoo - 15-09-2017

En local tu mets le même smtp que ta messagerie. Quelle est l'erreur sinon ?


RE: Envoi de mail ne fonctionne pas ! - Xenos - 15-09-2017

Perso, en local, je me branche sur FakeSMTP: c'est pratique pour voir les mails qui partiraient (et les ouvrir avec thunderbird/outlook) sans devoir recourir à un vrai serveur SMTP web (pas toujours accessible depuis un local). T'as pas d'identifiant à entrer je crois. cf https://toile.reinom.com/les-logiciels-et-outils-pour-les-jeux-web/#fakesmtp

Oui, FROM est un header additionnel, qui se termine par \r\n lui aussi (note: pourquoi faire 'x:y' . "\r\n" quand il suffit de faire "x:y\r\n"? ça sent le copier/coller sans trop chercher =P )
NON
NON
NON
NON
NON
NON
NON
NON
NON
NON
NON
NON
NON
NON
NON
NON
NON
NON
NON
NON
NON
NON
NON
NON
NON
NON


Le mot de passe ne s'envoie JAMAIS en clair par mail

Ni en hashé d'ailleurs (parce que cela en sert à rien). Le mot de passe en clair ne doit jamais sortir du serveur (il ne quitte jamais le code PHP, et encore, dans ce code, il ne doit être présent que dans le $_POST du login, du register et dans la variable filtrée associée).

A la lecture du code, si j'appelle la page sans envoyer le paramètre POST 'mdp' alors le mail plante. Passe TOUS tes $_* par un filter_input() (ou un array_key_exists('mdp', $_POST) mais c'est bien moins pratique car tu te tapes le filtrage ensuite).

$pseudo peut ici contenir du HTML. Passe TOUTES les variables textes par un htmlentities(), même celles qui viennent de ton code (sait-on jamais, une erreur type un "<" ou ">" qui traîne, ça arrive)


RE: Envoi de mail ne fonctionne pas ! - L'Omniscient - 03-10-2017

Hello hello,
Après quelques petites semaines intensives / HS / repos, je me remet tranquillement à mon codage ^^

Du coup, il me semble que l'envoi de mail fonctionnait avant, mais j'ai mis mon PHPmyAdmin à jour, du coup ça a peut-être causé quelques soucis (la mise à jour a déjà fait foiré un autre morceau de code). Je vais essayer de refaire bien mon mail().
Pour le local j'arrive clairement pas à configurer... Je voulais configurer avec une messagerie hotmail (outlook), c'est possible ? Ou alors faut que je configure avec une messagerie de mon serveur ?
Je n'ai pas d'erreur, juste un mail qui ne s'envoie pas...

Je pige pas trop Xenos comment tu résumes le code. Tu sais quand j'ai du mal à faire fonctionner des codes, je touche pas à grand chose, et lorsque ça fonctionne, j'y touche plus :p

Rholala, je sais pas si j'ai le courage de faire un bon envoi de mail sécurisé maintenant... Sinon pour l'instant je vire tout simplement le mail ? C'est pas hyper important pour le moment. C'est quoi la méthode pour appeler le mot de passe par mail sans le lire en clair ?


RE: Envoi de mail ne fonctionne pas ! - Xenos - 03-10-2017

Non, en local, tu ne configures pas avec "une adresse mail". Tu as juste un programme, qui se fait passer pour un serveur SMTP, et qui au lieu d'envoyer le mail sur la toile (comme le fait un SMTP "normal"), il le stock sur ton disque dur (et derrière, le mail s'ouvre simplement avec Thunderbird par exemple, ou Outlook).

Citation :Tu sais quand j'ai du mal à faire fonctionner des codes, je touche pas à grand chose, et lorsque ça fonctionne, j'y touche plus :p
Ce n'est pas une bonne approche, car tu vas vite te retrouver avec une pile de code que tu ne maîtrise pas, et cela va planter un jour: ce jour-là, tu seras incapable de te sortir de la colle, et le projet finira vite par en mourir.

Il n'y a pas de "méthode pour appeler le mot de passe par mail", la question n'a pas de sens: il n'y a pas de mot de passe en clair (à part celui qui entre sur le serveur, via POST, et qui ne doit *jamais* sortir dudit serveur, ni dans la BDD, ni par mail, ni dans les logs), c'est tout. Si tu n'arrives pas à envoyer de mail, et à ne pas mettre le MDP dedans, alors ne fait en effet juste pas d'envoi de mail.


RE: Envoi de mail ne fonctionne pas ! - Ter Rowan - 03-10-2017

(03-10-2017, 09:20 AM)Xenos a écrit : Il n'y a pas de "méthode pour appeler le mot de passe par mail", la question n'a pas de sens: il n'y a pas de mot de passe en clair (à part celui qui entre sur le serveur, via POST, et qui ne doit *jamais* sortir dudit serveur, ni dans la BDD, ni par mail, ni dans les logs), c'est tout. Si tu n'arrives pas à envoyer de mail, et à ne pas mettre le MDP dedans, alors ne fait en effet juste pas d'envoi de mail.

si si a pole emploi, quand tu t inscrits :

1) tu crées un user (adresse mail) et un mot de passe (un vrai)
2) le système de valide et te fournit un login (le leur, le tien disparait) et un mot de passe (8 chiffres, pas le tiens)

et puis...

quand tu oublies le mdp et que tu demandes un reinit, ils te renvoient... le même mot de passe tout est en clair (ou pire un algo genre f(ton id ) ...

j'adore.. bon y a des trucs bien aussi dans le système je dis pas, mais question sécurité, ils devraient faire appel à ... ben à ma boîte en fait, déjà ca leur ferait un chomeur de moins :p


RE: Envoi de mail ne fonctionne pas ! - L'Omniscient - 03-10-2017

(03-10-2017, 09:20 AM)Xenos a écrit : Non, en local, tu ne configures pas avec "une adresse mail". Tu as juste un programme, qui se fait passer pour un serveur SMTP, et qui au lieu d'envoyer le mail sur la toile (comme le fait un SMTP "normal"), il le stock sur ton disque dur (et derrière, le mail s'ouvre simplement avec Thunderbird par exemple, ou Outlook).

Citation :Tu sais quand j'ai du mal à faire fonctionner des codes, je touche pas à grand chose, et lorsque ça fonctionne, j'y touche plus :p
Ce n'est pas une bonne approche, car tu vas vite te retrouver avec une pile de code que tu ne maîtrise pas, et cela va planter un jour: ce jour-là, tu seras incapable de te sortir de la colle, et le projet finira vite par en mourir.

Il n'y a pas de "méthode pour appeler le mot de passe par mail", la question n'a pas de sens: il n'y a pas de mot de passe en clair (à part celui qui entre sur le serveur, via POST, et qui ne doit *jamais* sortir dudit serveur, ni dans la BDD, ni par mail, ni dans les logs), c'est tout. Si tu n'arrives pas à envoyer de mail, et à ne pas mettre le MDP dedans, alors ne fait en effet juste pas d'envoi de mail.

Le code du mail est le seul code dans ce cas (et le code du plein écran). Du coup ça va le reste de mon code je sais à 100% à quoi équivaut la moindre ligne ^^

Du coup en fait il ne faut pas envoyer le mot de passe par mail ? Mais si un joueur oublie son mot de passe ? Faut le renvoyer sur une page qui lui permet de modifier son mot de passe ? Lui envoyer un mot de passe éphémère qui lui permette de se connecter et de modifier lui-même ? C'est quoi la meilleure approche ?

(Ok Xenos, j'ai retrouvé ton paragraphe :

Le process classique de récupération de MDP, c'est l'envoie d'un email contenant un lien unique (pas deux fois le même dans tout le jeu, y compris à deux instants différents dans le temps), expirable (5min souvent ça suffit, car de toute façon, l'utilisateur ne va pas poireauter 2h devant son PC sans pouvoir accéder à son compte), non prédictible (ni par le joueur légitime, ni par n'importe quelle personne illégitime) et à usage unique. Ce lien amène sur une page permettant à l'utilisateur d'entrer un nouveau mot de passe, qui sera stocké comme celui à l'inscription (et une fois ce stockage fait, c'est plutôt sympa de logger direct l'utilisateur).


RE: Envoi de mail ne fonctionne pas ! - Xenos - 03-10-2017

Citation :Du coup en fait il ne faut pas envoyer le mot de passe par mail ?
C'est cela: ne jamais l'envoyer par mail

Citation :Mais si un joueur oublie son mot de passe ?
Dans ce cas, il faut un process de récupération de compte (souvent simplifié en "mot de passe oublié", parfois déformé en "récupération du mot de passe", ce dernier étant une très mauvais formulation).

Citation :Faut le renvoyer sur une page qui lui permet de modifier son mot de passe ?
C'est tout à fait ça.

Citation :Lui envoyer un mot de passe éphémère qui lui permette de se connecter et de modifier lui-même ?
C'est moyen comme solution, car si un tiers vient cliquer sur "récupération du compte" et entre le login de quelqu'un d'autre, alors cette autre personne perdra son mot de passe qui sera écrasé par le nouveau mot de passe temporaire. Il vaut mieux envoyer un lien unique, imprédictible et périssable à l'adresse mail associée au compte, et dans ce lien unique, permettre à l'utilisateur de changer le mot de passe de ce compte (et PAS d'un autre hein! pas de "page=changepassword&accountid=1234", parce que si je change le 1234 en un autre ID, je peux changer le MDP de n'importe quel compte!)

Edit: Ah, j'aurai du lire ta dernière parenthèse avant d'écrire...