Envoi mail multi-destinataire et multi-champ
Paname
-
JPLO -
JPLO -
Bonjour à tous,
Je cherche à réaliser un formulaire d'envoi d'email, en apparence asser simple, avec plusieurs destinataires. Ce formulaire doit posséder 6 champs de saisie de texte.
1er champ : Votre mail
2e champ : Destinataire 1
3e champ : Destinataire 2
4 e champ : Destinataire 3
5e champ Sujet de votre message
6e champ : Message
Terminer par valider
J'ai trouvé des scripts qui le réalisaient mais aucun qui prenait en compte l'adresse inscrite dans les 3 champs "destinataires". Quelqu'un a-t-il trouvé le sésame ?
Merci infiniment à ceux qui trouveront
Je cherche à réaliser un formulaire d'envoi d'email, en apparence asser simple, avec plusieurs destinataires. Ce formulaire doit posséder 6 champs de saisie de texte.
1er champ : Votre mail
2e champ : Destinataire 1
3e champ : Destinataire 2
4 e champ : Destinataire 3
5e champ Sujet de votre message
6e champ : Message
Terminer par valider
J'ai trouvé des scripts qui le réalisaient mais aucun qui prenait en compte l'adresse inscrite dans les 3 champs "destinataires". Quelqu'un a-t-il trouvé le sésame ?
Merci infiniment à ceux qui trouveront
Configuration: Windows XP Firefox 3.0.5
5 réponses
-
cela ne fonctionne pas avec des champs à remplir.
Bien sûr que si ! Une adresse email est toujours une chaîne de caractère, qu'elle vienne d'un champ à saisir ou qu'elle apparaisse telle quelle dans le code. Tu peux TOUJOURS l'entourer de <> et en mettre plusieurs bout à bout en les séparant par de virgules.
$to=''; // récupérer les destinataires $dest1 = isset($_POST['destinaire1'])) ? trim($_POST['destinaire1'])) :''; $dest2 = isset($_POST['destinaire2'])) ? trim($_POST['destinaire2'])) :''; $dest3 = isset($_POST['destinaire3'])) ? trim($_POST['destinaire3'])) :''; if ($dest1 != '') $to.='<'.$dest1.'>, '; if ($dest2 != '') $to.='<'.$dest2.'>, '; if ($dest3 != '') $to.='<'.$dest3.'>, '; // enlever la virgule et l'espace à la fin if (strlen($to)>0) $to=substr($to,0,-2);
Je n'ai pas testé, il peut y avoir des erreurs, mais c'est l'idée.-
Merci pour ces réponses, mais je ne trouve pas mon erreur. Je me permets de poster le code. Il y a peut-être des erreurs qui ne m'ont pas sautés aux yeux.
Merci en tout cas Toto
<form action="" method="post">
<p><label>Votre Adresse E-mail :</label>
<input type="text" class="forml" name="email" id="email" value="" size="30" /></p>
<p><label>Mail 1 :</label>
<input type="text" class="forml" name="destinaire1" id="destinaire1" value="" size="30" /></p>
<p><label>Mail 2 :</label>
<input type="text" class="forml" name="destinaire2" id="destinaire2" value="" size="30" /></p>
<p><label>Mail 3 :</label>
<input type="text" class="forml" name="destinaire3" id="destinaire3" value="" size="30" /></p>
<p><label>Sujet de votre Message :</label>
<input type="text" class="forml" name="sujet" id="sujet" value="" size="30" /></p>
<p><label>Votre message :</label>
<textarea class="forml" name="message" id="message" rows="10" cols="40"></textarea></p>
<div align="right"><input type="submit" name="valide" value="Envoyer" /></div>
</fieldset>
</form>
<?php
$Mail = $_POST['email'];
$Sujet = $_POST['sujet'];
$Message = $_POST['message'];
$to='';
// récupérer les destinataires
$dest1 = ($_POST['destinaire1'])) ? trim($_POST['destinaire1'])) :'';
$dest2 = ($_POST['destinaire2'])) ? trim($_POST['destinaire2'])) :'';
$dest3 = ($_POST['destinaire3'])) ? trim($_POST['destinaire3'])) :'';
if ($dest1 != '') $to.='<'.$dest1.'>, ';
if ($dest2 != '') $to.='<'.$dest2.'>, ';
if ($dest3 != '') $to.='<'.$dest3.'>, ';
// enlever la virgule et l'espace à la fin
if (strlen($to)>0) $to=substr($to,0,-2);
$mailheaders = "From:".$Mail."\n";
$mailheaders .= "To:".$to."\n";
$mailheaders .= "Reply-To: No reply <>\n\n";
mail($to, $Sujet, $Message, $mailheaders);
?>
-
-
Bonjour
Il suffit d'entourer les adresses de <> et de les mettre séparées par une virgule :
$to='<adresse1@fai.fr>, <adresse2@fai.fr>, <adresse2@fai.fr>';-
Bonjour toto et merci pour ta réponse !
Hélas cela ne fonctionne pas avec des champs à remplir...
Ton astuce fonctionne très bien si j'inscris dans le code, les afresse e-mail, mais si je souhaite laisser linternaute renseigner les champs et valider, cela ne fonctionne plus.
J'ai bien essayé de leur mettre un id, mais le code ne semble pas le prendre en compte.... tu sais pourquoi ?
Merci toto et bon week-end
-
-
Je t'avais prévenu que je n'avais pas testé...
J'avais laissé quelques parenthèses en trop :
$dest1 = $_POST['destinaire1'] ? trim($_POST['destinaire1']) :'';
(idem autres lignes)
De plus, tout le traitement du formulaire ne doit être fait que si le formulaire a été saisi : tu dois ajouter if (isset($_POST['valide'])) {...-
Génial ! avec ces recomandations, le code fonctionne. Seul hic (de taille) les destinataires reçoivent le mail deux fois (et le champ "to" des boites mail affiche les destinataires (pas très confidentiel). Tu sais d'où cela provient ?
J'ai procédé à un lifting poussé du code et ça fonctionne toujours. J'espère ne pas en avoir trop sorti.
<form action="" method="post">
<p><label>Votre Adresse E-mail :</label>
<input type="text" class="forml" name="email" value="" size="30" /></p>
<p><label>Mail 1 :</label>
<input type="text" class="forml" name="destinaire1" value="" size="30" /></p>
<p><label>Mail 2 :</label>
<input type="text" class="forml" name="destinaire2" value="" size="30" /></p>
<p><label>Mail 3 :</label>
<input type="text" class="forml" name="destinaire3" value="" size="30" /></p>
<input type="hidden" class="forml" name="sujet" value="Un ami vous recommande ce site" size="30" /></p>
<p><label>Votre message :</label>
<textarea class="forml" name="message" rows="10" cols="40"></textarea></p>
<div align="right"><input type="submit" name="valide" value="Envoyer" /></div>
</fieldset>
</form>
<?php
$Mail = $_POST['email'];
$Sujet = $_POST['sujet'];
$Message = $_POST['message'];
$to='';
// récupérer les destinataires
$dest1 = $_POST['destinaire1'];
$dest2 = $_POST['destinaire2'];
$dest3 = $_POST['destinaire3'];
if (isset($_POST['valide']));
$to.='<'.$dest1.'>, ';
$to.='<'.$dest2.'>, ';
$to.='<'.$dest3.'>, ';
$mailheaders = "From:".$Mail."\n";
$mailheaders .= "To:".$to."\n";
$mailheaders .= "Reply-To: No reply <>\n\n";
mail($to, $Sujet, $Message, $mailheaders);
?>
-
-
les destinataires reçoivent le mail deux fois Alors c'est que d'une manière ou d'une autre, tu l'appelles deux fois (ou tu mets deux fois la même adresse de destinataire). Le script par lui-même n'envoie pas le mail deux fois, je peux te le garantir.
le champ "to" des boites mail affiche les destinataires Bien sûr, le but de la manip c'était d'envoyer le mail à plusieurs personnes. Tu n'avais pas précisé que tu voulais cacher les noms de destinataires !
Pour cacher les destinataires, il suffit de les mettre dans le champ Cci:// enlever la virgule et l'espace à la fin if (strlen($to)>0) $to=substr($to,0,-2); $mailheaders = "From:".$Mail."\n"; $mailheaders .= "To:\n"; $mailheaders .= "Cci:".$to."\n"; $mailheaders .= "Reply-To: No reply <>\n\n";
Attention, il n'y aura plus aucun nom dans le destinataire. Si tu veux quand même que le nom apparaisse, alors tu es obligé de faire 3 envois de mails normaux.
Pourquoi ne pas avoir tenu compte de la remarque De plus, tout le traitement du formulaire ne doit être fait que si le formulaire a été saisi : tu dois ajouter if (isset($_POST['valide'])) {... ? -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
Bonjour
à tu trouvé l'astuce
cela fait plusieurs semaines que je désire faire la méme chose.
Je voudrai en plus mettre une phrase que les destinataires recoivent du genre j'ai apprécié se site.
Je précise que je suis nul en php
merci