You are not logged in.
Pages: 1
Topic closed
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
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
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
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
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!
Cordialement,
js.
Offline
Je viens d'appliquer les modifs;
Magique!.. l'affichage est parfait, enfin!..
Offline
Ah, ça fait du bien de voir que je ne suis pas seul
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
un ticket a été ouvert par Julien:
https://dev.indepnet.net/glpi/ticket/1113
Offline
Pages: 1
Topic closed