public function Execute()
 {
     if (!CModule::IncludeModule('crm')) {
         CBPActivityExecutionStatus::Closed;
     }
     $rootActivity = $this->GetRootActivity();
     $documentId = $rootActivity->GetDocumentId();
     $documentService = $this->workflow->GetService("DocumentService");
     $strMailUserFrom = "";
     $arMailUserFromArray = CBPHelper::ExtractUsers($this->MailUserFromArray, $documentId, false);
     foreach ($arMailUserFromArray as $user) {
         $dbUser = CUser::GetList($b = "", $o = "", array("ID_EQUAL_EXACT" => $user));
         if ($arUser = $dbUser->Fetch()) {
             if (strlen($strMailUserFrom) > 0) {
                 $strMailUserFrom .= ", ";
             }
             if (!defined("BX_MS_SMTP") || BX_MS_SMTP !== true) {
                 if (strlen($arUser["NAME"]) > 0 || strlen($arUser["LAST_NAME"]) > 0) {
                     $strMailUserFrom .= "'" . preg_replace("#['\r\n]+#", "", CUser::FormatName(COption::GetOptionString("bizproc", "name_template", CSite::GetNameFormat(false), SITE_ID), $arUser)) . "' <";
                 }
             }
             $strMailUserFrom .= preg_replace("#[\r\n]+#", "", $arUser["EMAIL"]);
             if (!defined("BX_MS_SMTP") || BX_MS_SMTP !== true) {
                 if (strlen($arUser["NAME"]) > 0 || strlen($arUser["LAST_NAME"]) > 0) {
                     $strMailUserFrom .= ">";
                 }
             }
         }
     }
     $mailUserFromTmp = $this->MailUserFrom;
     if (strlen($mailUserFromTmp) > 0) {
         if (strlen($strMailUserFrom) > 0) {
             $strMailUserFrom .= ", ";
         }
         $strMailUserFrom .= preg_replace("#[\r\n]+#", "", $mailUserFromTmp);
     }
     $strMailTo = '';
     if (is_array($this->MailCrmEntityToArray)) {
         $addressType = $this->MailCrmEntityAddressType !== '' ? $this->MailCrmEntityAddressType : 'WORK';
         foreach ($this->MailCrmEntityToArray as &$entityData) {
             $s = '';
             if (is_string($entityData)) {
                 $s = trim($entityData);
             } elseif (is_array($entityData) && isset($entityData['VALUE'])) {
                 $s = trim($entityData['VALUE']);
             }
             if ($s === '') {
                 continue;
             }
             $entityInfo = array();
             if (CCrmEntityHelper::ParseEntityKey($s, $entityInfo)) {
                 //Process entity key
                 $dbResult = CCrmFieldMulti::GetList(array('ID' => 'asc'), array('ENTITY_ID' => $entityInfo['ENTITY_TYPE_NAME'], 'ELEMENT_ID' => $entityInfo['ENTITY_ID'], 'TYPE_ID' => 'EMAIL', 'VALUE_TYPE' => $addressType));
                 if ($dbResult) {
                     while ($arField = $dbResult->Fetch()) {
                         $v = isset($arField['VALUE']) ? trim($arField['VALUE']) : '';
                         if ($v === '' || !check_email($v)) {
                             continue;
                         }
                         if ($strMailTo !== '') {
                             $strMailTo .= ', ';
                         }
                         $strMailTo .= preg_replace("#[\r\n]+#", "", $v);
                         break;
                     }
                 }
             } else {
                 $ary = explode(',', $s);
                 foreach ($ary as &$v) {
                     $v = trim($v);
                     if ($v === '' || !check_email($v)) {
                         continue;
                     }
                     if ($strMailTo !== '') {
                         $strMailTo .= ', ';
                     }
                     $strMailTo .= preg_replace("#[\r\n]+#", "", $v);
                 }
                 unset($v);
             }
         }
         unset($entityData);
     }
     $strReplyTo = $strMailUserFrom;
     $strCrmEmail = CCrmMailHelper::ExtractEmail(COption::GetOptionString('crm', 'mail', ''));
     if ($strCrmEmail !== '') {
         $strReplyTo .= ', ' . $strCrmEmail;
     }
     $charset = $this->MailCharset;
     if (!$this->IsPropertyExists("DirrectMail") || $this->DirrectMail == "Y") {
         global $APPLICATION;
         $strMailUserFrom = $APPLICATION->ConvertCharset($strMailUserFrom, SITE_CHARSET, $charset);
         $strMailUserFrom = self::EncodeHeaderFrom($strMailUserFrom, $charset);
         $strReplyTo = $APPLICATION->ConvertCharset($strReplyTo, SITE_CHARSET, $charset);
         $strReplyTo = self::EncodeHeaderFrom($strReplyTo, $charset);
         $strMailTo = $APPLICATION->ConvertCharset($strMailTo, SITE_CHARSET, $charset);
         $strMailTo = self::EncodeMimeString($strMailTo, $charset);
         $mailSubject = $APPLICATION->ConvertCharset($this->MailSubject, SITE_CHARSET, $charset);
         $mailSubject = self::EncodeSubject($mailSubject, $charset);
         $mailText = $APPLICATION->ConvertCharset(CBPHelper::ConvertTextForMail($this->MailText), SITE_CHARSET, $charset);
         $eol = CAllEvent::GetMailEOL();
         mail($strMailTo, $mailSubject, $mailText, "From: " . $strMailUserFrom . $eol . "Reply-To: " . $strReplyTo . $eol . "X-Priority: 3 (Normal)" . $eol . "Content-Type: text/" . ($this->MailMessageType == "html" ? "html" : "plain") . "; charset=" . $charset . $eol . "X-Mailer: PHP/" . phpversion());
     } else {
         $siteId = null;
         if ($this->IsPropertyExists("MailSite")) {
             $siteId = $this->MailSite;
         }
         if (strlen($siteId) <= 0) {
             $siteId = SITE_ID;
         }
         $arFields = array("SENDER" => $strMailUserFrom, "RECEIVER" => $strMailTo, "REPLY_TO" => $strReplyTo, "TITLE" => $this->MailSubject, "MESSAGE" => CBPHelper::ConvertTextForMail($this->MailText));
         $event = new CEvent();
         $event->Send("BIZPROC_MAIL_TEMPLATE", $siteId, $arFields, "N");
     }
     return CBPActivityExecutionStatus::Closed;
 }