Précédent   Forum des professionnels en informatique > PHP > Langage > Fonctions
Fonctions Forum d'entraide sur les fonctions PHP. Avant de poster -> FAQ fonctions et Sources diverses
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 02/09/2011, 16h10   #1
Candidat au titre de Membre du Club
 
Inscription : mars 2007
Messages : 52
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 52
Points : 11
Points : 11
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 :
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 :
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 !

@+
Marmotton76 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/09/2011, 16h31   #2
Membre confirmé
 
Homme Dominique
Première S
Inscription : juillet 2010
Messages : 252
Détails du profil
Informations personnelles :
Nom : Homme Dominique
Âge : 15
Localisation : France

Informations professionnelles :
Activité : Première S

Informations forums :
Inscription : juillet 2010
Messages : 252
Points : 228
Points : 228
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
Dominique49 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/09/2011, 16h56   #3
Candidat au titre de Membre du Club
 
Inscription : mars 2007
Messages : 52
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 52
Points : 11
Points : 11
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
Marmotton76 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/09/2011, 18h05   #4
Candidat au titre de Membre du Club
 
Inscription : mars 2007
Messages : 52
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 52
Points : 11
Points : 11
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 !
Marmotton76 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/09/2011, 18h16   #5
Membre confirmé
 
Homme Dominique
Première S
Inscription : juillet 2010
Messages : 252
Détails du profil
Informations personnelles :
Nom : Homme Dominique
Âge : 15
Localisation : France

Informations professionnelles :
Activité : Première S

Informations forums :
Inscription : juillet 2010
Messages : 252
Points : 228
Points : 228
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
Dominique49 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h29.


 
 
 
 
Partenaires

Hébergement Web