Envoi mail multi-destinataire et multi-champ

Paname -  
 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
A voir également:

5 réponses

toto
 
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.
1
Paname
 
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);



?>
0
toto
 
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>';
0
Paname
 
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
0
toto
 
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'])) {...
0
Paname
 
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);

?>
0
toto
 
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'])) {... ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
JPLO
 
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
0