diff --git a/application/Espo/Core/Mail/Importer.php b/application/Espo/Core/Mail/Importer.php index 9f9d5f9057..b9be1deab0 100644 --- a/application/Espo/Core/Mail/Importer.php +++ b/application/Espo/Core/Mail/Importer.php @@ -91,10 +91,12 @@ class Importer $toArr = $this->getAddressListFromMessage($message, 'to'); $ccArr = $this->getAddressListFromMessage($message, 'cc'); + $replyToArr = $this->getAddressListFromMessage($message, 'replyTo'); $email->set('from', $fromArr[0]); $email->set('to', implode(';', $toArr)); $email->set('cc', implode(';', $ccArr)); + $email->set('replyTo', implode(';', $replyToArr)); if ($this->getFiltersMatcher()->match($email, $filterList)) { return false; @@ -200,10 +202,15 @@ class Importer if ($from) { $parentFound = $this->findParent($email, $from); } - if (!$parentFound) { - if (!empty($toArr)) { - $parentFound = $this->findParent($email, $toArr[0]); - } + } + if (!$parentFound) { + if (!empty($replyToArr)) { + $parentFound = $this->findParent($email, $replyToArr[0]); + } + } + if (!$parentFound) { + if (!empty($toArr)) { + $parentFound = $this->findParent($email, $toArr[0]); } } @@ -268,7 +275,6 @@ class Importer { $addressList = array(); if (isset($message->$type)) { - $list = $message->getHeader($type)->getAddressList(); foreach ($list as $address) { $addressList[] = $address->getEmail(); diff --git a/application/Espo/Core/Mail/Sender.php b/application/Espo/Core/Mail/Sender.php index 29c57920a5..0109cee842 100644 --- a/application/Espo/Core/Mail/Sender.php +++ b/application/Espo/Core/Mail/Sender.php @@ -206,6 +206,16 @@ class Sender } } + $value = $email->get('replyTo'); + if ($value) { + $arr = explode(';', $value); + if (is_array($arr)) { + foreach ($arr as $address) { + $message->addReplyTo(trim($address)); + } + } + } + $attachmentPartList = array(); $attachmentCollection = $email->get('attachments'); $attachmentInlineCollection = $email->getInlineAttachments(); diff --git a/application/Espo/Entities/Email.php b/application/Espo/Entities/Email.php index 0a42365a89..3efd6a2faa 100644 --- a/application/Espo/Entities/Email.php +++ b/application/Espo/Entities/Email.php @@ -99,5 +99,53 @@ class Email extends \Espo\Core\ORM\Entity } return $attachmentList; } + + public function getToList() + { + $value = $email->get('to'); + if ($value) { + $arr = explode(';', $value); + if (is_array($arr)) { + return $arr; + } + } + return []; + } + + public function getCcList() + { + $value = $email->get('cc'); + if ($value) { + $arr = explode(';', $value); + if (is_array($arr)) { + return $arr; + } + } + return []; + } + + public function getBccList() + { + $value = $email->get('bcc'); + if ($value) { + $arr = explode(';', $value); + if (is_array($arr)) { + return $arr; + } + } + return []; + } + + public function getReplyToList() + { + $value = $email->get('replyTo'); + if ($value) { + $arr = explode(';', $value); + if (is_array($arr)) { + return $arr; + } + } + return []; + } } diff --git a/application/Espo/Repositories/Email.php b/application/Espo/Repositories/Email.php index c69c0d37ba..67f9c20b40 100644 --- a/application/Espo/Repositories/Email.php +++ b/application/Espo/Repositories/Email.php @@ -124,7 +124,7 @@ class Email extends \Espo\Core\ORM\Repositories\RDB } } - if ($entity->has('from') || $entity->has('to') || $entity->has('cc') || $entity->has('bcc')) { + if ($entity->has('from') || $entity->has('to') || $entity->has('cc') || $entity->has('bcc') || $entity->has('replyTo')) { if (!$entity->has('usersIds')) { $entity->loadLinkMultipleField('users'); } @@ -151,6 +151,9 @@ class Email extends \Espo\Core\ORM\Repositories\RDB if ($entity->has('bcc')) { $this->prepareAddressess($entity, 'bcc'); } + if ($entity->has('replyTo')) { + $this->prepareAddressess($entity, 'replyTo'); + } $usersIds = $entity->get('usersIds'); $assignedUserId = $entity->get('assignedUserId'); diff --git a/application/Espo/Resources/i18n/en_US/Email.json b/application/Espo/Resources/i18n/en_US/Email.json index 2936c54b3f..44ba652584 100644 --- a/application/Espo/Resources/i18n/en_US/Email.json +++ b/application/Espo/Resources/i18n/en_US/Email.json @@ -8,6 +8,8 @@ "to": "To", "cc": "CC", "bcc": "BCC", + "replyTo": "Reply To", + "replyToString": "Reply To (String)", "isHtml": "Is Html", "body": "Body", "subject": "Subject", diff --git a/application/Espo/Resources/metadata/entityDefs/Email.json b/application/Espo/Resources/metadata/entityDefs/Email.json index 9701e3a7a2..425f91ca40 100644 --- a/application/Espo/Resources/metadata/entityDefs/Email.json +++ b/application/Espo/Resources/metadata/entityDefs/Email.json @@ -7,7 +7,6 @@ "subject": { "type": "varchar", "required": true, - "db": false, "notStorable": true, "view": "Email.Fields.Subject" }, @@ -22,29 +21,30 @@ }, "from": { "type": "varchar", - "db": false, "notStorable": true, "required": true, - "view": "Email.Fields.FromAddressVarchar" + "view": "views/email/fields/from-address-varchar" }, "to": { "type": "varchar", - "db": false, "notStorable": true, "required": true, - "view": "Email.Fields.EmailAddressVarchar" + "view": "views/email/fields/email-address-varchar" }, "cc": { "type": "varchar", - "db": false, "notStorable": true, - "view": "Email.Fields.EmailAddressVarchar" + "view": "views/email/fields/email-address-varchar" }, "bcc": { "type": "varchar", - "db": false, "notStorable": true, - "view": "Email.Fields.EmailAddressVarchar" + "view": "views/email/fields/email-address-varchar" + }, + "replyTo": { + "type": "varchar", + "notStorable": true, + "view": "views/email/fields/email-address-varchar" }, "personStringData": { "type": "varchar",