Prob de mail html

DarkCid Messages postés 195 Date d'inscription mardi 22 février 2005 Statut Membre Dernière intervention 26 octobre 2009 - 15 juil. 2006 à 18:49
rrk275 Messages postés 540 Date d'inscription vendredi 25 juin 2004 Statut Membre Derniè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);

$htmlMessage = preg_replace($file[1],$file[2],$htmlMessage);

// 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);)

Alors que dois-je faire ?

20 réponses

rrk275 Messages postés 540 Date d'inscription vendredi 25 juin 2004 Statut Membre Dernière intervention 1 octobre 2007 2
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 ) ..
0
DarkCid Messages postés 195 Date d'inscription mardi 22 février 2005 Statut Membre Dernière intervention 26 octobre 2009 1
16 juil. 2006 à 00:37
Yaoh !

aucun file n'affiche koi ke se soit, ke se soit file[1] ou file[2] et foreach( $preg_result[0] as $name )  ne change rien non plus.

Du coup, je suppose k'on peut croire que le problème vient du preg_match_all non ?
0
rrk275 Messages postés 540 Date d'inscription vendredi 25 juin 2004 Statut Membre Dernière intervention 1 octobre 2007 2
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... )
0
DarkCid Messages postés 195 Date d'inscription mardi 22 février 2005 Statut Membre Dernière intervention 26 octobre 2009 1
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
rrk275 Messages postés 540 Date d'inscription vendredi 25 juin 2004 Statut Membre Dernière intervention 1 octobre 2007 2
16 juil. 2006 à 00:54
Mdr balance ... montre ^^ je pensais pas a l'enlever
0
rrk275 Messages postés 540 Date d'inscription vendredi 25 juin 2004 Statut Membre Dernière intervention 1 octobre 2007 2
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 ..
0
DarkCid Messages postés 195 Date d'inscription mardi 22 février 2005 Statut Membre Dernière intervention 26 octobre 2009 1
16 juil. 2006 à 10:07
Yaoh !

Je sais pas si y a du mieux ou pas, mais y a du changement :

Warning: preg_replace(): Empty regular expression in /home.10.2/signanet/www/Pages/adminenvoi.php on line 22

Warning: Invalid argument supplied for foreach() in /home.10.2/signanet/www/Pages/adminenvoi.php on line 39

La ligne 39, c le foreach ki est avant la fin.
0
rrk275 Messages postés 540 Date d'inscription vendredi 25 juin 2004 Statut Membre Dernière intervention 1 octobre 2007 2
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

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);

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);
}
0
DarkCid Messages postés 195 Date d'inscription mardi 22 février 2005 Statut Membre Dernière intervention 26 octobre 2009 1
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).
0
rrk275 Messages postés 540 Date d'inscription vendredi 25 juin 2004 Statut Membre Dernière intervention 1 octobre 2007 2
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 ..
0
DarkCid Messages postés 195 Date d'inscription mardi 22 février 2005 Statut Membre Dernière intervention 26 octobre 2009 1
16 juil. 2006 à 11:45
Yaoh !

Le chmein absolu c juste temporaire, le temps de résoudre cette saleté de prob
0
rrk275 Messages postés 540 Date d'inscription vendredi 25 juin 2004 Statut Membre Dernière intervention 1 octobre 2007 2
16 juil. 2006 à 11:46
essayes de tester toi ma fonction ;. en elevant le rouge ..
0
DarkCid Messages postés 195 Date d'inscription mardi 22 février 2005 Statut Membre Dernière intervention 26 octobre 2009 1
16 juil. 2006 à 11:51
Yaoh !

dsl, le truc rouge à remplacer par le truc vert marche po.
0
rrk275 Messages postés 540 Date d'inscription vendredi 25 juin 2004 Statut Membre Dernière intervention 1 octobre 2007 2
16 juil. 2006 à 11:53
Il te dit quoi?
0
DarkCid Messages postés 195 Date d'inscription mardi 22 février 2005 Statut Membre Dernière intervention 26 octobre 2009 1
16 juil. 2006 à 11:54
Yaoh !

ben la meme chose ke d'habitude, le truc warning avec le preg_replace (mais la ligne change vu ke y a moins de truc avec toi )
0
rrk275 Messages postés 540 Date d'inscription vendredi 25 juin 2004 Statut Membre Dernière intervention 1 octobre 2007 2
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 ^^
0
DarkCid Messages postés 195 Date d'inscription mardi 22 février 2005 Statut Membre Dernière intervention 26 octobre 2009 1
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)
0
rrk275 Messages postés 540 Date d'inscription vendredi 25 juin 2004 Statut Membre Dernière intervention 1 octobre 2007 2
16 juil. 2006 à 15:19
Nan mon script remplacerait bien mais pourquoi fournit tu les images en pieces jointes si tu donne l'url?
0
DarkCid Messages postés 195 Date d'inscription mardi 22 février 2005 Statut Membre Dernière intervention 26 octobre 2009 1
16 juil. 2006 à 15:21
Yaoh !

comment ça je met les images en pièces jointes ? c à ça ke sa sert le bout de code ke g fini par enlever ?
0
rrk275 Messages postés 540 Date d'inscription vendredi 25 juin 2004 Statut Membre Dernière intervention 1 octobre 2007 2
16 juil. 2006 à 21:50
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;
}

ca ressemble a untransfert mais je peux me tromper ..
0
Rejoignez-nous