diff --git a/api/src/Mail.php b/api/src/Mail.php index 85dcbcc806..29a326b686 100644 --- a/api/src/Mail.php +++ b/api/src/Mail.php @@ -1709,18 +1709,23 @@ class Mail ((intval($mime_id) === 1) || !$mime_id) && ($partdisposition !== 'attachment')) { $_structure=$part; - $this->fetchPartContents($uid, $_structure, false,true); - $headerObject['BODYPREVIEW']=trim(str_replace(array("\r\n","\r","\n"),' ',mb_substr(Mail\Html::convertHTMLToText($_structure->getContents()),0,((int)$_fetchPreviews<300?300:$_fetchPreviews)))); - $charSet = $part->getCharset(); - // check if client set a wrong charset and content is utf-8 --> use utf-8 - if (strtolower($charSet) !='utf-8' && preg_match('//u', $headerObject['BODYPREVIEW'])) - { - $charSet = 'UTF-8'; + try { + $this->fetchPartContents($uid, $_structure, false,true); + $headerObject['BODYPREVIEW']=trim(str_replace(array("\r\n","\r","\n"),' ',mb_substr(Mail\Html::convertHTMLToText($_structure->getContents()),0,((int)$_fetchPreviews<300?300:$_fetchPreviews)))); + $charSet = $part->getCharset(); + // check if client set a wrong charset and content is utf-8 --> use utf-8 + if (strtolower($charSet) !='utf-8' && preg_match('//u', $headerObject['BODYPREVIEW'])) + { + $charSet = 'UTF-8'; + } + // add line breaks to $bodyParts + //error_log(__METHOD__.' ('.__LINE__.') '.' Charset:'.$bodyParts[$i]['charSet'].'->'.$bodyParts[$i]['body']); + $headerObject['BODYPREVIEW'] = Translation::convert_jsonsafe($headerObject['BODYPREVIEW'], $charSet); + //error_log(__METHOD__.__LINE__.$headerObject['BODYPREVIEW']); + } + catch (\Exception $e) { + // mail probably has no text-part } - // add line breaks to $bodyParts - //error_log(__METHOD__.' ('.__LINE__.') '.' Charset:'.$bodyParts[$i]['charSet'].'->'.$bodyParts[$i]['body']); - $headerObject['BODYPREVIEW'] = Translation::convert_jsonsafe($headerObject['BODYPREVIEW'], $charSet); - //error_log(__METHOD__.__LINE__.$headerObject['BODYPREVIEW']); } //error_log(__METHOD__.' ('.__LINE__.') '.' Uid:'.$uid.'->'.$mime_id.' Disp:'.$partdisposition.' Type:'.$partPrimaryType); $cid = $part->getContentId(); @@ -4893,9 +4898,14 @@ class Mail if (empty($partToReturn)&&$_tryDecodingServerside===true) { error_log(__METHOD__.__LINE__.' failed to fetch bodyPart in BINARY. Try BODY'); - $partToReturn = $this->getBodyPart($_uid, $_partID, $_folder, $_preserveSeen, $_stream, $_encoding, false); + try { + $partToReturn = $this->getBodyPart($_uid, $_partID, $_folder, $_preserveSeen, $_stream, $_encoding, false); + } + catch(\Exception $e) { + // mail probably has no text-body + } } - return ($partToReturn?$partToReturn:null); + return $partToReturn ?: null; } /** @@ -4938,15 +4948,25 @@ class Mail // RB: not sure what this is: preg_replace('/PropertyFile___$/','',$this->decodeMimePart($mimePartBody, $_structure->encoding, $this->getMimePartCharset($_structure))), // Should not try to fetch if the content is already there (e.g. Smime encrypted message) - if (empty($_structure->getContents())) $this->fetchPartContents($_uid, $_structure, $_stream, $_preserveSeen); + try { + if (empty($_structure->getContents())) $this->fetchPartContents($_uid, $_structure, $_stream, $_preserveSeen); - $bodyPart = array( - 'body' => $_structure->getContents(array( - 'stream' => $_stream, - )), - 'mimeType' => $_structure->getType() == 'text/html' ? 'text/html' : 'text/plain', - 'charSet' => $_structure->getCharset(), - ); + $bodyPart = array( + 'body' => $_structure->getContents(array( + 'stream' => $_stream, + )), + 'mimeType' => $_structure->getType() == 'text/html' ? 'text/html' : 'text/plain', + 'charSet' => $_structure->getCharset(), + ); + } + catch (\Exception $e) { + $bodyPart = array( + 'error' => 1, + 'body' => lang('Mail probably has no text-body').":\n\n".$e->getMessage(), + 'mimeType' => 'text/plain', // make sure we do not return mimeType text/html + 'charSet' => self::$displayCharset, + ); + } } return $bodyPart; } diff --git a/mail/lang/egw_de.lang b/mail/lang/egw_de.lang index 21335f2cac..0ca42bb4ce 100644 --- a/mail/lang/egw_de.lang +++ b/mail/lang/egw_de.lang @@ -345,6 +345,7 @@ mail common de E-Mail mail acl mail de Zugriffsrechte mail filter mail de Filter mail filter rule mail de Filter-Regel +mail probably has no text-body mail de Die Mail hat vermutlich keinen Textteil mail settings mail de E-Mail-Einstellungen mail source mail de Nachrichten-Quelltext anzeigen mail-address mail de E-Mail-Adresse diff --git a/mail/lang/egw_en.lang b/mail/lang/egw_en.lang index 09fa84e726..e46debfc3d 100644 --- a/mail/lang/egw_en.lang +++ b/mail/lang/egw_en.lang @@ -345,6 +345,7 @@ mail common en Mail mail acl mail en Email access rights mail filter mail en Filter mail filter rule mail en Mail filter rule +mail probably has no text-body mail en Mail probably has no text-body mail settings mail en Mail settings mail source mail en Mail Source mail-address mail en Mail-Address