Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème fonction mail()

Sujet résolu
29 avril 2021 à 16:40:24

Bonjour, j'ai fait 2 codes, que voici : 

N°1 :

// Récupération des emails des utilisateurs concernés
    $req_email=$pdo->prepare("SELECT email FROM users WHERE (entites=? and level>=?) or admin=?");
    $req_email->setFetchMode(PDO::FETCH_ASSOC);
    $req_email->execute(array($entite,$level,1));
    $temail=$req_email->fetchAll();
    if($temail>0){
        // Destinataires
        $to  = $temail[0]["email"];
        if($temail>1) {
            for ($i=1; $i<count($temail); $i++) {
                $to = $to . "," . $temail[$i]["email"];
            }
        }
        // Sujet
        $subject = "Nouveau document";
        // message
        $message = "
        <html>
            <body>
                <p>Vous avez un nouveau document disponible sur votre espace.</p>
                <p>Vous pouvez le retrouver <a href='monsite.fr'>ici</a>. </p>
            </body>
        </html>
        ";
        // Pour envoyer un mail HTML, l'en-tête Content-type doit être défini
        $headers[] = 'MIME-Version: 1.0';
        $headers[] = 'Content-type: text/html; charset=iso-8859-1';
        // En-têtes additionnels
        $headers[] = 'From: monsite <no-reply.newdoc@monsite.fr>';
// Envoi mail($to, $subject, $message, implode("\r\n", $headers)); $tMessage[0]="Document ajouté, mails envoyés"; } else $tMessage[5]="Echec de l'envoi des mails";

N°2 :

// Récupération des emails des utilisateurs concernés
    $req_email=$pdo->prepare("SELECT email FROM users WHERE (entites=? and level>=?) or admin=?");
    $req_email->setFetchMode(PDO::FETCH_ASSOC);
    $req_email->execute(array($entite,$level,1));
    $temail=$req_email->fetchAll();
    if($temail > 0) {
        for ($i=0; $i<count($temail); $i++) {
            // Destinataires
            $to  = $temail[$i]["email"];
            // Sujet
            $subject = "Nouveau document";
            // message
            $message = "
            <html>
                <body>
                    <p>Vous avez un nouveau document disponible sur votre espace.</p>
                    <p>Vous pouvez le retrouver <a href='monsite.fr'>ici</a>. </p>
                </body>
            </html>
            ";
            // Pour envoyer un mail HTML, l'en-tête Content-type doit être défini
            $headers[] = 'MIME-Version: 1.0';
            $headers[] = 'Content-type: text/html; charset=iso-8859-1';
            // En-têtes additionnels
            $headers[] = 'From: monsite <no-reply.newdoc@monsite.fr>';
            // Envoi
            mail($to, $subject, $message, implode("\r\n", $headers));
        }
        $tMessage[0]="Document ajouté, mails envoyés";
    } else
        $tMessage[5]="Echec de l'envoi des mails";

Le N°1, fonctionne parfaitement mais le problème c'est que lorsque l'utilisateur reçoit son mail, il peut voir aussi les adresses emails des autres utilisateurs qui ont eux aussi reçu ce mail. Ce que je ne souhaite pas.

Pour solutionner ce problème j'ai fait le code N°2, le problème de ce code est que seulement un utilisateur reçoit le mail (au lieu de 2), pourtant sur mon interface Hostinger cela m'affiche que 2 mails ont été envoyés.

Auriez-vous une solution, soit pour cacher les différents destinataires du mail (dans le cas du code N°1), ou alors que mon code envoie bien 2 mails (dans le cas du code N°2). Merci d'avance

-
Edité par Kévin_ 29 avril 2021 à 18:54:44

  • Partager sur Facebook
  • Partager sur Twitter
29 avril 2021 à 20:00:55

Edit

-
Edité par Ptit Rat 29 avril 2021 à 20:01:10

  • Partager sur Facebook
  • Partager sur Twitter
3 mai 2021 à 18:19:13

Est-ce que le problème du code N°2, pourrait être réglé avec un délai ? Si oui, comment je pourrai faire, avec un sleep ?
  • Partager sur Facebook
  • Partager sur Twitter
3 mai 2021 à 18:50:08

Dans ton header "to", il faut remplacer le to par Bcc:

Quelque chose comme ça:

$headers[] "Bcc: email1@fai.fr, email2@fai.com,email32@fai.fr "

-
Edité par Domi65 3 mai 2021 à 18:50:26

  • Partager sur Facebook
  • Partager sur Twitter
4 mai 2021 à 0:30:39

J'ai du coup fait ça :

// Récupération des emails des utilisateurs concernés
    $req_email=$pdo->prepare("SELECT email FROM users WHERE (entites=? and level>=?) or admin=?");
    $req_email->setFetchMode(PDO::FETCH_ASSOC);
    $req_email->execute(array($entite,$level,1));
    $temail=$req_email->fetchAll();
    if(count($temail) > 0){
        // Destinataires
        $to = 'BCC: ' . $temail[0]["email"];
        if(count($temail) > 1) {
            for ($i=1; $i<count($temail); $i++) {
                $to = $to . ", " . $temail[$i]["email"];
            }
        }
        // Sujet
        $subject = "Nouveau document";
        // message
        $message = "
        <html>
            <body>
                <p>Vous avez un nouveau document disponible sur votre espace.</p>
                <p>Vous pouvez le retrouver <a href='monsite.fr'>ici</a>. </p>
            </body>
        </html>
        ";
        // Pour envoyer un mail HTML, l'en-tête Content-type doit être défini
        $headers[] = 'MIME-Version: 1.0';
        $headers[] = 'Content-type: text/html; charset=iso-8859-1';
        // En-têtes additionnels
        $headers[] = 'From: monsite <no-reply.newdoc@monsite.fr>';
        $headers[] = $to;
        // Envoi
        mail(null, $subject, $message, implode("\r\n", $headers));
        $tMessage[0]="Document ajouté, mails envoyés";
    } else
        $tMessage[5]="Echec de l'envoi des mails";

Merci, ça m'envoie bien tous les mails en "anonyme", je ne connaissais pas du tout ce "BCC". Cependant quand je reçois le mail dans le "à :" il est vide, est-il possible qu'il y ai seulement l'email du destinataire dedans d'affiché et les autres cachés ? Si ce n'est pas possible, ce n'est pas grave, le principal c'est que l'on ne puisse pas voir les emails de tous les utilisateurs.

Sinon, comment je peux enlever ce "via" ?



-
Edité par Kévin_ 4 mai 2021 à 0:31:40

  • Partager sur Facebook
  • Partager sur Twitter
4 mai 2021 à 8:59:38

Salut

L'en-tête BCC (pour l'anglais Blind Carbon Copy, traduisible par Copie Carbone Invisible – CCI — ou parfois Copie Carbone Aveugle) sert justement à envoyer à une liste sans que ceux qui s'y trouvent ne voient les autres adresses. Mais comme il n'y a pas de "destinataire principal", rien ne s'affiche en face du champ « à ». Parfois, selon le client mail (ou peut-être selon une norme), c'est « undisclosed recipients; » qui vient se mettre, comme si c'était l'adresse de destination principale.

Par contre, la partie « via » est gérée par le client, tu ne pourras pas y faire grand chose. C'est probablement pour rassurer que cette information s'affiche.

-
Edité par Ymox 5 mai 2021 à 8:52:27

  • Partager sur Facebook
  • Partager sur Twitter
4 mai 2021 à 21:21:34

Ok merci pour l'explication pour le BCC.

Et si je passe via PHPMailer avec un compte SMTP depuis mon interface Hostinger, est ce que cela enlèvera ce via ?

  • Partager sur Facebook
  • Partager sur Twitter
4 mai 2021 à 21:54:14

Ymox a écrit:

Par contre, la partie « via » est gérée par le client, tu ne pourras pas y faire grand chose

Par client, il faut comprendre le "programme" (Outlook, Courrier, Thunderbird, Mail, etc.) qui lit les mails.

-
Edité par Ymox 4 mai 2021 à 21:55:02

  • Partager sur Facebook
  • Partager sur Twitter
5 mai 2021 à 8:27:15

Bonjour,

Mauvais titre

Le titre est un élément important qui ne doit pas être négligé. N'oubliez pas cette règle simple : le titre idéal résume la question que vous allez poser en une petite phrase. Il doit permettre aux visiteurs de se repérer facilement dans le forum visité et d'identifier le sujet à sa seule lecture.

Vous pouvez utiliser divers préfixes comme [Erreur], [MySQL], [Compatibilité], etc... Aussi, pensez à consulter les règles propres à chaque forum (visibles dans les topics épinglés en haut des sections).

De plus, choisir un bon titre permet de rendre plus faciles les recherches des autres membres.

Les titres de type "besoin d'aide" ou "problème" ne sont pas tolérés.

Merci de modifier votre titre. Pour cela, éditez le premier message de votre sujet.

(titre originel : Problème fonction mail())

  • Partager sur Facebook
  • Partager sur Twitter

Pas d'aide concernant le code par MP, le forum est là pour ça :)

5 mai 2021 à 14:19:48

@Lamecarlate

Que intérêt y a-t-il à éditer ce type de message pour un sujet résolu ?

Coridalement.

  • Partager sur Facebook
  • Partager sur Twitter
5 mai 2021 à 14:30:12

Parce que je ne suis pas tombée sur le sujet avant (n'étant pas omnisciente, hélas), et que j'estime qu'il est pertinent d'avoir un titre explicite pour les futures personnes qui auraient un problème semblable.
  • Partager sur Facebook
  • Partager sur Twitter

Pas d'aide concernant le code par MP, le forum est là pour ça :)

6 mai 2021 à 21:22:03

« un titre explicite pour les futures personnes qui auraient un problème semblable »

Je comprends cet argument, mais le sujet étant résolu, celui qui l'a ouvert ne vas pas le modifier.

Bon, tu dis que tu l'as visité avant de rédiger le message, alors ça s'entend.

Cordialement.

  • Partager sur Facebook
  • Partager sur Twitter