Designed by Gaetan !
110 en ligne   Boutique | Sites | Bar | Forum | PhpBB | Actu | Glossaire | Codes | Tips | Liens | Livres | Lettre  


 Recherche

 NewsLetter





   

PHPMAIL personnalisé (HTML & Background)

Envoyer simplement un Email avec images incluses





Maunakea
Ce script permet d'envoyer un email au format HTML par le serveur avec les images (fond, gif) incluses dans le message. Les anciens clients-mail afficheront à la place un message en texte brut.
Tout d'abord, pas besoin de la classe mail_mime.php.
Ensuite, observez comment sont manipulées les parties.

ANALYSE DU MAIL FINAL

Tout d'abord, il faut savoir que votre mail ne doit pas contenir de lignes de PLUS DE 76 caractères.
Cela provoquera un mail illisible chez de nombreuses personnes.


L'EN-TETE MAIL
Rien d'exceptionnel ! Hormis le Multipart/alternative (et non plus mixeed !)
Notez la frontière "boundary=---xxxx"
Il s'agit d'une frontière définie par un nombre aléatoire.
To: bob.lapinou@....
Subject: Essai HTML
Reply-To: Nom
From: Nom
MIME-Version: 1.0
Content-Type: multipart/Alternative;
boundary="-----
=1b6b670268fcbcaedb0449becff4f435"

MESSAGE POUR LES VIEUX CLIENTS-MAIL
Ceci est un message au format MIME 1.0.

MESSAGE TEXTE BRUT
-------=1b6b670268fcbcaedb0449becff4f435
Content-Type: Text/Plain;
charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

Alors ça marche ?

MESSAGE TEXTE HTML
-------=1b6b670268fcbcaedb0449becff4f435
Content-Type: Text/HTML;
charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

< BODY style=3D"BACKGROUND-POSITION: right
bottom; FONT-SIZE: 12pt;
MARGIN: 10px; BACKGROUND-REPEAT: no-repeat; FONT-FAMILY: Arial"
text=3D#b0ffff vLink=3D#fce38d aLink=3D#fce38d
link=3D#fce38d
bgProperties=3Dfixed bgColor=3D#0420a7
background=3Dcid:08F04D95-4B0E-422B-9138-D5716797DB74
scroll=3Dyes>
Alors ça marche ?
< FONT face=3D"Arial, Helvetica, sans-serif" size=3D2>

LA SIGNATURE GIF
< IMG alt=3D"" hspace=3D0
src=3D"cid:4923555B-0D28-4533-B917-07177C51A263"
align=3Dabsmiddle border=3D0>
</body></html>

LE FOND JPEG
-------=1b6b670268fcbcaedb0449becff4f435
Content-Type: image/jpg; name="fond.jpg"
Content-Transfer-Encoding: base64
Content-ID: <08F04D95-4B0E-422B-9138-D5716797DB74>

/9j/4AAQSkZJRgABAgAA....

LA SIGNATURE GIF
-------=1b6b670268fcbcaedb0449becff4f435
Content-Type: image/gif; name="signature.gif"
Content-Transfer-Encoding: base64
Content-ID: <4923555B-0D28-4533-B917-07177C51A263>

R0lGODlhawBcAPf/AM....

FERMETURE DES FRONTIERES
-------=1b6b670268fcbcaedb0449becff4f435--

Le script PHP

mail_html.php 
<? 
$emailto='flo.flo@toto.com';
$subject='essai';
$body='Ceci est un essai MIME avec fond JPEG et image GIF';

// cas d'une piece jointe (formulaire)
//   $pjn=$pj_name;
// $fp = fopen($pj, "rb");   
// $attachment = fread($fp, filesize($pj));
// fclose($fp);
// $pj = chunk_split(base64_encode($attachment));

sendmailpj($emailto,$subject,$body,$pj,$pjn);
?>










<?php
function sendmailpj($destinataire,$subject,$message,$pj,$pjn){

// variables perso
$fond = "images/fond.jpg"; // (fichiers à placer dans le repertoire images (voir fopen...)
$signature= "images/signature.gif";
$expediteur   = "Vincent LAPINOU<bob.lapinou@esayconnect.fr>";   // <---------------------
// $message="message";




// ----------------------------------Construction de l'entête
// On construit une FRONTIERE aléatoire (allez savoir pourquoi !?)
$boundary = "-----=".md5(uniqid(rand()));
// On indique le fichier fond


// Version du format MIME utilisé
$header = "MIME-Version: 1.0\n";
// Type de contenu. Ici plusieurs parties de type different "multipart/ALTERNATIVE"
// Avec un frontière définie par $boundary
$header .= "Content-Type: multipart/Alternative; \n   boundary=\"$boundary\"\n";
$header .= "\n";

// -----------------------------------Construction du message 

// Message pour les softs ne supportant PAS le format MIME.
$msg = "Ceci est un message au format MIME 1.0 multipart/mixed.\n";

// 1ère partie du message Le texte BRUT (pour ceux qui refusent les mails HTML) (y'en a!)
// Chaque partie du message est séparée par LA FRONTIERE
$msg .= "--$boundary\n";
// Et pour chaque partie on en indique le type
$msg .= "Content-Type: Text/Plain;\n  charset=\"iso-8859-1\"\n";
// Et comment il sera codé
$msg .= "Content-Transfer-Encoding: quoted-printable\n\n";

$msg .=eregi_replace("\\\'","'",$message);
$msg .= "\n";

// Message HTML au format MIME.
$msg .= "--$boundary\n";
// Le type
$msg .= "Content-Type: Text/HTML;\n  charset=\"iso-8859-1\"\n";
// Et comment il sera codé
$msg .= "Content-Transfer-Encoding: quoted-printable\n\n";
// Notez la référence background=3Dcid:08F04D95-4B0E-422B-9138-D5716797DB74
// c'est cette référence qui va appeller l'image dans le language html !
$msg .="<html><BODY style=3D\"BACKGROUND-POSITION: right bottom; FONT-SIZE: 12pt; \n";
$msg .="MARGIN: 10px; BACKGROUND-REPEAT: no-repeat; FONT-FAMILY: Arial\"\n";
$msg .=" text=3D#b0ffff vLink=3D#fce38d aLink=3D#fce38d link=3D#fce38d \n";
$msg .="bgProperties=3Dfixed bgColor=3D#0420a7\n";
$msg .=" background=3Dcid:08F04D95-4B0E-422B-9138-D5716797DB74 scroll=3Dyes>\n";
$msg .= "\n";

$msg2 =htmlentities($message);
$msg2 =eregi_replace("\\\n","<br>\n",$msg2);
$msg2 =eregi_replace("\\\'","'",$msg2);

$msg .=$msg2;
$msg .="<BR>";
$msg .="<FONT face=3D\"Arial, Helvetica, sans-serif\" \n size=3D2>\n";
$msg .="______________________________________________________________<BR>\n";
$msg .="<FONT face=3D\"Comic Sans MS\" size=3D2>\n";
$msg .="<A href=3D\"mailto:".$expediteur."\"><IMG alt=3D\"\" ";
$msg .="hspace=3D0 \n src=3D\"cid:4923555B-0D28-4533-B917-07177C51A263\" \n";
$msg .="align=3Dabsmiddle border=3D0></A>&nbsp; <I>EMAIL</I>\n";
$msg .= "\n";





// 


// ---------------------------------
// 2nde partie du message
// Le fichier FOND
// ---------------------------------
// Tout d'abord lire le contenu du fichier
$fp = fopen($fond, "rb");   // b c'est pour les windowsiens (binary)
$attachment = fread($fp, filesize("images/".$fond));
fclose($fp);
// puis convertir le contenu du fichier en une chaîne de caractères
// conforme au format RFC 2045 (lignes de 76 caractères)
$attachment = chunk_split(base64_encode($attachment));
// Ne pas oublier que chaque partie du message est séparé par une frontière
$msg .= "--$boundary\n";
// Et pour chaque partie on en indique le type
$msg .= "Content-Type: image/jpg; name=\"$fond\"\n";
// Et comment il sera codé
$msg .= "Content-Transfer-Encoding: base64\n";
// -----ICI L'ASTUCE POUR RECUPERER LA PIECE JOINTE ! (sinon ce serait une PJ ordinaire
$msg .= "Content-ID: <08F04D95-4B0E-422B-9138-D5716797DB74>\n";
// Il est indispensable d'introduire une ligne vide entre l'entête et le texte
$msg .= "\n";
// C'est ici que l'on insère le code du fichier lu
$msg .= $attachment . "\n";
$msg .= "\n\n";

// Le fichier SIGNATURE
// ---------------------------------
$fp = fopen($signature, "rb");   
$attachment = fread($fp, filesize("images/".$signature));
fclose($fp);
$attachment = chunk_split(base64_encode($attachment));
$msg .= "--$boundary\n";
$msg .= "Content-Type: image/gif; name=\"$signature\"\n";
$msg .= "Content-Transfer-Encoding: base64\n";
$msg .= "Content-ID: <4923555B-0D28-4533-B917-07177C51A263>\n";
$msg .= "\n";
$msg .= $attachment . "\n";
$msg .= "\n\n";

if ($pj){
// Le fichier PJ
// ---------------------------------
$msg .= "--$boundary\n";
$msg .= "Content-Type: unknown/unknown; name=\"".$pjn."\"\n";
$msg .= "Content-Transfer-Encoding: base64\n";
$msg .= "\n";
$msg .= $pj . "\n";
$msg .= "\n\n";
}



// voilà, on indique la fin par une nouvelle frontière
// ET SEULEMENT LA (sinon les parties annexes disparaissent)
$msg .= "--$boundary--\n";


echo "Email envoyé à : $destinataire<br>";
mail($destinataire, $subject, $msg,"Reply-to: $expediteur\nFrom: $expediteur\n".$header);


}
?>

Pour pouvoir écrire dans ce forum, identifiez-vous !

 Lire  04/01/08 06:37 de majola
J'ai fait deux sites internet avec le logiciel Web to...
  v1.3p © ASP-PHP.net 2002  

Maunakea le 01/08/2003 (77 198 hits)
Didier Gratuit : Téléchargez SQL Server 2008 !
Gratuit : Formez-vous sur Silverlight, .NET, OpenXML, ...
Concours de programmation Flash !
Au fil des news  
PHP - Listes liées (1 table) - version2
[MAJ] Affichage en tableau - ASP/PHP : Afficher des données dans un tableau
Astuce pour l'affichage "en colonnes"
JavaScript - Rendre Visible ou Invisible des éléments d'un form
PHP - Listes liées (1 table) - version1
PHP - Bout de code pour lolo5971
JavaScript - Intercepter le click sur une vidéo WMP
[MAJ] Une base de données sans base de données - Comment travailler avec des fichiers texte ?
Modification du paramétrage du dossier à scanner dans le popup qui permet de sélectionner l'image.
Jeux de l'été (et de 5) - Un jeu de Motus (mots de 8 lettres)
C'est reparti pour un tour... Comme je venais de proposer un jeu de Mastermind, je me suis dit que, ...
PowerShell - Extraire toutes les collections SharePoint en CSV
PowerShell - Lister les collections pour une WebApp SharePoint
PowerShell - Lister les utilisateurs d'un site SharePoint
PowerShell - Connaître le code version de votre SharePoint
Connaître la version de SharePoint installée - Comment savoir la version de SharePoint en cours
Dans le cadre de la maintenance de plusieurs fermes SharePoint, il est indispensable de connaître ...
PowerShell - Travailler avec une base de données SQL Server
.NET - Visual Studio 2008 sur Facebook : çà rock's
PowerShell - Ajouter des liens sur deux niveaux dans SharePoint
Un petit annuaire perso avec photo - en PHP et MySQL
Avoir des copains et des amis c'est bien que dis-je c'est même vital pour le bien être de chacun. ...
Une base de données sans base de données - Comment travailler avec des fichiers texte ?
Suite à une question sur le forum (les habitués me connaissent), je propose une mini-gestion de ...
Affichage en tableau - ASP/PHP : Afficher des données dans un tableau
Création d'un tableau "à la volée" pour afficher ses données. Affichage "en ligne" ou "en ...
PowerShell - Ajouter une liste dans un site SharePoint
Annuaire d'entreprise en PHP - Très pratique pour ne plus rien perdre
Mon petit annuaire d'entreprise, je m'en sers tous les jours alors autant vous en faire profiter. ...
PHP-MySQL : Formulaire - pour le script 'Bon anniversaire' de DB77
Formulaire et script d'enregistrement pour le script « Bon anniversaire » de DB77 en PHP/MySQL ...
.NET - Introducing Microsoft Silverlight 2.0, 2nd Edition
PHP5 - Upload de fichiers - Classe PHP
PHP - PHP 5 /MYSQL® 5
PHP - Calcul de la surface d'un polygone
Comment supprimer des items d'une liste SharePoint - Supprimer les informations d'une liste SharePoint
SharePoint permet bien sur de stocker des données. Parfois, on peut vouloir effacer certaines de ...
Dreamweaver CS4 - Nouvelle version Béta
Voici la nouvelle mouture, annoncée en juin, juste 6 mois après la sortie de la version CS3. Je ...
PowerShell - Synchronisation répertoire par répertoire
PowerShell - Ajouter des items dans une liste SharePoint
Localisation des développements avec SharePoint - Rendre ses applications SharePoint internationales
Lorsque l'on développe des applications avec SharePoint, on se confronte très souvent à une ...
PowerShell - Supprimer tous les items d'une liste SharePoint
PowerShell - Vider la Corbeille SharePoint d'une collection
PowerShell - Modifier le Thème d'une collection SharePoint
PowerShell - Tester l'existance ou effacer une WebPart
Modification de l'adresse du Search Center - Définir la page de résultat d'une ferme MOSS
Lorsque l'on installe MOSS dans une ferme SharePoint et que l'on configure le moteur de recherche ...
PHP - Redimensionner Image + Picto après Upload - Galerie photos, revue de presse, ...
Upload de photo, redimensionnement, création de picto, enregistrement ...
ASP - Redimensionner Image + Picto après Upload - Galerie photos, revue de presse, ...
Upload de photo, redimensionnement, création de picto, enregistrement ... Utilisation ...
Exporter et Importer un site SharePoint - Comment déplacer un site SharePoint
Une question est très régulièrement posée à tout responsable de ferme SharePoint : Comment ...
Bon anniversaire - Comment le souhaiter à ses membres ?
Avoir un site, c'est bien. Avoir des inscrits, c'est mieux. Souhaiter leur anniversaire, c'est ...
Tutorial : HTML | Scripting | ASP-PHP | ASP.net | SQL Server | XML
Sharepoint | XAML | Pocket | Dreamweaver | VML | Divers
  Scripts : Scripting | ASP-PHP | ASP.net | Divers
  Boutique | Annuaire | Bannières | Météo | Tribune | Partenariats
v3 © Didier 2003   
 

Corpo Sciences de Reims Partitions gratuites Carte, météo, annonces
 The Inquirer FR Wygwam El Roubio ASP-magazine MVP DotNet Project Codes Sources CodePPC TechNet Groupes Utilisateurs Microsoft