ENVOI D UN MAIL SUR UNE PAGE WEB MULTIUTILISATEUR

cs_Springer Messages postés 85 Date d'inscription lundi 14 juillet 2003 Statut Membre Dernière intervention 14 mars 2007 - 12 déc. 2006 à 09:05
MoulouD1993 Messages postés 28 Date d'inscription mardi 7 avril 2009 Statut Membre Dernière intervention 28 janvier 2012 - 6 août 2009 à 17:36
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/40683-envoi-d-un-mail-sur-une-page-web-multiutilisateur

MoulouD1993 Messages postés 28 Date d'inscription mardi 7 avril 2009 Statut Membre Dernière intervention 28 janvier 2012
6 août 2009 à 17:36
ya il un bug
cs_twisteurwin Messages postés 167 Date d'inscription mardi 21 septembre 2004 Statut Membre Dernière intervention 2 mai 2009
14 déc. 2006 à 17:14
Malalam> Ok je viens de voir que y a d'autres paramètres à prendre en considération comme dans cet exemple que j'ai eu avant dans ma boîte.
- le SMTP est parametré sur un serveur distant géré par un proxy qui filtre et qui plante 1 envoi sur 10 ... évidemment la le test risque d'etre plus complexe que de vérifier ou non la présence de la fonction mail je te l'accorde...

Alors shuntons peu mais shuntons bien ^^
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
14 déc. 2006 à 17:09
Voila... .. !

Rien à rajouter si ce n'est que si la fonction mail() est désactivée de mémoire cela génere une erreur arrêtant dans la foulée l'éxécution du script donc le @ ne sert à rien et n'est pas la pour ça... .. .

Muarf on va finir par y arriver... lOoOl... .. .

@ tchaOo°
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
14 déc. 2006 à 16:30
Je m'immisce...
...Sauf que le fait que la fonction soit ou non activée n'est pas la seule possibilité pour que mail () renvoie une erreur.
Ensuite, quand on code, on essaye de coder générique (autant que possible). Et plutôt que d'avoir à repasser dans le code quand on change d'hébergeur, ou copie le code sur un autre site...autant prévoir le coup avant.
Bref, ce qui est mauvais, c'est ça:
@mail (bla bla);
Mais :
if (false === @mail (bla bla)) {
// gestion des erreurs
}
ça, c'est bien codé.
Perso, en production, mon serveur est en error_reporting à 0. Et j'utilise mon debugger qui intercepte toutes les erreurs et exceptions, et les logge.
Donc mes codes ressemblent à ça :

if (false === @mail (bla bla)) {
throw new myMailException (myMailException::MAIL_NOT_SENT);
}
cs_twisteurwin Messages postés 167 Date d'inscription mardi 21 septembre 2004 Statut Membre Dernière intervention 2 mai 2009
14 déc. 2006 à 16:00
kankrelune > Tout a fait d'accord avec toi perso je ne le shunte pas...
A savoir que la remarque de IPC suffit à y répondre, on sait d'avance si la fonction mail est activé ou non donc chacun son usine à gaz ^^
Cependant un simple test suffierai à virer le @ en testant si la fonction est activé ou pas dès le départ du script avant même de créer l'émail... je vais essayer de la faire
+++
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
14 déc. 2006 à 10:48
@ twisteurwin...

Tu n'as pas compris ce que je voulais te dire... .. .

Tout d'abord le @ n'est en aucun cas déprécié c'est juste qu'il ne faut pas en abuser comme le font certain codeurs et ne l'utiliser que dans des cas bien précis (par ex ici) sinon c'est prendre des mauvaises habitude de codage en le mettant partout et en ne gérant pas l'erreur correspondante... .. .

Ici le but est de shunter l'affichage d'un warning au cas ou error_reporting ne serait pas à 0... mais si tu regarde bien le code la réussite ou l'échec de l'envoi du mail est quand même testé par la condition...

if(@mail($to, 'Mail depuis le formulaire de contact', $_POST['champTexte'], $entete)){
// Mail envoyé ;-)
echo '
Votre mail a bien été envoyé à ',$_POST['choixMail'],'.
',"\r\n";
}else{
// Erreur ! Impossible d' envoyer le mail
echo '
Suite à une erreur, votre mail n'a pu être envoyé.
Veuillez recommencer.
',"\r\n";
}

le @ ne shunte pas la valeur retournée il shunte l'affichage d'un message d'erreur de php tout comme le ferait error_reporting(0) mais pour une seule instruction... .. .

Voili voilou...

@ tchaOo°
cs_twisteurwin Messages postés 167 Date d'inscription mardi 21 septembre 2004 Statut Membre Dernière intervention 2 mai 2009
13 déc. 2006 à 17:58
Ok ok une fois de plus je me riddiculise en public lol
Kankrelune>Ok mais avoue quand même que le @ se déprécie donc je cherche à optimiser ce point peut être en renvoyant un test à FALSE en faisant une structure conditionnelle avec la fonction mail() et bloquer son utilisation dès le départ tu vois ?

IPC> je sais très bien que tu codes mieux que moi mais j'essaye de te trouver une faille... la tâche est rude ^^
:-)
ImmortalPC Messages postés 954 Date d'inscription mardi 11 mai 2004 Statut Membre Dernière intervention 11 novembre 2008 2
13 déc. 2006 à 16:40
Salut,

>> Twisteurwin
"Ok c'est plus optimisé ! Pour le '."\r\n" et tout..."
>Je sais ;-) merci

"Par contre tu as nouveau codé comme un poney et tu as mélangé les , et les . [ex:(',"\r\n"; et les '."\r\n")...]"
>:@ codé comme un poney moi !?
Pour les echo on met des , et pour les variables des .

"if(@mail... c'est pas du mauvais code ca ?!"
> Plus ou moins, normalement c' est pas bien mais là on fait disparaitre le message d' erreur pour le remplacer par un autre.

"On pourrait tester si la fonction mail() est ok ou pas, ca serait mieux codé nan ?"
>Généralement on sait quand on à la fonction mail activé donc pas besoin ;-)
En plus rare sont les malchanceux qui n' ont pas la fonction mail.

"ps:Pour info (ctrl+c, ctrl+v) = copié, collé ^^"
>mdr => click droite ;-)

@+
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
13 déc. 2006 à 16:09
"if(@mail... c'est pas du mauvais code ca ?!
On pourrait tester si la fonction mail() est ok ou pas, ca serait mieux codé nan ?"

Non car mail() génère un warning en cas d'echec il faut donc le shunter avec @ la condition étant là pour vérifier si ça a échoué ou pas... .. .

@ tchaOo°
cs_twisteurwin Messages postés 167 Date d'inscription mardi 21 septembre 2004 Statut Membre Dernière intervention 2 mai 2009
13 déc. 2006 à 15:46
Hello world!
IPC> quel comique ton frère ^^ qu'il s'échauffe 2, 3 ans...
Ok c'est plus optimisé ! Pour le '."\r\n" et tout...

Par contre tu as nouveau codé comme un poney et tu as mélangé les , et les . [ex:(',"\r\n"; et les '."\r\n")...]

J'ai fais exprès de créer une variable $lemessage que j'ai volontairement concaténé pour "angelz" pour qu'il puisse s'y retrouver dans la lecture ...

if(@mail... c'est pas du mauvais code ca ?!
On pourrait tester si la fonction mail() est ok ou pas, ca serait mieux codé nan ?
ps:Pour info (ctrl+c, ctrl+v) = copié, collé ^^
ImmortalPC Messages postés 954 Date d'inscription mardi 11 mai 2004 Statut Membre Dernière intervention 11 novembre 2008 2
13 déc. 2006 à 10:38
Salut,

Dsl pour le "Tout le monde" :S je me suis planté en faisant un copié collé :S

>> Twisteurwin
ca fait plaisir de de revoir aussi (je te vois plus sur msn tu te caches ??)
Pour medal mon frère dis que t' es un homme mort (mdr)

Pour ce qui est de ton ajout ça marche pas térrible non plus chez free :S et en plus c' est pas optimisé :@

Voilà le code remanié ;-)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Multi-Mail</title>
<?php
// On définit les destinataires possibles
$listeDesMails = array (/*
'peter' => 'test@domaine.be',
'gabriel' => 'test2@domaine.com',
'ted' => 'test3@hotmail.com',
'gugule' => 'trate@jecpac.com'*/
'IPC' => 'www.immortalpc@free.fr'
);
?>
</head>


<form action="<?php echo $_SERVER['REQUEST_URI']; ?>" method="post" enctype="application/x-www-form-urlencoded" style="margin:0px; padding:0px;">
<?php
// On vérifit que le formulaire a été envoyé
if(IsSet($_POST['choixMail'], $_POST['realname'], $_POST['email'], $_POST['sujet'], $_POST['champTexte'])){
// On vérifit que la personne à bien choisi le destinataire
if($_POST['choixMail'] === 'Tout le monde'){
$to = implode(', ', $listeDesMails);
}elseif($_POST['choixMail'] && IsSet($listeDesMails[$_POST['choixMail']])){
$to = $listeDesMails[$_POST['choixMail']];
}else{
echo '
Veuillez choisir un destinataire ! Merci.
',"\r\n";
}

// On vérifit que la personne à bien entré son Nom
if(!$_POST['realname']){
echo '
Veuillez entrer votre Nom ! Merci.
',"\r\n";
}

// On vérifit que la personne à bien entré son Email
if(!$_POST['email']){
echo '
Veuillez entrer votre adresse Email ! Merci.
',"\r\n";
}

// On vérifit que la personne à bien entré son message
if(!$_POST['champTexte']){
echo '
Veuillez entrer votre message ! Merci.
',"\r\n";
}

// Si tout est ok on envoie le mail
if(IsSet($to) && $_POST['realname'] && $_POST['email'] && $_POST['champTexte']){
// On défini l'entête de l'email
$frontiere = '-----=' . md5(uniqid(mt_rand()));// Génère la frontière de l'email entre le txt et l'html
// Création des entêtes
$entete = 'From: "'.$_POST['realname'].'"<'.$_POST['email'].'>'."\r\n"
.'MIME-Version: 1.0'."\r\n"// Le type mime
.'Content-Type: multipart/alternative; boundary="'.$frontiere.'"';
// On défini le message de l'email
$_POST['champTexte'] = '--'.$frontiere."\r\n"
.'Content-Type: text/html; charset="iso-8859-1"'."\r\n"
.'Content-Transfer-Encoding: 8bit'."\r\n\r\n"
.'De : "'.$_POST['realname'].'"<'.$_POST['email'].'>'."\r\n"
.'Sujet : '.$_POST['sujet']."\r\n"
.'Message :'."\r\n"
.'*********'."\r\n"
.$_POST['champTexte']."\r\n"
.'--'.$frontiere.'--'."\r\n";

if(@mail($to, 'Mail depuis le formulaire de contact', $_POST['champTexte'], $entete)){
// Mail envoyé ;-)
echo '
Votre mail a bien été envoyé à ',$_POST['choixMail'],'.
',"\r\n";
}else{
// Erreur ! Impossible d' envoyer le mail
echo '
Suite à une erreur, votre mail n'a pu être envoyé.
Veuillez recommencer.
',"\r\n";
}
}
}
?>
<label for="choixMail">Destinataire :</label>,
<select id="choixMail" name="choixMail">
<option value="0" selected="selected">Choisissez un destinataire...</option>
<option value="Tout le monde">Tout le monde</option>
<?php
foreach($listeDesMails as $prenom => $adresseMail){
echo '<option value="',$prenom,'">',$prenom,'</option>',"\r\n";
}
?>
</select>,

----
<label for="realname">Votre Nom :</label>,
,

----

<label for="email">Votre Email :</label>,
,

----

<label for="sujet">Sujet :</label>,
,
----

<label for="champTexte" style="font-weight:bolder;">Message :</label>

<textarea cols="50" rows="6" id="champTexte" name="champTexte"></textarea>



-
</form>
</html>

@+
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
13 déc. 2006 à 10:32
Dans ce cas c'est sur le forum qu'il faut poster... pas dans les sources... .. . ;o)

remplace...

if(@mail($listeDesMails[$_POST['choixMail']], 'Mail depuis le formulaire de contact', $_POST['champTexte'], $entete)){

par

if(@mail($to, 'Mail depuis le formulaire de contact', $_POST['champTexte'], $entete)){

@ tchaOo°
angelz Messages postés 67 Date d'inscription jeudi 22 septembre 2005 Statut Membre Dernière intervention 11 avril 2013
13 déc. 2006 à 01:58
merci beaucoup pour votre aide ca m'aide beaucoup
tout marche avec le script remanier par twisteurwin
sauf le tout le monde...
a chaque fois ca me dis mail pas envoyer erreur veuille recommencer...
une solution?
je c je suis lourd mais bon on est nul ou on l es pas lol ;)
merci
cs_twisteurwin Messages postés 167 Date d'inscription mardi 21 septembre 2004 Statut Membre Dernière intervention 2 mai 2009
12 déc. 2006 à 18:09
Salut,
IPC ! ca fait plaisir de de revoir ^^
Je peux juste ajouter ceci si tu me le permet:
===========================================
...
// On défini l'entête de l'email
$frontiere = '-----=' . md5(uniqid(mt_rand()));// Génère la frontière de l'email entre le txt et l'html
// Création des entêtes
$entete = 'From: "'.$_POST['realname'].'"<'.$_POST['email'].'>';
$entete.= 'MIME-Version: 1.0'."\n";// Le type mime
$entete.= 'Content-Type: multipart/alternative; boundary="'.$frontiere.'"';
// On défini le message de l'email
$lemessage = '--'.$frontiere."\n";
$lemessage.= 'Content-Type: text/html; charset="iso-8859-1"'."\n";
$lemessage.= 'Content-Transfer-Encoding: 8bit'."\n\n";
$lemessage.= $_POST['champTexte']'."\n";
$lemessage.= '--'.$frontiere.'--'."\n";

// On envoi l'E-mail
if(@mail($listeDesMails[$_POST['choixMail']], 'Mail depuis le formulaire de contact', $lemessage, $entete)){
...
===========================================
Je met ca car avec free je ne recevais pas mes émails au format html.
@+++ ma poule et j'ai repris medal dis le a on frère lol
ciao all
ImmortalPC Messages postés 954 Date d'inscription mardi 11 mai 2004 Statut Membre Dernière intervention 11 novembre 2008 2
12 déc. 2006 à 17:02
Salut,

Beaucoup d' erreurs !!
1) <? -> <?php
2) pas de <?= ?>
3) Non valide XHTML

Voilà ton code mixé par moi ;-)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Multi-Mail</title>
<?php
// On définit les destinataires possibles
$listeDesMails = array (
'peter' => 'test@domaine.be',
'gabriel' => 'test2@domaine.com',
'ted' => 'test3@hotmail.com',
'gugule' => 'trate@jecpac.com'
);
?>
</head>


<form action="<?php echo $_SERVER['REQUEST_URI']; ?>" method="post" enctype="application/x-www-form-urlencoded" style="margin:0px; padding:0px;">
<?php
// On vérifit que le formulaire a été envoyé
if(IsSet($_POST['choixMail'], $_POST['realname'], $_POST['email'], $_POST['sujet'], $_POST['champTexte'])){
// On vérifit que la personne à bien choisi le destinataire
if($_POST['choixMail'] === 'Tout le monde'){
$to = implode(', ', $listeDesMails);
}elseif($_POST['choixMail'] && IsSet($listeDesMails[$_POST['choixMail']])){
$to = $listeDesMails[$_POST['choixMail']];
}else{
echo '
Veuillez choisir un destinataire ! Merci.
',"\r\n";
}

// On vérifit que la personne à bien entré son Nom
if(!$_POST['realname']){
echo '
Veuillez entrer votre Nom ! Merci.
',"\r\n";
}

// On vérifit que la personne à bien entré son Email
if(!$_POST['email']){
echo '
Veuillez entrer votre adresse Email ! Merci.
',"\r\n";
}

// On vérifit que la personne à bien entré son message
if(!$_POST['champTexte']){
echo '
Veuillez entrer votre message ! Merci.
',"\r\n";
}

// Si tout est ok on envoie le mail
if(IsSet($to) && $_POST['realname'] && $_POST['email'] && $_POST['champTexte']){
// Création des entêtes
$entete = 'From: "'.$_POST['realname'].'"<'.$_POST['email'].'>';

$_POST['champTexte'] = 'De : "'.$_POST['realname'].'"<'.$_POST['email'].'>'."\r\n"
.'Sujet : '.$_POST['sujet']."\r\n"
.'Message : '."\r\n"
.'---------'."\r\n"
.$_POST['champTexte'];

if(@mail($listeDesMails[$_POST['choixMail']], 'Mail depuis le formulaire de contact', $_POST['champTexte'], $entete)){
// Mail envoyé ;-)
echo '
Votre mail a bien été envoyé à ',$_POST['choixMail'],'.
',"\r\n";
}else{
// Erreur ! Impossible d' envoyer le mail
echo '
Suite à une erreur, votre mail n'a pu être envoyé.
Veuillez recommencer.
',"\r\n";
}
}
}
?>
<label for="choixMail">Destinataire :</label>,
<select id="choixMail" name="choixMail">
<option value="0" selected="selected">Choisissez un destinataire...</option>
<option value="Tout le monde">Tout le monde</option>
<?php
foreach($listeDesMails as $prenom => $adresseMail){
echo '<option value="',$prenom,'">',$prenom,'</option>',"\r\n";
}
?>
</select>,

----
<label for="realname">Votre Nom :</label>,
,

----

<label for="email">Votre Email :</label>,
,

----

<label for="sujet">Sujet :</label>,
,
----

<label for="champTexte" style="font-weight:bolder;">Message :</label>

<textarea cols="50" rows="6" id="champTexte" name="champTexte"></textarea>



-
</form>
</html>

@+
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
12 déc. 2006 à 15:47
En gros c'est un "gestionnaire de mailling list" que tu veux... fais une recherche à ce nom tu trouvera sur ce site et sur le web en général... .. .

@ tchaOo°
guisx00 Messages postés 104 Date d'inscription dimanche 23 juillet 2006 Statut Membre Dernière intervention 15 août 2009
12 déc. 2006 à 15:20
oups j'ai rien dit j'ai mal compris je fait pas du multi user mais un choix pour avoir tout les users en liste deroulante dsl sa te servira ptet

@++
guisx00 Messages postés 104 Date d'inscription dimanche 23 juillet 2006 Statut Membre Dernière intervention 15 août 2009
12 déc. 2006 à 15:15
va voir ma source je l'utilise le multi user moi

http://www.phpcs.com/codes/ESPACE-MEMBRE-AVEC-MESSAGERIE-V2_40452.aspx

<?php
//Liste deroulante des membres
include ("../config.php");
$sql = "SELECT pseudo FROM gx_user";
$req = mysql_query($sql) or die('Erreur SQL !'.$sql.'
' . mysql_error());

while ($donnees_rech = mysql_fetch_array ($req))
{
if ($donnees_rech['pseudo'] == $destinataire)
{
echo "<option selected>' . $donnees_rech['pseudo'] . '</option>";
}
else
{
echo "<option>' . $donnees_rech['pseudo'] . '</option>";
}
}
?>

voila @++
angelz Messages postés 67 Date d'inscription jeudi 22 septembre 2005 Statut Membre Dernière intervention 11 avril 2013
12 déc. 2006 à 12:34
j'ai deja fait le tour des tuto et autre script,
en effet il y a plein scrip pour l'envoie de mail mais pas de masse sur le multiuser
si qlq a une idée??
guisx00 Messages postés 104 Date d'inscription dimanche 23 juillet 2006 Statut Membre Dernière intervention 15 août 2009
12 déc. 2006 à 11:28
oula un peu bizard ton code tu sais il y à plein de tuto sur la toile donc cherche un peu et tu vera parce que la sans avoir teste ta source je suis pratiquement sur quel ne marche pas...!!!
cs_Springer Messages postés 85 Date d'inscription lundi 14 juillet 2003 Statut Membre Dernière intervention 14 mars 2007 1
12 déc. 2006 à 09:05
Bonjour,
dans ta page mail.php ta forme n'est pas ouverte.
Il manque la balise
<form action="formmail.php" method="post" >
et hop la boum comme disait prosper
Rejoignez-nous