DarkCid
Messages postés195Date d'inscriptionmardi 22 février 2005StatutMembreDernière intervention26 octobre 2009
-
15 juil. 2006 à 18:49
rrk275
Messages postés540Date d'inscriptionvendredi 25 juin 2004StatutMembreDernière intervention 1 octobre 2007
-
16 juil. 2006 à 21:50
Yaoh !
Voilà le contexte, je dois envoyer des mails promotionnel avec des images histoire que se soit plus sympa à voir, donc mail html oblige. J'ai récupéré sur phpcs cette fonction :
function htmlMailing($sendTo,$subject,$htmlMessage,$textMessage,$additional_headers '',$additional_parameters '')
{
// ici on cherche les fichiers inclus dans l'HTML par src="..."
preg_match_all('@src="([\w.]+)"@im',$htmlMessage,$preg_result);
$file[0] = array();
foreach( $preg_result[1] as $name )
{
// on evite de faire des doublons...
if(!in_array($name,$file[0]))
{
// on pose un identifiant pour chaque fichier trouvé dans l'HTML
$ID = md5( uniqid ( rand() ) ).$_SERVER['SERVER_NAME'];
$file[0][$name] = $ID;
$file[1][$name] = '(src="'.$name.'")';
$file[2][$name] = 'src="cid:'.$ID.'"';
}
}
unset($preg_result);
// La frontière des messages de type MIME
$boundary = '-----=' . md5( uniqid ( rand() ) );
// On ajoute dans l'header du mail le fait que c'est un message MIME
$additional_headers.= NL.'MIME-Version: 1.0'.NL;
// multipart/related veux dire que les fichiers inclus seront liés dans le message
$additional_headers.= 'Content-Type: multipart/related; boundary="'.$boundary.'"'.NL;
$message = $textMessage.NL.NL; //au cas où le navigateur ne sache pas lire les types MIME
$message.= '--'.$boundary.NL; // frontière
$message.= 'Content-Type: text/html; charset="iso-8859-1"'.NL;
// entete HTML
$message.= 'Content-Transfer-Encoding: 8bit'.NL.NL;
$message.= $htmlMessage.NL.NL; // corps du message
// on inclu tous les fichiers utilisés :
foreach( $file[0] as $name => $ID )
{
$message.= '--'.$boundary.NL;
$message.= 'Content-Type: '.mime_content_type($name).'; name="'.$name.'"'.NL;
$message.= 'Content-Transfer-Encoding: base64'.NL;
$message.= 'Content-ID: <'.$ID.'>'.NL.NL;
$message.= chunk_split(base64_encode(file_get_contents ($name))).NL.NL;
}
$message.= '--'.$boundary.'--';
mail($sendTo, $subject, $message, $additional_headers, $additional_parameters);
}
Alors juste avant, je fabrique un message html (un peu comme si je faisais un echo de toute une page html), je l'affiche pour debug et il affiche ce que je ve, ouf !
Le prob c'est que pour envoyer ce message, là il bug et il me met ça :
Warning: preg_replace(): Empty regular expression in /home.10.2/signanet/www/Pages/adminenvoi.php on line 32
(pour info, la ligne 32 c'est celle là :$htmlMessage = preg_replace($file[1],$file[2],$htmlMessage);)
rrk275
Messages postés540Date d'inscriptionvendredi 25 juin 2004StatutMembreDernière intervention 1 octobre 20072 15 juil. 2006 à 23:44
peut tu poser un echo d'un $file[1] classique ( bien evidemment pour chaque case de celui ci ^^) d'un $file[2] pour le $htmlMessage je pense c'est bon ^^ (d'apres le message d'erreur y en un vide ..
eventuellement essaye de faire foreach( $preg_result[0] as $name ) ..
rrk275
Messages postés540Date d'inscriptionvendredi 25 juin 2004StatutMembreDernière intervention 1 octobre 20072 16 juil. 2006 à 00:40
balance les arguments de preg_match_all('@src="([\w.]+)"@im',$htmlMessage,$preg_result);
et les resultats .. (je pense qu'il y en a aucun .. ) , au fait pourquoi a tu mis foreach( $preg_result[1] as $name ) ? ( c'est une question relle je m'y connais pas beaucoup... )
DarkCid
Messages postés195Date d'inscriptionmardi 22 février 2005StatutMembreDernière intervention26 octobre 20091 16 juil. 2006 à 00:44
Yaoh !
SI je balance cette partie, d'après ce que j'ai compris du code k'on m'a passé, mon message html n'aura plus d'images pour ceux qui le recevront, ce qui est logique puisque le chemin des images est en relatif. Cette partie du code est donc censé remplacé les chemins relatif par des chemin que n'importe qui peut comprendre, enfin je pense.
Vous n’avez pas trouvé la réponse que vous recherchez ?
rrk275
Messages postés540Date d'inscriptionvendredi 25 juin 2004StatutMembreDernière intervention 1 octobre 20072 16 juil. 2006 à 01:12
apres avoir bien regardé ton code certaine chose m'étonne ,
foreach( $preg_result[0] as $name )
{
//ici $name contient src="monimage.jpg" et tu fais
$file[0][$name] = $ID;
$file[1][$name] = '(src="'.$name.'")';
$file[2][$name] = 'src="cid:'.$ID.'"';
}
je t'ai donc mitonné un pti code
<?
$htmlMessage = '';
preg_match_all('@src="([\w.]+)"@im',$htmlMessage,$preg_result);
for($i= 0;$i<count($preg_result[0]);$i++)
{
$file[0][$i] = '/'.$preg_result[0][$i].'/';
$file[1][$i] = $_SERVER['SERVER_NAME'].$preg_result[0][$i];
}
$htmlMessage = preg_replace($file[0],$file[1],$htmlMessage);
echo $htmlMessage;
?>
marche parfait chez moi a adapter , mais c'est relativement simple ..donc je te laisse faire .. au fait le 1 ne change rien comme il n'y a aucune parenthese mais je pense que c'est aussi bien 0 ..
rrk275
Messages postés540Date d'inscriptionvendredi 25 juin 2004StatutMembreDernière intervention 1 octobre 20072 16 juil. 2006 à 11:35
salut ,
Il fallait integrer mon code à ta page, la ca à apparement pas reussi et je me demande comment tu as fait ...
function htmlMailing($sendTo,$subject,$htmlMessage,$textMessage,$additional_headers '',$additional_parameters '')
{
// ici on cherche les fichiers inclus dans l'HTML par src="..."
preg_match_all('@src="([\w.]+)"@im',$htmlMessage,$preg_result);
$file[0] = array();
foreach( $preg_result[1] as $name )
{
// on evite de faire des doublons...
if(!in_array($name,$file[0]))
{
// on pose un identifiant pour chaque fichier trouvé dans l'HTML
$ID = md5( uniqid ( rand() ) ).$_SERVER['SERVER_NAME'];
$file[0][$name] = $ID;
$file[1][$name] = '(src="'.$name.'")';
$file[2][$name] = 'src="cid:'.$ID.'"';
}
}
unset($preg_result);
$htmlMessage = preg_replace($file[1],$file[2],$htmlMessage);
ca on supprime
et voila comment j'aurais fait masi ptet a tu fais ainsi ... je vais donc tester la fonction ..
// La frontière des messages de type MIME
$boundary = '-----=' . md5( uniqid ( rand() ) );
// On ajoute dans l'header du mail le fait que c'est un message MIME
$additional_headers.= NL.'MIME-Version: 1.0'.NL;
// multipart/related veux dire que les fichiers inclus seront liés dans le message
$additional_headers.= 'Content-Type: multipart/related; boundary="'.$boundary.'"'.NL;
$message = $textMessage.NL.NL; //au cas où le navigateur ne sache pas lire les types MIME
$message.= '--'.$boundary.NL; // frontière
$message.= 'Content-Type: text/html; charset="iso-8859-1"'.NL;
// entete HTML
$message.= 'Content-Transfer-Encoding: 8bit'.NL.NL;
$message.= $htmlMessage.NL.NL; // corps du message
// on inclu tous les fichiers utilisés :
foreach( $file[0] as $name => $ID )
{
$message.= '--'.$boundary.NL;
$message.= 'Content-Type: '.mime_content_type($name).'; name="'.$name.'"'.NL;
$message.= 'Content-Transfer-Encoding: base64'.NL;
$message.= 'Content-ID: <'.$ID.'>'.NL.NL;
$message.= chunk_split(base64_encode(file_get_contents ($name))).NL.NL;
}
$message.= '--'.$boundary.'--';
mail($sendTo, $subject, $message, $additional_headers, $additional_parameters);
}
DarkCid
Messages postés195Date d'inscriptionmardi 22 février 2005StatutMembreDernière intervention26 octobre 20091 16 juil. 2006 à 11:40
Yaoh !
Tu va tester la fonction ? Tu me dira si sa marche. Moi en attendant, je me suis pas fait chier, g vaqué tt ce qui concerne les fichiers, et g remplacé dans la création du mail les chemins relatifs en absolu
Comme ça marche bien, prends ton temps pour trouver le prob, mais sa m'intéresse toujours de connaître le problème (sa m'agace d'ailleurs kan je comprends pas).
rrk275
Messages postés540Date d'inscriptionvendredi 25 juin 2004StatutMembreDernière intervention 1 octobre 20072 16 juil. 2006 à 11:44
Le probleme c'est si tes fichiers sont deja en chemin absolu, la ca va merder car il en rajoutera pour la fonction je peux pas tester tout de suite, pas acces a un interpretateur sur ce pc ..
rrk275
Messages postés540Date d'inscriptionvendredi 25 juin 2004StatutMembreDernière intervention 1 octobre 20072 16 juil. 2006 à 11:56
tu peux faire des echos sur les tableaux de file quand je le rempli , et il faudrat penser a rajouter une securité une fois que ton code marche perfect sinon il bugera quand tu voudra uploader un fichier sans lien ^^
DarkCid
Messages postés195Date d'inscriptionmardi 22 février 2005StatutMembreDernière intervention26 octobre 20091 16 juil. 2006 à 11:59
Yaoh !
là pas de prob, tous les fichiers de mon mail sont issu d'une bdd, et g mis une sécurité en amont pour que le chemin soit bon. Moi là g encore pas mal de truc à finir avant demain, donc je v devoir m'y mettre vu k'avec des chemins absolu sa marche (mes patrons eux ils regarderont pasp lus loin)