get('name'); } protected function _setSubject($value) { $this->set('name', $value); } protected function _hasSubject() { return $this->has('name'); } protected function _hasFromName() { return $this->has('fromString'); } protected function _hasFromAddress() { return $this->has('fromString'); } protected function _hasReplyToName() { return $this->has('replyToString'); } protected function _hasReplyToAddress() { return $this->has('replyToString'); } protected function _getFromName() { if (!$this->has('fromString')) return null; return \Espo\Services\Email::parseFromName($this->get('fromString')); } protected function _getFromAddress() { if (!$this->has('fromString')) return null; return \Espo\Services\Email::parseFromAddress($this->get('fromString')); } protected function _getReplyToName() { if (!$this->has('replyToString')) return null; $string = $this->get('replyToString'); if (!$string) return null; $string = trim(explode(';', $string)[0]); return \Espo\Services\Email::parseFromName($string); } protected function _getReplyToAddress() { if (!$this->has('replyToString')) return null; $string = $this->get('replyToString'); if (!$string) return null; $string = trim(explode(';', $string)[0]); return \Espo\Services\Email::parseFromAddress($string); } protected function _setIsRead($value) { $this->setValue('isRead', $value !== false); if ($value === true || $value === false) { $this->setValue('isUsers', true); } else { $this->setValue('isUsers', false); } } public function isManuallyArchived() { return $this->get('status') === 'Archived' && $this->get('createdById') !== 'system'; } public function addAttachment(\Espo\Entities\Attachment $attachment) { if (!empty($this->id)) { $attachment->set('parentId', $this->id); $attachment->set('parentType', 'Email'); if ($this->entityManager->saveEntity($attachment)) { return true; } } } protected function _getBodyPlain() { return $this->getBodyPlain(); } public function hasBodyPlain() { return !empty($this->valuesContainer['bodyPlain']); } public function getBodyPlain() { if (!empty($this->valuesContainer['bodyPlain'])) { return $this->valuesContainer['bodyPlain']; } $body = $this->get('body'); $breaks = ["
","
","
","
","<br />","<br/>","<br>"]; $body = str_ireplace($breaks, "\r\n", $body); $body = strip_tags($body); $reList = [ '&(quot|#34);', '&(amp|#38);', '&(lt|#60);', '&(gt|#62);', '&(nbsp|#160);', '&(iexcl|#161);', '&(cent|#162);', '&(pound|#163);', '&(copy|#169);', '&(reg|#174);', ]; $replaceList = [ '', '&', '<', '>', ' ', chr(161), chr(162), chr(163), chr(169), chr(174), ]; foreach ($reList as $i => $re) { $body = mb_ereg_replace($re, $replaceList[$i], $body, 'i'); } return $body; } public function getBodyPlainForSending() { return $this->getBodyPlain(); } public function getBodyForSending() { $body = $this->get('body'); if (!empty($body)) { $attachmentList = $this->getInlineAttachments(); foreach ($attachmentList as $attachment) { $body = str_replace("\"?entryPoint=attachment&id={$attachment->id}\"", "\"cid:{$attachment->id}\"", $body); } } $body = str_replace("", "
", $body); return $body; } public function getInlineAttachments() { $attachmentList = []; $idList = []; $body = $this->get('body'); if (!empty($body)) { if (preg_match_all("/\?entryPoint=attachment&id=([^&=\"']+)/", $body, $matches)) { if (!empty($matches[1]) && is_array($matches[1])) { foreach ($matches[1] as $id) { if (in_array($id, $idList)) continue; $idList[] = $id; $attachment = $this->entityManager->getEntity('Attachment', $id); if ($attachment) { $attachmentList[] = $attachment; } } } } } return $attachmentList; } public function getToList() { $value = $this->get('to'); if ($value) { $arr = explode(';', $value); if (is_array($arr)) { return $arr; } } return []; } public function getCcList() { $value = $this->get('cc'); if ($value) { $arr = explode(';', $value); if (is_array($arr)) { return $arr; } } return []; } public function getBccList() { $value = $this->get('bcc'); if ($value) { $arr = explode(';', $value); if (is_array($arr)) { return $arr; } } return []; } public function getReplyToList() { $value = $this->get('replyTo'); if ($value) { $arr = explode(';', $value); if (is_array($arr)) { return $arr; } } return []; } public function setDummyMessageId() { $this->set('messageId', 'dummy:' . \Espo\Core\Utils\Util::generateId()); } }