Ejemplo n.º 1
0
 public static function TrySendEmail($ID, &$arFields, &$arErrors)
 {
     global $APPLICATION;
     if (!CModule::IncludeModule('subscribe')) {
         $arErrors[] = array('CODE' => self::ERR_CANT_LOAD_SUBSCRIBE);
         return false;
     }
     $ID = intval($ID);
     if ($ID <= 0 && isset($arFields['ID'])) {
         $ID = intval($arFields['ID']);
     }
     if ($ID <= 0 || !is_array($arFields)) {
         $arErrors[] = array('CODE' => self::ERR_INVALID_DATA);
         return false;
     }
     $typeID = isset($arFields['TYPE_ID']) ? intval($arFields['TYPE_ID']) : CCrmActivityType::Undefined;
     if ($typeID !== CCrmActivityType::Email) {
         $arErrors[] = array('CODE' => self::ERR_INVALID_DATA);
         return false;
     }
     $urn = CCrmActivity::PrepareUrn($arFields);
     if (!($urn !== '' && CCrmActivity::Update($ID, array('URN' => $urn), false, false))) {
         $arErrors[] = array('CODE' => self::ERR_CANT_UPDATE_ACTIVITY);
         return false;
     }
     $settings = isset($arFields['SETTINGS']) && is_array($arFields['SETTINGS']) ? $arFields['SETTINGS'] : array();
     // Creating Email -->
     $crmEmail = CCrmMailHelper::ExtractEmail(COption::GetOptionString('crm', 'mail', ''));
     $from = isset($settings['MESSAGE_FROM']) ? trim(strval($settings['MESSAGE_FROM'])) : '';
     if ($from === '') {
         if ($crmEmail !== '') {
             $from = $crmEmail;
         } else {
             $arErrors[] = array('CODE' => self::ERR_CANT_FIND_EMAIL_FROM);
         }
     } elseif (!check_email($from)) {
         $arErrors[] = array('CODE' => self::ERR_INVALID_EMAIL, 'DATA' => array('EMAIL' => $from));
     }
     //Save user email in settings -->
     if ($from !== CUserOptions::GetOption('crm', 'activity_email_addresser', '')) {
         CUserOptions::SetOption('crm', 'activity_email_addresser', $from);
     }
     //<-- Save user email in settings
     $to = array();
     $commData = isset($arFields['COMMUNICATIONS']) ? $arFields['COMMUNICATIONS'] : array();
     foreach ($commData as &$commDatum) {
         $commType = isset($commDatum['TYPE']) ? strtoupper(strval($commDatum['TYPE'])) : '';
         $commValue = isset($commDatum['VALUE']) ? strval($commDatum['VALUE']) : '';
         if ($commType !== 'EMAIL' || $commValue === '') {
             continue;
         }
         if (!check_email($commValue)) {
             $arErrors[] = array('CODE' => self::ERR_INVALID_EMAIL, 'DATA' => array('EMAIL' => $commValue));
             continue;
         }
         $to[] = strtolower(trim($commValue));
     }
     unset($commDatum);
     if (count($to) == 0) {
         $arErrors[] = array('CODE' => self::ERR_CANT_FIND_EMAIL_TO);
     }
     if (!empty($arErrors)) {
         return false;
     }
     // Try to resolve posting charset -->
     $postingCharset = '';
     $siteCharset = defined('LANG_CHARSET') ? LANG_CHARSET : (defined('SITE_CHARSET') ? SITE_CHARSET : 'windows-1251');
     $arSupportedCharset = explode(',', COption::GetOptionString('subscribe', 'posting_charset'));
     if (count($arSupportedCharset) === 0) {
         $postingCharset = $siteCharset;
     } else {
         foreach ($arSupportedCharset as $curCharset) {
             if (strcasecmp($curCharset, $siteCharset) === 0) {
                 $postingCharset = $curCharset;
                 break;
             }
         }
         if ($postingCharset === '') {
             $postingCharset = $arSupportedCharset[0];
         }
     }
     //<-- Try to resolve posting charset
     $subject = isset($arFields['SUBJECT']) ? $arFields['SUBJECT'] : '';
     $description = isset($arFields['DESCRIPTION']) ? $arFields['DESCRIPTION'] : '';
     $descriptionType = isset($arFields['DESCRIPTION_TYPE']) ? intval($arFields['DESCRIPTION_TYPE']) : CCrmContentType::PlainText;
     $descriptionHtml = '';
     if ($descriptionType === CCrmContentType::Html) {
         $descriptionHtml = $description;
     } elseif ($descriptionType === CCrmContentType::BBCode) {
         $parser = new CTextParser();
         $descriptionHtml = $parser->convertText($description);
     } elseif ($descriptionType === CCrmContentType::PlainText) {
         $descriptionHtml = htmlspecialcharsbx($description);
     }
     $postingData = array('STATUS' => 'D', 'FROM_FIELD' => $from, 'TO_FIELD' => $from, 'BCC_FIELD' => implode(',', $to), 'SUBJECT' => $subject, 'BODY_TYPE' => 'html', 'BODY' => $descriptionHtml, 'DIRECT_SEND' => 'Y', 'SUBSCR_FORMAT' => 'html', 'CHARSET' => $postingCharset);
     CCrmActivity::InjectUrnInMessage($postingData, $urn, CCrmEMailCodeAllocation::GetCurrent());
     $posting = new CPosting();
     $postingID = $posting->Add($postingData);
     if ($postingID === false) {
         $arErrors[] = array('CODE' => self::ERR_CANT_ADD_POSTING, 'MESSAGE' => $posting->LAST_ERROR);
         return false;
     }
     $arUpdateFields = array('COMPLETED' => 'Y', 'ASSOCIATED_ENTITY_ID' => $postingID, 'SETTINGS' => $settings);
     $fromEmail = strtolower(trim(CCrmMailHelper::ExtractEmail($from)));
     if ($crmEmail !== '' && $fromEmail !== $crmEmail) {
         $arUpdateFields['SETTINGS']['MESSAGE_HEADERS'] = array('Reply-To' => "<{$fromEmail}>, <{$crmEmail}>");
     }
     $arUpdateFields['SETTINGS']['IS_MESSAGE_SENT'] = true;
     if (!CCrmActivity::Update($ID, $arUpdateFields, false, false)) {
         $arErrors[] = array('CODE' => self::ERR_CANT_UPDATE_ACTIVITY);
         return false;
     }
     // <-- Creating Email
     // Attaching files -->
     $storageTypeID = isset($arFields['STORAGE_TYPE_ID']) ? intval($arFields['STORAGE_TYPE_ID']) : StorageType::Undefined;
     $storageElementsID = isset($arFields['STORAGE_ELEMENT_IDS']) && is_array($arFields['STORAGE_ELEMENT_IDS']) ? $arFields['STORAGE_ELEMENT_IDS'] : array();
     $arRawFiles = StorageManager::makeFileArray($storageElementsID, $storageTypeID);
     foreach ($arRawFiles as &$arRawFile) {
         if (!$posting->SaveFile($postingID, $arRawFile)) {
             $arErrors[] = array('CODE' => self::ERR_CANT_SAVE_POSTING_FILE, 'MESSAGE' => $posting->LAST_ERROR);
             return false;
         }
     }
     unset($arRawFile);
     // <-- Attaching files
     // Sending Email -->
     if ($posting->ChangeStatus($postingID, 'P')) {
         $rsAgents = CAgent::GetList(array('ID' => 'DESC'), array('MODULE_ID' => 'subscribe', 'NAME' => 'CPosting::AutoSend(' . $postingID . ',%'));
         if (!$rsAgents->Fetch()) {
             CAgent::AddAgent('CPosting::AutoSend(' . $postingID . ',true);', 'subscribe', 'N', 0);
         }
     }
     // Try add event to entity
     $CCrmEvent = new CCrmEvent();
     $ownerID = isset($arFields['OWNER_ID']) ? intval($arFields['OWNER_ID']) : 0;
     $ownerTypeID = isset($arFields['OWNER_TYPE_ID']) ? intval($arFields['OWNER_TYPE_ID']) : 0;
     if ($ownerID > 0 && $ownerTypeID > 0) {
         $eventText = '';
         $eventText .= GetMessage('CRM_ACTIVITY_EMAIL_SUBJECT') . ': ' . $subject . "\n\r";
         $eventText .= GetMessage('CRM_ACTIVITY_EMAIL_FROM') . ': ' . $from . "\n\r";
         $eventText .= GetMessage('CRM_ACTIVITY_EMAIL_TO') . ': ' . implode(',', $to) . "\n\r\n\r";
         $eventText .= $description;
         // Register event only for owner
         $CCrmEvent->Add(array('ENTITY' => array($ownerID => array('ENTITY_TYPE' => CCrmOwnerType::ResolveName($ownerTypeID), 'ENTITY_ID' => $ownerID)), 'EVENT_ID' => 'MESSAGE', 'EVENT_TEXT_1' => $eventText, 'FILES' => $arRawFiles));
     }
     // <-- Sending Email
     return true;
 }
Ejemplo n.º 2
0
                $arFields['COMMUNICATIONS'] =& $comms;
                unset($comms);
            }
        }
    }
}
CCrmMobileHelper::PrepareActivityItem($arFields, $arParams, array('ENABLE_COMMUNICATIONS' => true, 'ENABLE_FILES' => true));
//Trim seconds
$arFields['START_TIME'] = CCrmComponentHelper::TrimDateTimeString(FormatDate('FULL', $arFields['START_TIME_STAMP']));
$arFields['END_TIME'] = CCrmComponentHelper::TrimDateTimeString(FormatDate('FULL', $arFields['END_TIME_STAMP']));
$arResult['ENTITY'] = $arFields;
unset($arFields);
if ($typeID === CCrmActivityType::Call || $typeID === CCrmActivityType::Meeting) {
    $arResult['NOTIFY_TYPES'] = CCrmActivityNotifyType::PrepareListItems();
} elseif ($typeID === CCrmActivityType::Email) {
    $arResult['CRM_EMAIL'] = CCrmMailHelper::ExtractEmail(COption::GetOptionString('crm', 'mail', ''));
    $lastEmailAddresser = CUserOptions::GetOption('crm', 'activity_email_addresser', '');
    if ($lastEmailAddresser === '') {
        $arResult['USER_LAST_USED_NAME'] = '';
        $arResult['USER_LAST_USED_EMAIL'] = '';
    } else {
        $info = CCrmMailHelper::ParseEmail($lastEmailAddresser);
        $arResult['USER_LAST_USED_NAME'] = $info['NAME'];
        $arResult['USER_LAST_USED_EMAIL'] = $info['EMAIL'];
    }
    $dbUser = CUser::GetList($by = 'id', $order = 'asc', array('ID_EQUAL_EXACT' => $currentUserID), array('FIELDS' => array('LOGIN', 'NAME', 'SECOND_NAME', 'LAST_NAME', 'EMAIL', 'PERSONAL_PHOTO')));
    $user = $dbUser->Fetch();
    if (!is_array($user)) {
        $arResult['USER_EMAIL'] = '';
        $arResult['USER_FULL_NAME'] = '';
        $arResult['USER_PHOTO_URL'] = '';
Ejemplo n.º 3
0
     $arRawFiles = isset($arFields['STORAGE_ELEMENT_IDS']) && !empty($arFields['STORAGE_ELEMENT_IDS']) ? \Bitrix\Crm\Integration\StorageManager::makeFileArray($arFields['STORAGE_ELEMENT_IDS'], $storageTypeID) : array();
     foreach ($arRawFiles as &$arRawFile) {
         if (isset($arRawFile['ORIGINAL_NAME'])) {
             $arRawFile['name'] = $arRawFile['ORIGINAL_NAME'];
         }
         if (!$posting->SaveFile($postingID, $arRawFile)) {
             $arErrors[] = GetMessage('CRM_ACTIVITY_COULD_NOT_SAVE_POSTING_FILE', array('#FILE_NAME#' => $arRawFile['ORIGINAL_NAME']));
             $arErrors[] = $posting->LAST_ERROR;
             break;
         }
     }
     unset($arRawFile);
     // <-- Attaching files
     if (empty($arErrors)) {
         $arUpdateFields = array('ASSOCIATED_ENTITY_ID' => $postingID);
         $fromEmail = strtolower(trim(CCrmMailHelper::ExtractEmail($from)));
         if ($crmEmail !== '' && $fromEmail !== $crmEmail) {
             $arUpdateFields['SETTINGS'] = array('MESSAGE_HEADERS' => array('Reply-To' => "<{$fromEmail}>, <{$crmEmail}>"));
         }
         CCrmActivity::Update($ID, $arUpdateFields, false, false);
     }
 }
 // <-- Creating Email
 if (!empty($arErrors)) {
     if ($isNew) {
         $arErrors[] = GetMessage('CRM_ACTIVITY_EMAIL_CREATION_CANCELED');
         CCrmActivity::Delete($ID);
     }
     echo CUtil::PhpToJSObject(array('ERROR' => $arErrors));
     die;
 }
Ejemplo n.º 4
0
 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;
 }