#26 2009-10-27 18:22:25

motamot
Nouveau membre
Date d'inscription: 2009-10-21
Messages: 18

Re: Fonction mail() php plusieurs destinataires

ça marche !

Hors ligne

 

#27 2009-10-28 16:46:01

Micky
Equipe O-N
Date d'inscription: 2008-02-23
Messages: 172
Site web

Re: Fonction mail() php plusieurs destinataires

Bon, allez, je me charge de la rédaction de la doc, histoire d'écrire un petit tutoriel wink
Je la met dans la documentation ? Quelle catégorie ?

Hors ligne

 

#28 2009-11-03 00:37:16

motamot
Nouveau membre
Date d'inscription: 2009-10-21
Messages: 18

Re: Fonction mail() php plusieurs destinataires

Je reprends le fil de ce post, car je rencontre à nouveau le même soucis alors que je pensais l'avoir résolu !

A présent, je ne parviens pas à programmer la fonction mail() avec plus de 4 adresses email !!!

Avec 4 adresses email, elle fonctionne. Avec 5 adresses email, elle ne fonctionne plus ! Mes adresses email sont stockées dans une bdd sous la forme d’une chaîne de texte. Elles sont écrites de la façon suivante : destinataire1@fai.com, destinataire2@fai.com, destinataire3@fai.com, destinataire4@fai.com, destinataire5@fai.com, destinataire6@fai.com, …. destinataireN@fai.com

Sachant que la fonction mail n’est pas bridée sur Olympe, comment se fait-il que cela ne fonctionne pas ?

Voici mon bout de code :

Code:

$sql = "SELECT * FROM visites WHERE Validation ='".$session."'";
$resultat = mysql_query($sql);

if(false==($ligne = mysql_fetch_assoc ($resultat)))
    {
        $er = 'Erreur.<br/>';
        echo $er;
    }

if(er!='')
    {
        $Zone1 = $ligne['Zone'];
        $reponse = mysql_query("SELECT Emails FROM Option2 WHERE Zone='$Zone1'");
        if(false==($ligne2 = mysql_fetch_assoc ($reponse)))
            {
                $erreur2 = 'Problème.<br/>';
            }
    }

$mailto = array($ligne2['Emails']);
$mailfrom = $ligne['Mail'];
                        
$ligneobjet = nl2br($ligne['Objet']);
$lignemessage = nl2br($ligne['message']);                        

/* Message2 */
$message2 = '<html><head><title>Message</title></head><body>'.$lignemessage.'</body></html>';
                        
// Préparation des données à envoyer aux destinatires finaux
// Envoyer un mail HTML, type de contenu d'en-tête.
$headers  = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
                        
// additional headers
$headers .= "To: ".$mailto." \r\n";
$headers .= "From: ".$ligne['prenom']." ".$ligne['Nom']." <".$mailfrom."> \r\n";
                        
// Envoi du courrier
for ($i=0;$i<count($mailto);$i++)
    {
        mail($mailto[$i], $ligneobjet, $message2, $headers);
    }

Modération: Mettez votre code entre des balises codes [ code ]votre code[/ code] wink

Hors ligne

 

#29 2009-11-03 09:39:05

Chaussette Trouée
Administrateur
Date d'inscription: 2008-03-21
Messages: 3004

Re: Fonction mail() php plusieurs destinataires

Bonjour,

Pouvez-vous nous faire parvenir le résultat complet de la fonction mail et des arguments lorsque cela ne fonctionne pas ?

Code:

if( mail($mailto[$i], $ligneobjet, $message2, $headers) === FALSE )
{
    $debug = "TO : " . print_r($mailto[$i], true);
    $debug .= "<hr>SUBJECT : " . print_r($ligneobjet, true);
    $debug .= "<hr>MESSAGE: " . print_r($message2, true);
    $debug .= "<hr>HEADERS : " . print_r($headers, true);
    $quota = olympe_quotas();
    $debug .= "<hr>QUOTA : " . print_r($quota[2], true);
    echo nl2br($debug);
}

Vous pouvez envoyer le résultat à l'adresse support@olympe en précisant que cela se rapporte à ce message du forum. Pour mieux comprendre, et si cela est possible pour vous, ne modifiez rien dans les valeurs de retour, les adresses emil,... car il se peut que ce soit lié.

Bien à vous


Une chaussette sans trou, on peut pas mettre son pied dedans...

Hors ligne

 

#30 2009-11-03 13:38:30

Eric
Nouveau membre
Date d'inscription: 2009-07-05
Messages: 5

Re: Fonction mail() php plusieurs destinataires

Et comme ceci ?

// additional headers
// $headers .= "To: ".$mailto." \r\n";
$headers .= "From: ".$ligne['prenom']." ".$ligne['Nom']." <".$mailfrom."> \r\n";

// Envoi du courrier
for ($i=0;$i<count($mailto);$i++)
    {
       $headers2 = "To: ".$mailto[$i]." \r\n";
        mail($mailto[$i], $ligneobjet, $message2, $headers.$headers2);
    }

Dernière modification par Eric (2009-11-03 13:48:03)

Hors ligne

 

#31 2009-11-03 16:47:05

motamot
Nouveau membre
Date d'inscription: 2009-10-21
Messages: 18

Re: Fonction mail() php plusieurs destinataires

Bonjour Eric,

Merci pour votre intérêt à mon problème... J'ai tenté votre proposition, mais rien ne fonctionne, ni avec 4 adresses email, ni avec 5.... Par contre, à chaque fois... le nombre d'adresse email essayé s'ajoute au quota des mails envoyés. Mais rien ne part. Pour mes essais, je simule les adresses mail avec des adresses personnelles factices.

Je me demande si le problème ne vient pas du header...???

Chaussette Trouée, j'ai suivi vos consignes et je vous ai posté le résultat de la requête. Visiblement, les adresses mails ne sont pas lues lorsqu'il y en a 5 même si elles s'ajoutent au quota... Inversement cela fonctionne correctement avec 4 adresses mail....

Hors ligne

 

#32 2009-11-03 21:06:32

motamot
Nouveau membre
Date d'inscription: 2009-10-21
Messages: 18

Re: Fonction mail() php plusieurs destinataires

Je souhaitais convertir ma chaine de texte en tableau.... composé d'autant d'éléments qu'il y a de virgule. Cette chaine de texte est constituée de plusieurs adresses email... et elle rédigée de la manière suivante : dest1@fai.com, dest2@fai.com, dest3@fai.com, .... destN@fai.com

Pour cela, j'ai traité le résultat de ma requête sql de la manière suivante : $mailto = array($ligne2['Emails']);

Normalement, avec 5 adresses emails, je devrais obtenir le chiffre 5 lorsque je fais : echo count($mailto);

En réalité, j'obtiens 1. Ceci signifie que ma chaîne de caractère ne devient pas un tableau composé de 5 éléments, mais elle devient un tableau composé d'1 élément. Ceci signifie que les virgules ne sont pas reconnues comme séparateur...

Normalement, dans le cadre d'un tableau simple, on utilise bien des virgules ?

Hors ligne

 

#33 2009-11-04 10:19:45

Chaussette Trouée
Administrateur
Date d'inscription: 2008-03-21
Messages: 3004

Re: Fonction mail() php plusieurs destinataires

Code:

$mailto = split(', ', $ligne2['Emails']);

Une chaussette sans trou, on peut pas mettre son pied dedans...

Hors ligne

 

#34 2009-11-04 11:49:41

thomas
Responsable Support
Lieu: Namur - Belgique
Date d'inscription: 2008-02-15
Messages: 2523
Site web

Re: Fonction mail() php plusieurs destinataires

Rhooo qu'elle est forte cette chaussette smile


Thomas aka Thomas ~ Olympe-Network Ze team
Responsable Département Support
Project Manager

Nota Bene: Utilisez la fonction recherche et donner le nom de votre compte pour vos requêtes

Hors ligne

 

#35 2009-11-04 21:46:30

motamot
Nouveau membre
Date d'inscription: 2009-10-21
Messages: 18

Re: Fonction mail() php plusieurs destinataires

Je reviens enfin vers vous.... pour remercier tout le monde et bien sûr Chaussette trouée... Mon problème semble enfin résolu ! Voici les lignes finales :

$mailto = split (", ", $ligne2['Emails']);

/* J'ai aussi essayé : explode (", ", $ligne2['Emails']); ça marche mais la requête est un peu plus longue. Finalement split() est mieux. */

$prenom = $ligne['prenom'];
$nom = $ligne['Nom'];
// Envoi du courrier
for ($i=0;$i<count($mailto);$i++)
    {
        $mailto2 = $mailto[$i];
        // Envoyer un mail HTML, type de contenu d'en-tête.
        $headers  = "MIME-Version: 1.0\r\n";
        $headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
        $headers .= "To: ".$mailto2." <".$mailto2."> \r\n";
        $headers .= "From: ".$prenom." ".$nom." <".$mailfrom."> \r\n";
        mail($mailto2, $ligneobjet, $message2, $headers);
        $k = $i+1;
        echo ' Destinataire n°'.$k.' : '.$mailto2.' : OK / ';
    }

Normalement, je sais qu'il n'est pas conseillé de mettre un header dans une boucle.... et j'ai aussi appris que la fonction mail() ne convient pas pour des envois de "masse". Je précise que mon application n'est pas du spam. Cette fonction ne convient pas car elle ouvre un socket à chaque envois de mail, puis le referme. A ce titre le socket pourrait rester ouvert...

Plus tard, je prévois de remplacer cette fonction par une autre plus appropriée. Pour l'instant, je souffle un peu...

Que le mont Olympe est haut !!!

Hors ligne

 

#36 2009-11-05 10:10:19

Chaussette Trouée
Administrateur
Date d'inscription: 2008-03-21
Messages: 3004

Re: Fonction mail() php plusieurs destinataires

Bonjour,

Pour les "sockets" ouverts, nous avons des mécanismes de nettoyage sur nos serveurs.
Mais comme vous l'indiquez, pour les mails de masse, ce n'est pas le plus indiqué, il vaut mieux passer par un SMTP (externe) qui sera plus performant et plus robuste.

L'important c'est que cela fonctionne wink

Bien à vous


Une chaussette sans trou, on peut pas mettre son pied dedans...

Hors ligne

 

#37 2009-11-05 18:43:03

motamot
Nouveau membre
Date d'inscription: 2009-10-21
Messages: 18

Re: Fonction mail() php plusieurs destinataires

Effectivement, la priorité c’est une fonctionnalité qui fonctionne même si le processus n’est pas complètement optimisé ! Pour un petit bricolo comme moi, de toute façon, la satisfaction est bien là.

Toutefois, j’ai encore un petit problème….

Voici comment j’utilisais la fonction mail() :

$headers .= "To: ".$mailto." <".$mailto."> \r\n";
$headers .= "From: ".$prenom." ".$nom." <".$mailfrom."> \r\n";
if(mail($mailtomail, $ligneobjet, $message2, $headers))
    {
        /* Confirmation du succès de l’envoi du mail */
    }

Dans ma variable $mailto, je plaçais un string du type destinataire@fai.com.
Dans ma variable $mailfrom, je place un string du type expediteur@fai.com.

Résultat dans mon header, j’avais 3 adresses emails (et donc 3 x @). Aussi, à chaque envoi de mail, j’ai pu vérifié que chaque envoi comptait pour 3 au lieu de 1.

Alors, il m’est venu l’idée de reformuler le header de la manière suivante :

$headers .= "To: ".$nom." <".$mailto."> \r\n";
$headers .= "From: ".$prenom." ".$nom." <".$mailfrom."> \r\n";
if(mail($mailtomail, $ligneobjet, $message2, $headers))
    {
        /* Confirmation du succès de l’envoi du mail */
    }

Dans ma variable $nom, à présent je place un string : Nom !
Dans la variable $mailto, je place un string du type destinataire@fai.com.
Dans ma variable $mailfrom, je place un string du type expediteur@fai.com.

Résultat dans mon header, à présent, j’ai 2 adresses emails, et à chaque envoi de mail, je peux vérifier que chaque envoi compte pour 2 au lieu de 1.

Conclusion, je suppose qu’à chaque envoi de mail, l’Olympe_quota s’incrémente sur la base du nombre d’@ placé dans le header. Normalement, seul celui du destinataire devrait compter (?)

Hors ligne

 

#38 2009-11-06 06:42:31

motamot
Nouveau membre
Date d'inscription: 2009-10-21
Messages: 18

Re: Fonction mail() php plusieurs destinataires

Je confirme mon message ci-dessus !

Je viens de procéder à l'envoi d'un seul mail. Ce mail contenait un header comprenant entre autre l'adresse de l'expéditeur et celle du destinataire, soit 2 x @. Puis dans le nom de l'expéditeur, j'ai mis 8 @ d'affilé : Nom@@@@@@@@prénom.

Le quota s'est incrémenté de 10.

Hors ligne

 

#39 2009-11-06 09:23:11

Chaussette Trouée
Administrateur
Date d'inscription: 2008-03-21
Messages: 3004

Re: Fonction mail() php plusieurs destinataires

Bonjour,

Effectivement, le quota est calculé simplement en fonction du nombre de @ présent dans les headers (sauf le From) et dans le "$to" de la fonction mail.
Il n'est pas nécessaire de répéter les destinataires à la fois dans le "To" du header et dans le "$to" de la fonction mail.
Dans votre cas, vous pouvez laisser tomber complètement la partie

Code:

$headers .= "To: ".$nom." <".$mailto."> \r\n";

Bien à vous


Une chaussette sans trou, on peut pas mettre son pied dedans...

Hors ligne

 

#40 2009-11-07 06:58:24

motamot
Nouveau membre
Date d'inscription: 2009-10-21
Messages: 18

Re: Fonction mail() php plusieurs destinataires

Et dire que c'est cette partie du header qui m'embête (pour rester poli) depuis le début de ce post !
Et dire qu'il suffisait de la supprimer tout simplement !
Et dire que je n'avais même pas essayé !!!

Merci pour tout !

Hors ligne

 

Pied de page des forums

Powered by FluxBB