IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[Mail] Gros soucis pour envoyer une newsletter en HTML


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 82
    Points : 45
    Points
    45
    Par défaut [Mail] Gros soucis pour envoyer une newsletter en HTML
    Bonjour,

    Après 1/2 journée de prise de tête et de recherches vaines, je viens ici vous exposer mon pb :

    J'ai une Newsletter dans un fichier HTML distant (avec son doctype, son encodage UTF-8, son header, son body et tout le toutim), et je souhaite que cette page HTML s'affiche DANS le corps du message, avec ses background, les images, la mise en forme et tout ce que contient le code HTML de ma news.

    Dans ma préparation d'envoi de mail j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    // récupération du code HTML de ma news
    $fichier= @fopen("dossier/fichier.html", "r");
    $contenu = "";
    if ($fichier) {
        while (!feof($fichier)) {
            $contenu .= fgets($fichier, 4096);
        }
        fclose($fichier);
    }
    Ensuite je rassemble les données que doit contenir le mail :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
     
    // Adresse du destinataire
    $adr_mail = "uneadresse@fournisseur.com";
     
    // Deboggage retour ligne sur certains serveurs (à ce qu'il paraît !)
    if (!preg_match("#^[a-z0-9._-]+@(hotmail|live|msn).[a-z]{2,4}$#", $adr_mail)) {
        $passage_ligne = "\r\n";
    }
    else {
        $passage_ligne = "\n";
    }
     
    // Création du "boundary" entre texte et html
    $boundary = "-----=".md5(rand());
     
    // Mes deux contenus pour le corps de message
     
    $message_txt = 'Si vous ne parvenez pas à lire cette Newsletter, <a href="http://monsite.com/acces_direct_au_fichier_html">cliquez ici</a>';
    $message_html = $contenu ;
     
    // Les en-têtes du mail
     
    $header = "From: Moi <monadresse@monfournisseur.com>".$passage_ligne;
    $header.= "Reply-to: Moi <monadresse@monfournisseur.com>".$passage_ligne;
    $header.= "MIME-Version: 1.0".$passage_ligne;
    $header.= "Content-Type: multipart/alternative;".$passage_ligne." boundary=\"$boundary\"".$passage_ligne;
     
    // Le sujet du mail
     
    $sujet = "Les news de la semaine";
     
    // le corps du message
     
    $message = $passage_ligne.$boundary.$passage_ligne;
    // (contenu au format texte)
    $message.= "Content-Type: text/plain; charset=\"UTF-8\"".$passage_ligne;
    $message.= "Content-Transfer-Encoding: 8bit".$passage_ligne;
    $message.= $passage_ligne.$message_txt.$passage_ligne;
    // (séparation)
    $message.= $passage_ligne."--".$boundary.$passage_ligne;
    // (contenu au format HTML)
    $message.= "Content-Type: text/html; charset=\"UTF-8\"".$passage_ligne;
    $message.= "Content-Transfer-Encoding: 8bit".$passage_ligne;
    $message.= $passage_ligne.$message_html.$passage_ligne;
    // (séparation)
    $message.= $passage_ligne."--".$boundary."--".$passage_ligne;
    $message.= $passage_ligne."--".$boundary."--".$passage_ligne;
     
    // puis ma transmission avec traitement du résultat
     
    $transmission = mail($adr_mail, $sujet, $message, $headers);
    blablabla
    Lorsque j'essaie ce script, je reçois un mail avec tout en format "brut", càd que tout le code HTML de ma news est visible dans le corps du message, il n'est pas "parsé".

    Le pb n'a pas l'air de venir du code HTML lui même, car ma variable $contenu obtenue avec fgets() a produit le contenu attendu (pas de caractères bizarres ou échappés)

    Voyez-vous ce qui ne va pas dans mon code ??

    Merci beaucoup si vous avez même seulement une piste de réponse à me faire partager !

    @+

  2. #2
    Membre actif
    Homme Profil pro
    Première S
    Inscrit en
    Juillet 2010
    Messages
    266
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France

    Informations professionnelles :
    Activité : Première S

    Informations forums :
    Inscription : Juillet 2010
    Messages : 266
    Points : 281
    Points
    281
    Par défaut
    Pour récupérer le contenu d'un fichier tu fait :

    $contenu = file_get_contents("monfichier.php");

    bien plus rapide, au codage ... et à l'exécution

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 82
    Points : 45
    Points
    45
    Par défaut
    Merci Dominique49, mais il est déjà présent, mon type MIME (v. ligne 25 du code)...

    Et sinon, merci pour le tuyau sur file_get_contents

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 82
    Points : 45
    Points
    45
    Par défaut
    Bon ça y est j'ai trouvé : c'est mon DOCTYPE dans le contenu HTML qui provoque le pb. J'ai donc supprimé cette ligne du fichier newsletter HTML et ça marche à la perfection !

    Par contre, va falloir m'expliquer pourquoi y'en a d'autres qui y arrivent : en effet j'ai décortiqué le code source de message pour des newsletters HTML que je reçois de la part de certaines compagnies, et dans le corps du message ils ont mis un doctype à leur contenu HTML, et chez eux ça fonctionne !

  5. #5
    Membre actif
    Homme Profil pro
    Première S
    Inscrit en
    Juillet 2010
    Messages
    266
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France

    Informations professionnelles :
    Activité : Première S

    Informations forums :
    Inscription : Juillet 2010
    Messages : 266
    Points : 281
    Points
    281
    Par défaut
    Excuse moi, je n'avais pas remarqué l'ascenseur (barre de défilement verticale) dans ton deuxième code

    Sinon, c'est normal que tu ne vois pas le type MIME dans les news letters que tu reçois, il n'est souvent pas indiqué par ton gestionnaire de mails (Thunderbird ou autre).

    Décortique une de tes propres news pour voir

Discussions similaires

  1. [MySQL] Problème pour envoyer une donnée récupérée dans un mail
    Par HAbroc dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 25/08/2014, 06h24
  2. Problème pour envoyer une pj par mail
    Par bobic dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 15/04/2008, 09h07
  3. [Mail] souci pour envoyer des e-mails en php
    Par nemines1 dans le forum Langage
    Réponses: 4
    Dernier message: 19/05/2007, 13h07
  4. [FLASH] Envoyer une newsletter en flash
    Par ch_lensois dans le forum Flash
    Réponses: 2
    Dernier message: 27/12/2005, 16h46
  5. [Mail] Pour faire une newsletter ?
    Par Thierry8 dans le forum Langage
    Réponses: 1
    Dernier message: 19/09/2005, 21h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo