notification par mail lorsque l'utlisateur reçois un msg privé

Ce sujet est résolu
Default
,

Bonjour,
Alors voila tout est dans le titre je ne sais pas dutout comment procédé je n'ai encore jamais fait cela
merci d'avance

22 Réponse

1
Default
,

Whisper2edunom , comme le dit Lartak, il est un peu délicat de t'aider car visiblement tu as beaucoup de fondamentaux à apprendre. Mais je vais essayer d'être le plus clair possible. Suivant ce que tu montres avec le code source, supposons que tu enregistres le message privé ainsi:

$traitement = "INSERT INTO TA_TABLE(Tes champs ici) VALUES(Tes valeurs ici)";

Tu peux faire ceci ensuite pour l'envoi du mail

if($traitement){
    //Ton code pour envoyer le mail ici
}

Mes conseils :
1) Effectue beaucoup de recherches personnelles, ça t'aidera à mieux progresser.
2)Essaie de migrer progressivement vers l'utilisation d'un framework(Laravel par exemple)
3)Mais si tu restes en "code dur", utilise au moins PDO pour tes requêtes et la POO de façon générale pour ton code. Tu peux déjà commencer par créer une fonction pour l'envoi du mail et une autre pour l'enregistrement du message. Cela t'évitera des répétitions de code.
Bon courage !
PS: Tu trouveras énormement de formations sur la POO en PHP et sur PDO ici. Elles sont super bien expliquées en plus.

Default
,

Regarde du coté du pattern observeur ca te permet de declancher des actions sur des evenements du coup en utilisant la fonction mail de php couplé a ca, des que l'utilisateur recoit un msg privé bim trigger un event qui envoie l'email.

17162
,

Bonjour.
Defy, je ne pense pas qu'il ait besoin de quelque chose de si avancé vu son niveau en PHP.
Je crois surtout qu'il ne sait pas comment faire pour l'envoi d'email ou du moins qu'il a du mal avec la logique du système à faire.

Default
,

je pourrais faire un code de ce genre là


<?php

include('*******.php');   /* connection à BDD */


$email_address = $_POST['email'];


$to = '$email_address';
$email_subject = "blabla";
$email_body = "blabla";
$headers = "From:quoi mettre ici";
mail($to,$email_subject,$email_body,$headers);
return true;           
?>

mais comment faire le plus simplement possible pour que le mail parte en meme tps que l'utilisateur recois le msg et aussi quoi mettre dans $headers svp car je ne comprend pas bien a quoi $headers corrspond et puis le mail va partir comment car là j'ai donné l'ordre d'envoyer un mail mais sans boite mail de depart donc comment faire ?
j'espere que je suis pas trop embrouillé que c'est clair ...

Default
,

il y a juste une chose que j'arrive pas à régler : Warning: mail(): Failed to connect to mailserver at....

Default
,

Bonjour Whisper2edunom. Déjà, il faudrait comprendre la logique du système que tu souhaites implémenter.
Pour faire simple, il te faut envoyer le mail quand tu enregistres le message privé en base de donnée . Ainsi celui-ci recevra un email à chaque réception de message privé.

Default
,

daccord mais pour faire ça si j'ai bien comprisil me faut un serveur mail ? comment faire ça...

17162
,

il me faut un serveur mail ? comment faire ça...

Tu as plusieurs solutions, la première qui est la plus simple, si tu utilises Wamp : Blog » Envoyer des mails en local avec Wamp, la seconde, tu peux utiliser MailDev : Tutoriels Divers » Tester l'envoi d'email avec MailDev, sachant que ceci utilise NodeJS et que ça permet de tester l'envoi d'email sans les envoyer réellement car MailDev les capturera, si ce n'est pas déjà fait, il te faudra l'installer : Formations » NodeJS : Installation.

Tout ceci bien sûr concerne l'environnement de développement, pour l'environnement de production il te faudra par exemple utiliser un serveur de mail SMTP.

Default
,

d'accord merci mais **** il te faut envoyer le mail quand tu enregistres le message privé en base de donnée . Ainsi celui-ci recevra un email à chaque réception de message privé.****

oui alors comment je peux coordonner mes deuxcodes pour faire cela j'ai le code pour enregistrer lesmsg privés :

ici

    if($dn1['recipid']!=$_SESSION['userid'])
            {
                $id = $dn1['npm']+1;
                //On envoi le message
                if(mysql_query('insert into pm (id, id2, title, user1, user2, message, timestamp, user1read, user2read)values("'.$id.'", "1", "'.$title.'", "'.$_SESSION['userid'].'", "'.$dn1['recipid'].'", "'.$message.'", "'.time().'", "yes", "no")'))
                {
    ?>
    <div class="message">Le message a bien &eacute;t&eacute; envoy&eacute;.<br />
    <a href="list_pm.php">Liste de mes messages priv&eacute;s</a></div>




et il faut que je coordone avec :

$to = '$email_address';
$email_subject = "blabla";
$email_body = "blabla";
$headers = "From:noreply_AnimalsFamily";
mail($to,$email_subject,$email_body,$headers);
return true;   
17162
,

oui alors comment je peux coordonner mes deuxcodes

Parfois je me demande si tu ne le fais pas exprés.
Il paraît quand même logique que pour que deux codes s'exécutent successivement, qu'ils doivent se situer sur la même page et notamment l'un après l'autre, tout du moins techniquement.
Dans la pratique il y a plusieurs méthodes selon la structure du projet.
Si c'est du code brut, soit directement écrit dans le même fichier l'un après l'autre, si c'est en utilisant des fonctions, écrire l'un et/ou l'autre code dans une/des fonction(s) puis inclure le/les fichier(s) et appeler la/les fonction(s) concernée(s), si c'est en utilisant des classes, c'est relativement semblable à la seconde méthode, sauf que dans ce cas là on instancie la classe et on appelle le/les méthode(s).
Ce serait quand même bien que tu comprennes les codes que tu copies, car lorsque l'on voit un code du genre :

include('*******.php');   /* connection à BDD */

$email_address = $_POST['email'];

$to = '$email_address';
$email_subject = "blabla";
$email_body = "blabla";
$headers = "From:quoi mettre ici";
mail($to,$email_subject,$email_body,$headers);
return true;

Il semble évident que c'est un code que tu as recopié mais que tu n'as pas compris, car tu nous montre ce code qui n'a rien à voir avec ton système, puisque dans un système de messagerie privées, l'utilisateur n'a pas besoin d'indiquer son adresse email, tout du moins pas à chaque fois qu'il veut envoyer un message privé.
Tu ne dois donc pas récupérer l'adresse email du destinataire via un formulaire, mais plutôt en base de données.
Tu sembles être quelqu'un qui a besoin d'être assisté et si c'est bien le cas, ne t'attends pas à ce que ce soit le cas en développement, par conséquent nous n'allons pas créer le code qu'il te faut à ta place.

17162
,

Essaie de migrer progressivement vers l'utilisation d'un framework

Il est un peu trop tôt pour lui donner ce genre de conseil, surtout pour quelqu'un à qui il manque cruellement certaines connaissances de base du PHP et plus particulièrement de logique générale.
En effet, rien que de poser le genre de question : comment je peux coordonner mes deuxcodes, ne pas comprendre qu'il faut qu'il les places l'un après l'autre, ça prouve qu'il manque de logique personnelle.
Donc lui proposer d'utiliser un Framework, même si ce n'est pas dans l'immédiat, il va continuellement venir poser des questions du genre : Je n'arrive pas à me connecter à la base de données, où dois-je faire la configuration de celle-ci ?, sans même se référer à la documentation du Framework utilisé.
Il est donc largement préférable d'attendre qu'il ait plus de connaissances sur le PHP et qu'il ait acquis une meilleure logique personnelle, avant de lui faire ce genre de proposition/conseil.
Par contre, je n'en ai pas parlé dans mon précédent message, mais je te rejoins sur le fait qu'il devrait suivre plusieurs tutoriels du site, en partant des bases bien sûr, c'est dommage que le projet de Grafikart concernant la réorganisation des tutoriels/formations du site lui prenne autant de temps, car ça aurait été bien utile à l'auteur de ce sujet.

Default
,

'Tu ne dois donc pas récupérer l'adresse email du destinataire via un formulaire, mais plutôt en base de données.'

pour régler cela j'ai fait :

<?php
$sujet = 'Sujet de l\'email';
$message = "bla,<br />
<strong>blabla</strong><br />
blabla";
$destinataire = '<?php echo htmlentities($dnn['email']); ?>';
$headers = "From: \"expediteur moi\"<moi@domaine.com>\n";
$headers .= "Reply-To: moi@domaine.com\n";
$headers .= "Content-Type: text/html; charset=\"iso-8859-1\"";
if(mail($destinataire,$sujet,$message,$headers))

?>

Mais je ne sais toujours pas comment le coordonné avec le code préceédent . Je le sais que je dois les mettre sur la même page l'un après l'autre je suis pas totalement crétin mais je ne sais pas comment les faire suivre comment adapter le code en fait ...

143376
,

" je suis pas totalement crétin mais je ne sais pas comment les faire suivre comment adapter le code en fait ...",
en lisant ce passage plus tous les autres post, si tu es un crétin dans le sens que c'est toi qui te fait passer pour un crétin, Lartak et SaintCyr, t'ont donné tout les éléments que tu as besoin et tu n'y arrives toujours pas, Comme dit, avant de vouloir faire des choses qui te dépassent car tu ne comprend pas, vas voir les bases du langages et go travailler ta logique

Default
,

j'ai finni par trouver merci de votre aide à tous :)

Default
,

Bon je reviens vers vous car je galère pour le $to = '';

je sais pas quoi mettre ici pour que ça selectionne l'email et là j'ai cherché pendant longtemps sans succès donc c'est pas faute d'avoir pas réfléchis dessus please help


 $dnn = mysql_query('select email from users where id="'.$id.'"');

if(mysql_query('insert into pm (id, id2, title, user1, user2, message, timestamp, user1read, user2read)values("'.$id.'", "1", "'.$title.'", "'.$_SESSION['userid'].'", "'.$dn1['recipid'].'", "'.$message.'", "'.time().'", "yes", "no")'))
                {$to = '<?php echo htmlentities($dnn['email']); ?>';

$email_subject = "blabla";
$email_body = "VOUS AVEZ UN MESSAGE NON-LU !\n\n"."Ici les details:\nBonjour , vous avez un message reçu \nRendez vous sur le site pour lire le message blabla ";
$headers = "From: noreply@zjfiehufhiehfuuiefr\n";
$headers .= "Reply-To: nope";
mail($to,$email_subject,$email_body,$headers);
17162
,

J'usqu'à présent j'ai fais en sorte d'être poli avec toi, mais là tu vas trop loin, tu te moques vraiment de nous.
Je t'ai déja dit, que quand tu copies/colles du code, fais au moins en sorte de le comprendre.
Car dans l'un tu as une variable nommé to puis dans l'autre destinataire du coup tu es perdu et tu ne sais plus à quoi elles correspondent ?

Bon je reviens vers vous car je galère pour le $to = ''; je sais pas quoi mettre ici pour que ça selectionne l'email

Je te l'ai déjà dit, il te faut récupérer l'adresse email du destinataire dans ta base de données.
Ensuite, si tu veux envoyer le contenu d'un email sous le format HTML, il te faut respecter le balisage prévu pour une page HTML, donc encore une fois, consultes des tutoriels, surtout que si tu envoies du texte fictif, le destinataire ne risque pas de comprendre pourquoi il reçoit cet email.
Pour terminer, qu'est-ce que c'est que ce code là :

$destinataire = '<?php echo htmlentities($dnn['email']); ?>';

Tu ouvres une balise php alors que la précédente n'est pas fermée ?
Au lieu de venir nous demander de l'aide, revoies immédiatement les bases du langage, car là tu nous fais vraiment tourner en bourrique.

Default
,

il te faut récupérer l'adresse email du destinataire dans ta base de données.

mais je croyais que avec $dnn j'avais fait ça ?! (au risque de me faire encore traiter d'imbécile ...)

17162
,

mais je croyais que avec $dnn j'avais fait ça ?!

Dans le code que j'avais lu lorsque j'ai créé mon message, la requête SQL ne figurait pas dans le code de ton message et puis si tu savais comment récupérer la valeur pour définir la variable, pourquoi poser la question ?
Par contre même avec ton code modifié tu as toujours des erreurs, soit par exemple :

// Syntaxe incorrecte, voir mon précédent message
$to = '<?php echo htmlentities($dnn['email']); ?>';

Ensuite ta requête SQL c'est à s'y perdre, on dirait que tu mets la même valeur dans plusieurs champs, j'ai quand même du mal à comprendre la différence entre les champs id et id2, puis user1 et user2, alors que les quatres champs semblent être liées à des id d'utilisateurs, puis il est totalement inutile de définir des headers pour le mail qui ne servent absolument pas, comme par exemple : Reply-To: nope, quel est l'intérêt de cet header ?
Pour terminer, c'est quoi cet adresse email : noreply@zjfiehufhiehfuuiefr ?

Default
,

puis il est totalement inutile de définir des headers pour le mail qui ne servent absolument pas, comme par exemple : Reply-To: nope, quel est l'intérêt de cet header ?
j'avoue que c'est idiot j'ai supprimé ça .

Pour terminer, c'est quoi cet adresse email : noreply@zjfiehufhiehfuuiefr ?
c'est pas la vrai j'ai modifié^^

si tu savais comment récupérer la valeur pour définir la variable, pourquoi poser la question ?
je sais faire $dnn = mysql_query('select email from users where id="'.$id.'"');
ensuite je sais aussi faire $email = htmlentities($dnn['email'], ENT_QUOTES, 'UTF-8');
mais pour le $to ou $destinataire (c'est pareil au fond^^) j'ai tout essayé mais rien ne fonctionne je trouve pas...
la derniere chose que j'ai essayé c'est $to = 'echo $email;'; mais ça n'est pas ça non plus...

au fait merci pour ta patience XD

17162
,

$to = 'echo $email;';

Comme je te l'ai dit, revoies les bases du langage, car ce code n'a aucun sens.
Ce code là va juste donner ceci comme valeur à la variable $to: echo $email;, que ce soit le echo ou la variable $email, aucun des deux ne sera interprété.
Pour preuve : Suivre ce lien et cliquer sur le bouton : Execute code.

1