Bonjour à tous,
Je viens vers vous suite à une erreur plutôt particulière dans l'un de mes scripts, et dont je ne parviens pas à identifier la source.
J'ai créé une classe d'envoi d'email permettant l'utilisation de fichiers de templates. Ceux-ci comprennent le code HTML à envoyer avec des éléments personnalisables qui sont substitués par les données d'un tableau au moment de l'envoi.
Le problème est le suivant: en l'état, mon template comprend la css (locale donc) dans une balise style qui sera envoyée dans le mail. Je constate que, dans ce bloc, la ligne 28 est vide:
.
Code CSS : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 .container { background-color: white; border: 2px grey solid; border-radius: 10px; margin-top: 20px; padding: 30px; } /*----------------------------------- ligne 28 qui est vide dans mon fichier -----------------------------------*/ .footer { text-align:center; padding-top: 10px; padding: 10px 30px 30px ; }
En l'état, l'envoi du mail fonctionne. Si je supprime la ligne vide, ca ne fonctionne plus. Si je remet manuellement une ligne, ça ne fonctionne pas non plus. Je n'ai que le "Ctrl-Z" qui restaure le fonctionnement.
Extrait de la fonction d'envoi
Ce n'est pas banal comme erreur, et j'avoue ne plus avoir d'idée.
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 // Génération du boundary aléatoire $boundary = md5(rand()); //Définition des headers $headers[] = 'From: Webmaster '.$params['site_title'].' <'.$params['email_webmaster'].'>'; if(isset($reply_to) && strlen($reply_to) > 0){ $headers[] = 'Reply-To: '.$reply_to; } $headers[] = 'MIME-Version: 1.0'; $headers[] = 'Content-type: multipart/mixed; boundary='.$boundary.' '; $headers[] = 'Content-Transfer-Encoding: 7bit'; // Assemblage des headers $this->mail_headers = implode("\r\n", $headers); //Ajout au sujet $this->subject = $subject; //Application du template $mail_content[] = '--'.$boundary; $mail_content[] = 'Content-type: text/html; charset=utf-8'; $mail_content[] = 'Content-Transfer-Encoding: quoted-printable'; $this->mail_msg = $this->getFromTemplate($template, $substitute); $mail_content[] = $this->mail_msg; // S'il y a une PJ if(!is_null($enclosed) && strlen($enclosed) > 0){ $mail_content[] = '--'.$boundary; $mail_content[] = $enclosed; } $mail_content[] = "--".$boundary."--"; // Assemblage du contenu du message $str_mail_content = implode("\r\n", $mail_content); $str_mail_content = wordwrap($str_mail_content, 70,"\r\n"); //Envoi du mail $result = mail($to, $this->subject, $str_mail_content, $this->mail_headers); return $result;
En bonus: 2ème problème lorsque l'envoi du mail fonctionne bien (avec la ligne blanche donc), je reçois bien un message, mais au format texte avec une partie de la CSS qui se retrouve dans le corps du message.Et la césure se fait justement au niveau de la ligne 28...
Merci de votre aide :-)
Partager