You are not logged in.

Announcement

 Téléchargez la dernière version stable de GLPI      -     Et vous, que pouvez vous faire pour le projet GLPI ? :  Contribuer
 Download last stable version of GLPI                      -     What can you do for GLPI ? :  Contribute

#1 2008-07-22 10:08:57

eiseli
Member
From: Switzerland
Registered: 2008-06-10
Posts: 148

Mails HTML: saut de ligne automatique au mauvais endroit

Bonjour,

Sur GLPI 0.71 (mais aussi les versions antérieures, donc ce n'est pas une régression), j'ai remarqué que les mails HTML contenaient souvent des "malformations". Elles se présentaient sous forme de
- espace à l'intérieur d'un mot
- formatage HTML cassé (par exemple texte gras et souligné continuant plus loin que voulu)
- Tags HTML apparaissant en clair

Après plusieurs tests, j'ai remarqué qu'un saut de ligne suivi d'un espace s'insérait automatiquement autour du caractère 990 (cela varie, selon s'il y a des caractères unicode parmi eux ou non). Si cette insertion se faisait à l'intérieur du mot, il y avait simplement un espace dans le mot; si elle se faisait à l'intérieur d'une balise de fin, genre </sp an>, la balise était simplement ignorée et le formatage continuait outre; etc... etc...

Le problème semble être dû au fait que glpi enlève tous les sauts de ligne et que le serveur Mail (en l'occurrence Postfix chez nous) n'aime pas les lignes trop longues. J'ai fait un test en injectant une très longue ligne directement à Postfix et l'effet est le même. Il ne s'agit donc pas d'un problème de client e-mail.

La question suivante s'impose donc: y a-t-il une raison précise, pour laquelle _tous_ les sauts de ligne sont enlevés?

mailing.class.php:438 $body=ereg_replace("\n","<br>",$body)

A mon humble avis, il ne faudrait que faire ce ereg_replace au niveau des textes saisis dans des champs multiligne (à savoir les textarea).

Qu'en pensez-vous?


Working environment: Fedora 22, GLPI 0.90.1, upgraded from 0.72.0, 0.78, 0.83 PHP/5.6.16, MySQL/10.0.21-MariaDB, Apache/2.4.17, Firefox 43
Transifex: https://www.transifex.com/accounts/profile/eiseli/

Offline

#2 2008-07-22 10:38:56

eiseli
Member
From: Switzerland
Registered: 2008-06-10
Posts: 148

Re: Mails HTML: saut de ligne automatique au mauvais endroit

Pour ma part, je hacke le code de façon suivante:

--- mailing.class.php.orig      2008-07-11 21:12:47.000000000 +0200
+++ mailing.class.php   2008-07-22 10:18:22.000000000 +0200
@@ -435,7 +435,7 @@

                        $body.="<br>-- <br>".$CFG_GLPI["mailing_signature"];
                        $body.="</body></html>";
-                       $body=ereg_replace("\n","<br>",$body);
+                       $body=ereg_replace("\n","<br>\n",$body);

                }else{ // text format

et ceci

--- tracking.class.php.orig     2008-07-11 21:12:47.000000000 +0200
+++ tracking.class.php        2008-07-22 10:37:36.000000000 +0200
@@ -763,29 +763,29 @@
                        $result=$DB->query($query);
                        $nbfollow=$DB->numrows($result);
                        if($format=="html"){
-                               $message = "<div class='description'><strong>".$LANG["mailing"][4]." : $nbfollow<br></strong></div><br>";
+                               $message = "<div class='description'><strong>".$LANG["mailing"][4]." : $nbfollow<br></strong></div>\n";

                                if ($nbfollow>0){
                                        $fup=new Followup();
                                        while ($data=$DB->fetch_array($result)){
                                                $fup->getFromDB($data['ID']);
-                                               $message .= "<strong>[ ".convDateTime($fup->fields["date"])." ] ".($fup->fields["private"]?"<i>".$LANG["common"][77]."</i>":"")."</strong><br>";
-                                               $message .= "<span style='color:#8B8C8F; font-weight:bold;  text-decoration:underline; '>".$LANG["job"][4].":</span> ".$fup->getAuthorName()."<br>";
-                                               $message .= "<span style='color:#8B8C8F; font-weight:bold;  text-decoration:underline; '>".$LANG["mailing"][3]."</span>:<br>".ereg_replace("\n","<br>",$fup->fields["contents"])."<br>";
+                                               $message .= "<strong>[ ".convDateTime($fup->fields["date"])." ] ".($fup->fields["private"]?"<i>".$LANG["common"][77]."</i>":"")."</strong>\n";
+                                               $message .= "<span style='color:#8B8C8F; font-weight:bold;  text-decoration:underline; '>".$LANG["job"][4].":</span> ".$fup->getAuthorName()."\n";
+                                               $message .= "<span style='color:#8B8C8F; font-weight:bold;  text-decoration:underline; '>".$LANG["mailing"][3]."</span>:<br>".ereg_replace("\n","<br>",$fup->fields["contents"])."\n";
                                                if ($fup->fields["realtime"]>0)
-                                                       $message .= "<span style='color:#8B8C8F; font-weight:bold;  text-decoration:underline; '>".$LANG["mailing"][104].":</span> ".getRealtime($fup->fields["realtime"])."<br>";
+                                                       $message .= "<span style='color:#8B8C8F; font-weight:bold;  text-decoration:underline; '>".$LANG["mailing"][104].":</span> ".getRealtime($fup->fields["realtime"])."\n";

                                                $message.="<span style='color:#8B8C8F; font-weight:bold;  text-decoration:underline; '>".$LANG["mailing"][25]."</span> ";
                                                $query2="SELECT * from glpi_tracking_planning WHERE id_followup='".$data['ID']."'";
                                                $result2=$DB->query($query2);
                                                if ($DB->numrows($result2)==0)
-                                                       $message.=$LANG["job"][32]."<br>";
+                                                       $message.=$LANG["job"][32]."\n";
                                                else {
                                                        $data2=$DB->fetch_array($result2);
-                                                       $message.=convDateTime($data2["begin"])." -> ".convDateTime($data2["end"])."<br>";
+                                                       $message.=convDateTime($data2["begin"])." -> ".convDateTime($data2["end"])."\n";
                                                }

-                                               $message.=$LANG["mailing"][0]."<br>";
+                                               $message.=$LANG["mailing"][0]."\n";
                                        }
                                }
                        }else{ // text format
@@ -879,17 +879,17 @@
                        $message.=".description{ color: inherit; background: #ebebeb; border-style: solid; border-color: #8d8d8d; border-width: 0px 1px 1px 0px; }";
                        $message.=" </style></head><body>";

-                       $message.="<div class='description'><strong>".$LANG["mailing"][5]."</strong></div><br>";
-                       $message.="<span style='color:#8B8C8F; font-weight:bold;  text-decoration:underline; '>".$LANG["common"][57].":</span> ".$this->fields["name"]."<br>";
+                       $message.="<div class='description'><strong>".$LANG["mailing"][5]."</strong></div>\n";
+                       $message.="<span style='color:#8B8C8F; font-weight:bold;  text-decoration:underline; '>".$LANG["common"][57].":</span> ".$this->fields["name"]."\n";
                        $author=$this->getAuthorName();
                        if (empty($author)) $author=$LANG["mailing"][108];
-                       $message.="<span style='color:#8B8C8F; font-weight:bold;  text-decoration:underline; '>".$LANG["job"][4].":</span> ".$author."<br>";
-                       $message.="<span style='color:#8B8C8F; font-weight:bold;  text-decoration:underline; '>". $LANG["search"][8].":</span> ".convDateTime($this->fields["date"])."<br>";
-                       $message.="<span style='color:#8B8C8F; font-weight:bold;  text-decoration:underline; '>". $LANG["job"][44].":</span> ".getRequestTypeName($this->fields["request_type"])."<br>";
-                       $message.="<span style='color:#8B8C8F; font-weight:bold;  text-decoration:underline; '>". $LANG["mailing"][7].":</span> ".$name."<br>";
+                       $message.="<span style='color:#8B8C8F; font-weight:bold;  text-decoration:underline; '>".$LANG["job"][4].":</span> ".$author."\n";
+                       $message.="<span style='color:#8B8C8F; font-weight:bold;  text-decoration:underline; '>". $LANG["search"][8].":</span> ".convDateTime($this->fields["date"])."\n";
+                       $message.="<span style='color:#8B8C8F; font-weight:bold;  text-decoration:underline; '>". $LANG["job"][44].":</span> ".getRequestTypeName($this->fields["request_type"])."\n";
+                       $message.="<span style='color:#8B8C8F; font-weight:bold;  text-decoration:underline; '>". $LANG["mailing"][7].":</span> ".$name."\n";
                        if (!empty($tech))
-                               $message.="<span style='color:#8B8C8F; font-weight:bold;  text-decoration:underline; '>". $LANG["common"][10].":</span> ".$tech."<br>";
-                       $message.= "<span style='color:#8B8C8F; font-weight:bold;  text-decoration:underline; '>".$LANG["joblist"][0].":</span> ".getStatusName($this->fields["status"])."<br>";
+                               $message.="<span style='color:#8B8C8F; font-weight:bold;  text-decoration:underline; '>". $LANG["common"][10].":</span> ".$tech."\n";
+                       $message.= "<span style='color:#8B8C8F; font-weight:bold;  text-decoration:underline; '>".$LANG["joblist"][0].":</span> ".getStatusName($this->fields["status"])."\n";
                        $assign=getAssignName($this->fields["assign"],USER_TYPE);
                        $assign_group="";
                        if (isset($this->fields["assign_group"])){
@@ -906,22 +906,22 @@
                                        $assign.=" / ".$assign_group;
                                }
                        }
-                       $message.= "<span style='color:#8B8C8F; font-weight:bold;  text-decoration:underline; '>".$LANG["mailing"][8].":</span> ".$assign."<br>";
-                       $message.="<span style='color:#8B8C8F; font-weight:bold;  text-decoration:underline; '>".$LANG["joblist"][2].":</span> ".getPriorityName($this->fields["priority"])."<br>";
+                       $message.= "<span style='color:#8B8C8F; font-weight:bold;  text-decoration:underline; '>".$LANG["mailing"][8].":</span> ".$assign."\n";
+                       $message.="<span style='color:#8B8C8F; font-weight:bold;  text-decoration:underline; '>".$LANG["joblist"][2].":</span> ".getPriorityName($this->fields["priority"])."\n";
                        if ($this->fields["device_type"]!=SOFTWARE_TYPE&&!empty($contact))
-                               $message.= "<span style='color:#8B8C8F; font-weight:bold;  text-decoration:underline; '>".$LANG["common"][18].":</span> ".$contact."<br>";
+                               $message.= "<span style='color:#8B8C8F; font-weight:bold;  text-decoration:underline; '>".$LANG["common"][18].":</span> ".$contact."\n";
                        if ($this->fields["emailupdates"]){
-                               $message.="<span style='color:#8B8C8F; font-weight:bold;  text-decoration:underline; '>".$LANG["mailing"][103].":</span> ".$LANG["choice"][1]."<br>";
+                               $message.="<span style='color:#8B8C8F; font-weight:bold;  text-decoration:underline; '>".$LANG["mailing"][103].":</span> ".$LANG["choice"][1]."\n";
                        } else {
-                               $message.="<span style='color:#8B8C8F; font-weight:bold;  text-decoration:underline; '>".$LANG["mailing"][103].":</span> ".$LANG["choice"][0]."<br>";
+                               $message.="<span style='color:#8B8C8F; font-weight:bold;  text-decoration:underline; '>".$LANG["mailing"][103].":</span> ".$LANG["choice"][0]."\n";
                        }

                        $message.= "<span style='color:#8B8C8F; font-weight:bold;  text-decoration:underline; '>".$LANG["common"][36].":</span> ";
                        if (isset($this->fields["category"])&&$this->fields["category"]){
                                $message.= getDropdownName("glpi_dropdown_tracking_category",$this->fields["category"]);
                        } else $message.=$LANG["mailing"][100];
-                       $message.= "<br>";
-                       $message.="<span style='color:#8B8C8F; font-weight:bold;  text-decoration:underline; '>". $LANG["mailing"][3].":</span><br>".ereg_replace("\n","<br>",$this->fields["contents"])."<br><br>";
+                       $message.= "\n";
+                       $message.="<span style='color:#8B8C8F; font-weight:bold;  text-decoration:underline; '>". $LANG["mailing"][3].":</span><br>".ereg_replace("\n","<br>",$this->fields["contents"])."<br>\n";

                }else{ //text format
                        $message = $LANG["mailing"][1]."\n*".$LANG["mailing"][5]."*\n".$LANG["mailing"][1]."\n";

Working environment: Fedora 22, GLPI 0.90.1, upgraded from 0.72.0, 0.78, 0.83 PHP/5.6.16, MySQL/10.0.21-MariaDB, Apache/2.4.17, Firefox 43
Transifex: https://www.transifex.com/accounts/profile/eiseli/

Offline

#3 2008-07-22 12:07:58

MoYo
GLPI - Lead
From: Poitiers
Registered: 2004-09-13
Posts: 14,513
Website

Re: Mails HTML: saut de ligne automatique au mauvais endroit

le \n en HTML ne doit pas se voir.
je comprend pas votre correction.
Si vous lisez le mail en HTML l'ajout de \n ne doit rien changer.


MoYo - Julien Dombre - Association INDEPNET
Contribute to GLPI :    Support     Contribute     References     Freshmeat

Offline

#4 2008-07-22 12:23:21

eiseli
Member
From: Switzerland
Registered: 2008-06-10
Posts: 148

Re: Mails HTML: saut de ligne automatique au mauvais endroit

Dans le deuxième diff ci-dessus, je remplace les <br> par \n car le \n sera remplacé par <br>\n dans ma fonction modifiée get_mail_body (voir premier diff). De cette façon:

1) je créé des mises à la ligne "\n" dans le code du mail, ce qui corrige le problème des lignes à environ 1000 caractères qui posent problème à certains MTAs (je ne sais pas si c'est même tous les MTAs qui ont ce problème...)

2) statu quo au niveau des <br> qui sont nécessaires pour le formatage HTML

En d'autres termes, avant la modification, le script génère du code html du genre:

machinchose<br>trucmuche<br>Encore autre chose<br>etc...<br>

Avec mes modifications:

machinchose<br>
trucmuche<br>
Encore autre chose<br>
etc...<br>

En ce qui concerne l'affichage d'HTML, ce sera la même chose, vu que la mise à la ligne avec \n est traitée comme un "Blank" uniquement, mais cela corrige le problème des longues lignes. Et en plus, cela a pour avantage de rendre le code html un peu plus lisible, si quelqu'un veut changer un peu la présentation du mail.

Last edited by eiseli (2008-07-22 12:25:59)


Working environment: Fedora 22, GLPI 0.90.1, upgraded from 0.72.0, 0.78, 0.83 PHP/5.6.16, MySQL/10.0.21-MariaDB, Apache/2.4.17, Firefox 43
Transifex: https://www.transifex.com/accounts/profile/eiseli/

Offline

#5 2008-08-15 08:05:05

js
Member
From: Sainte-Marie (Réunion)
Registered: 2005-05-10
Posts: 11
Website

Re: Mails HTML: saut de ligne automatique au mauvais endroit

Bonjour,

Je confirme ce problème (qui a toujours été après le passage aux mails en html);
Moyo, je vais t'envoyer une copie de ce que cela donne (l'affichage sous thunderbird linux/ windows
et outlook express6 donnent la même chose)

Je vais appliquer les modifs ci-dessus sur notre install de glpi, et voir si, cette semaine, le problème est réglé
Ah, ce fichu bug! smile

Cordialement,

js.

Offline

#6 2008-08-15 08:30:24

js
Member
From: Sainte-Marie (Réunion)
Registered: 2005-05-10
Posts: 11
Website

Re: Mails HTML: saut de ligne automatique au mauvais endroit

Je viens d'appliquer les modifs;
Magique!.. l'affichage est parfait, enfin!..

Offline

#7 2008-08-15 12:27:42

eiseli
Member
From: Switzerland
Registered: 2008-06-10
Posts: 148

Re: Mails HTML: saut de ligne automatique au mauvais endroit

Ah, ça fait du bien de voir que je ne suis pas seul wink


Working environment: Fedora 22, GLPI 0.90.1, upgraded from 0.72.0, 0.78, 0.83 PHP/5.6.16, MySQL/10.0.21-MariaDB, Apache/2.4.17, Firefox 43
Transifex: https://www.transifex.com/accounts/profile/eiseli/

Offline

#8 2008-08-15 21:02:23

js
Member
From: Sainte-Marie (Réunion)
Registered: 2005-05-10
Posts: 11
Website

Re: Mails HTML: saut de ligne automatique au mauvais endroit

un ticket a été ouvert par Julien:
https://dev.indepnet.net/glpi/ticket/1113

smile

Offline

Board footer

Powered by FluxBB