示例#1
0
	function check_connect_mail()
	{
		if (!CModule::IncludeModule('mail'))
			return $this->Result(null, GetMessage("MAIN_SC_MAIL_IS_NOT_INSTALLED"));
		$rs = CMailBox::GetList(array(), array('SERVER_TYPE' => 'imap'));
		if ($rs->Fetch())
			return true;
		return $this->Result(null, GetMessage("MAIN_SC_MAIL_INTEGRATION"));
	}
示例#2
0
文件: smtp.php 项目: Satariall/izurit
 function ReloadServers()
 {
     global $BX_MAIL_FILTER_CACHE;
     $BX_MAIL_FILTER_CACHE = array();
     $rnd = uniqid();
     $dbr = CMailBox::GetList(array(), array("ACTIVE" => "Y", "SERVER_TYPE" => "smtp"));
     $arFounded = array();
     while ($arr = $dbr->Fetch()) {
         $bFound = false;
         foreach ($this->arServers as $server) {
             if ($server->arFields["PORT"] == $arr["PORT"] && $server->arFields["SERVER"] == ($arr["SERVER"] == "*" ? "0.0.0.0" : $arr["SERVER"])) {
                 $server->arFields = $arr;
                 $server->rnd = $rnd;
                 $bFound = true;
                 break;
             }
         }
         if (!$bFound) {
             $server = new CSMTPServerHost($this, $arr);
             $server->rnd = $rnd;
             $server->Start();
             $this->arServers[] = $server;
         }
     }
     $arServers = $this->arServers;
     foreach ($arServers as $k => $server) {
         if ($server->rnd != $rnd) {
             $server->Stop($k);
         }
     }
 }
示例#3
0
	function CheckFields($arFields, $ID=false)
	{
		$err_cnt = CMailError::ErrCount();
		$arMsg = Array();

		if(is_set($arFields, "NAME") && strlen($arFields["NAME"])<1)
		{
			CMailError::SetError("B_MAIL_ERR_NAME", GetMessage("MAIL_CL_ERR_NAME")." \"".GetMessage("MAIL_CL_NAME")."\"");
			$arMsg[] = array("id"=>"NAME", "text"=> GetMessage("MAIL_CL_ERR_NAME")." \"".GetMessage("MAIL_CL_NAME")."\"");
		}

		if(is_set($arFields, "PHP_CONDITION") && strlen(trim($arFields["PHP_CONDITION"]))>0)
		{
			if (!CMailFilter::CheckPHP($arFields["PHP_CONDITION"], GetMessage("MAIL_CL_PHP_COND")))
				$arMsg[] = array("id"=>"PHP_CONDITION", "text"=> GetMessage("MAIL_CL_ERR_IN_PHP").GetMessage("MAIL_CL_PHP_COND"));
		}

		if(is_set($arFields, "ACTION_PHP") && strlen(trim($arFields["ACTION_PHP"]))>0)
		{
			if (!CMailFilter::CheckPHP($arFields["ACTION_PHP"], GetMessage("MAIL_CL_PHP_ACT")))
				$arMsg[] = array("id"=>"ACTION_PHP", "text"=> GetMessage("MAIL_CL_ERR_IN_PHP").GetMessage("MAIL_CL_PHP_ACT"));
		}

		if(is_set($arFields, "MAILBOX_ID"))
		{
			$r = CMailBox::GetByID($arFields["MAILBOX_ID"]);
			if(!$r->Fetch())
			{
				CMailError::SetError("B_MAIL_ERR_BAD_MAILBOX", GetMessage("MAIL_CL_ERR_WRONG_MAILBOX"));
				$arMsg[] = array("id"=>"MAILBOX_ID", "text"=> GetMessage("MAIL_CL_ERR_WRONG_MAILBOX"));
			}
		}
		elseif($ID===false)
		{
			CMailError::SetError("B_MAIL_ERR_BAD_MAILBOX_NA", GetMessage("MAIL_CL_ERR_MAILBOX_NA"));
			$arMsg[] = array("id"=>"MAILBOX_ID", "text"=> GetMessage("MAIL_CL_ERR_MAILBOX_NA"));
		}

		if(!empty($arMsg))
		{
			$e = new CAdminException($arMsg);
			$GLOBALS["APPLICATION"]->ThrowException($e);
			return false;
		}
		return true;

		//return ($err_cnt == CMailError::ErrCount());
	}
        }
        $ID = IntVal($ID);
        switch ($_REQUEST['action']) {
            case "delete":
                @set_time_limit(0);
                $DB->StartTransaction();
                if (!CMailBox::Delete($ID)) {
                    $DB->Rollback();
                    $lAdmin->AddGroupError(GetMessage("MAIL_MBOX_ADM_DELERR"), $ID);
                }
                $DB->Commit();
                break;
            case "activate":
            case "deactivate":
                $arFields = array("ACTIVE" => $_REQUEST['action'] == "activate" ? "Y" : "N");
                if (!CMailBox::Update($ID, $arFields)) {
                    if ($e = $APPLICATION->GetException()) {
                        $lAdmin->AddGroupError(GetMessage("SAVE_ERROR") . $ID . ": " . $e->GetString(), $ID);
                    }
                }
                break;
        }
    }
}
$rsData = CMailbox::GetList(array($by => $order), $arFilter);
$rsData = new CAdminResult($rsData, $sTableID);
$rsData->NavStart();
// установка строки навигации
$lAdmin->NavText($rsData->GetNavPrint(GetMessage("MAIL_MBOX_ADM_NAVIGATION")));
$arHeaders = array();
$arHeaders[] = array("id" => "NAME", "content" => GetMessage("MAIL_MBOX_ADM_NAME"), "default" => true, "sort" => "name");
	</tr>
<?php 
}
?>
	<?php 
if ($arModFilter && strlen($arModFilter["ACTION_INTERFACE"]) > 0) {
    $arACTION_VARS = explode("&", $ACTION_VARS);
    for ($i = 0; $i < count($arACTION_VARS); $i++) {
        $v = $arACTION_VARS[$i];
        if ($pos = strpos($v, "=")) {
            ${substr($v, 0, $pos)} = urldecode(substr($v, $pos + 1));
        }
    }
    $MAILBOX_LID = "";
    if ($str_MAILBOX_ID != "") {
        $dbmb = CMailBox::GetByID($str_MAILBOX_ID);
        if ($armb = $dbmb->Fetch()) {
            $MAILBOX_LID = $armb["LID"];
        }
    }
    ?>

		<tr class="heading">
			<td align="center" colspan="2"><b><?php 
    echo GetMessage("MAIL_FLT_EDT_SETTINGS");
    ?>
</b><br>
			<input type="hidden" name="filter_type" value="<?php 
    echo htmlspecialcharsbx($filter_type);
    ?>
">
示例#6
0
 function SocnetEMailMessageCheck($arMessageFields, $ACTION_VARS)
 {
     //print_r($arMessageFields);
     $arEmails = CMailUtil::ExtractAllMailAddresses($arMessageFields["FIELD_TO"] . "," . $arMessageFields["FIELD_CC"] . "," . $arMessageFields["FIELD_BCC"]);
     $dbMbx = CMailBox::GetById($arMessageFields["MAIL_FILTER"]["MAILBOX_ID"]);
     $arMbx = $dbMbx->Fetch();
     $dbRes = CForumEMail::GetMailFilters($arMessageFields["MAIL_FILTER"]["ID"]);
     while ($arRes = $dbRes->Fetch()) {
         if ($arRes["EMAIL_FORUM_ACTIVE"] == "Y") {
             if ($arMbx["SERVER_TYPE"] == "smtp" && !in_array(CMailUtil::ExtractMailAddress($arRes["EMAIL"]), $arEmails)) {
                 continue;
             }
             if ($arRes["EMAIL_GROUP"] != '' && !in_array(CMailUtil::ExtractMailAddress($arRes["EMAIL_GROUP"]), $arEmails)) {
                 continue;
             }
             if ($arRes["SUBJECT_SUF"] != '' && strpos($arMessageFields["SUBJECT"], $arRes["SUBJECT_SUF"]) === false) {
                 continue;
             }
             $arMessageFields["FORUM_EMAIL_FILTER"] = $arRes;
             return true;
         }
     }
     return false;
 }
?>
">
			<?php 
echo bitrix_sessid_post();
?>
		</p>
	</tr>

</table></form>
<?php 
if (check_bitrix_sessid()) {
    $arFilter = array('ACTIVE' => 'Y', 'USER_ID' => 0);
    if ($mailbox_id > 0) {
        $arFilter["ID"] = $mailbox_id;
    }
    $dbr = CMailBox::GetList(array(), $arFilter);
    ClearVars("f_");
    while ($res = $dbr->ExtractFields("f_")) {
        CMailError::ResetErrors();
        $mb = new CMailbox();
        echo '<p><b>' . GetMessage("MAIL_CHECK_TEXT") . '&quot;' . $f_NAME . '&quot;:</b></p>';
        if ($mb->Connect($res["ID"])) {
            CAdminMessage::ShowNote(GetMessage("MAIL_CHECK_CNT") . " " . intval($mb->new_mess_count) . " " . GetMessage("MAIL_CHECK_CNT_NEW"));
            $aContext = array();
            if ($mb->new_mess_count > 0) {
                $aContext[] = array("ICON" => "btn_list", "TEXT" => GetMessage("MAIL_CHECK_VIEW"), "LINK" => "mail_message_admin.php?find_mailbox_id=" . $f_ID . "&lang=" . LANG . "&find_new=Y&set_filter=Y", "TITLE" => GetMessage("MAIL_CHECK_VIEW"));
            }
            $aContext[] = array("TEXT" => GetMessage("MAIL_CHECK_LOG"), "LINK" => "mail_log.php?set_filter=Y&find_mailbox_id=" . $f_ID . "&lang=" . LANG, "TITLE" => GetMessage("MAIL_CHECK_LOG"));
        } else {
            CAdminMessage::ShowMessage(GetMessage("MAIL_CHECK_ERR") . " " . CMailError::GetErrorsText());
            $aContext = array(array("TEXT" => GetMessage("MAIL_CHECK_MBOX_PARAMS"), "LINK" => "mail_mailbox_edit.php?ID=" . $f_ID . "&lang=" . LANG, "TITLE" => GetMessage("MAIL_CHECK_MBOX_PARAMS")), array("TEXT" => GetMessage("MAIL_CHECK_LOG"), "LINK" => "mail_log.php?set_filter=Y&find_mailbox_id=" . $f_ID . "&lang=" . LANG, "TITLE" => GetMessage("MAIL_CHECK_LOG")));
示例#8
0
             if (count($domains) > 0) {
                 $arFields["EMAIL"] = $arFields["EMAIL"] . "@" . $_POST['EMAIL_DOMAIN'];
             }
         }
         $arFields["MAIL_FILTER_ID"] = $_POST["EMAIL_FORUM_MAILBOX"];
         if (CForumEMail::Set($arFields) > 0) {
             LocalRedirect(CComponentEngine::MakePathFromTemplate($arParams["URL_TEMPLATES_TOPIC_LIST"], array("FID" => $arParams["FID"], "UID" => $arParams["USER_ID"], "GID" => $arParams["SOCNET_GROUP_ID"])));
         }
     }
 } else {
     if ($_POST["EMAIL_FORUM_MAILBOX"] == "!") {
         $arMailboxFields = array("LID" => SITE_ID, "SERVER_TYPE" => "pop3", "ACTIVE" => "Y", "NAME" => $_POST["EMAIL_FORUM_MAILBOX_NAME"], "SERVER" => $_POST["EMAIL_FORUM_MAILBOX_SERVER"], "PORT" => $_POST["EMAIL_FORUM_MAILBOX_PORT"], "LOGIN" => $_POST["EMAIL_FORUM_MAILBOX_LOGIN"], "PASSWORD" => $_POST["EMAIL_FORUM_MAILBOX_PASSWORD"], "USE_TLS" => $_POST["EMAIL_FORUM_MAILBOX_SSL"], "DELETE_MESSAGES" => $_POST["EMAIL_FORUM_MAILBOX_DELETE_MESSAGES"], "PERIOD_CHECK" => 5);
         $MAILBOX_ID = CMailBox::Add($arMailboxFields);
     } elseif (substr($_POST["EMAIL_FORUM_MAILBOX"], 0, 1) == 'M') {
         $MAILBOX_ID = substr($_POST["EMAIL_FORUM_MAILBOX"], 1);
         $dbrMailF = CMailBox::GetById($MAILBOX_ID);
         if (($arMailF = $dbrMailF->GetNext()) && $arMailF['SERVER_TYPE'] == 'smtp') {
             $arFields["EMAIL_GROUP"] = '';
             $domains = preg_split("/[\r\n]+/", $arMailF['DOMAINS'], -1, PREG_SPLIT_NO_EMPTY);
             if (count($domains) > 0) {
                 $arFields["EMAIL"] = $arFields["EMAIL"] . "@" . $_POST['EMAIL_DOMAIN'];
             }
         } else {
             $MAILBOX_ID = 0;
         }
     }
     if ($MAILBOX_ID > 0) {
         $arMailFilterFields = array("MAILBOX_ID" => $MAILBOX_ID, "NAME" => GetMessage("SOCNET_FORUM_TL_EMAIL_RULE"), "ACTION_TYPE" => "forumsocnet", "ACTION_VARS" => "", "WHEN_MAIL_RECEIVED" => "Y", "WHEN_MANUALLY_RUN" => "Y");
         $MAIL_FILTER_ID = CMailFilter::Add($arMailFilterFields);
         $arFields["MAIL_FILTER_ID"] = $MAIL_FILTER_ID;
         if (CForumEMail::Set($arFields) > 0) {
示例#9
0
 public static function EmailMessageAdd($arMessageFields, $ACTION_VARS)
 {
     if (!CModule::IncludeModule('crm')) {
         return false;
     }
     $date = isset($arMessageFields['FIELD_DATE']) ? $arMessageFields['FIELD_DATE'] : '';
     $maxAgeDays = intval(COption::GetOptionString('crm', 'email_max_age', 7));
     $maxAge = $maxAgeDays > 0 ? $maxAgeDays * 86400 : 0;
     if ($maxAge > 0 && $date !== '') {
         $now = time() + CTimeZone::GetOffset();
         $timestamp = MakeTimeStamp($date, FORMAT_DATETIME);
         if ($now - $timestamp > $maxAge) {
             //Time threshold is exceeded
             return false;
         }
     }
     $crmEmail = strtolower(trim(COption::GetOptionString('crm', 'mail', '')));
     $msgID = isset($arMessageFields['ID']) ? intval($arMessageFields['ID']) : 0;
     $mailboxID = isset($arMessageFields['MAILBOX_ID']) ? intval($arMessageFields['MAILBOX_ID']) : 0;
     $from = isset($arMessageFields['FIELD_FROM']) ? $arMessageFields['FIELD_FROM'] : '';
     $replyTo = isset($arMessageFields['FIELD_REPLY_TO']) ? $arMessageFields['FIELD_REPLY_TO'] : '';
     if ($replyTo !== '') {
         // Ignore FROM if REPLY_TO EXISTS
         $from = $replyTo;
     }
     $addresserInfo = CCrmMailHelper::ParseEmail($from);
     if ($crmEmail !== '' && strcasecmp($addresserInfo['EMAIL'], $crmEmail) === 0) {
         // Ignore emails from ourselves
         return false;
     }
     $to = isset($arMessageFields['FIELD_TO']) ? $arMessageFields['FIELD_TO'] : '';
     $cc = isset($arMessageFields['FIELD_CC']) ? $arMessageFields['FIELD_CC'] : '';
     $bcc = isset($arMessageFields['FIELD_BCC']) ? $arMessageFields['FIELD_BCC'] : '';
     $addresseeEmails = array_unique(array_merge($to !== '' ? CMailUtil::ExtractAllMailAddresses($to) : array(), $cc !== '' ? CMailUtil::ExtractAllMailAddresses($cc) : array(), $bcc !== '' ? CMailUtil::ExtractAllMailAddresses($bcc) : array()), SORT_STRING);
     if ($mailboxID > 0) {
         $dbMailbox = CMailBox::GetById($mailboxID);
         $arMailbox = $dbMailbox->Fetch();
         // POP3 mailboxes are ignored - they bound to single email
         if ($arMailbox && $arMailbox['SERVER_TYPE'] === 'smtp' && (empty($crmEmail) || !in_array($crmEmail, $addresseeEmails, true))) {
             return false;
         }
     }
     $subject = isset($arMessageFields['SUBJECT']) ? $arMessageFields['SUBJECT'] : '';
     $body = isset($arMessageFields['BODY']) ? $arMessageFields['BODY'] : '';
     $arBodyEmails = null;
     $userID = 0;
     $parentID = 0;
     $ownerTypeID = CCrmOwnerType::Undefined;
     $ownerID = 0;
     $addresserID = self::FindUserIDByEmail($addresserInfo['EMAIL']);
     if ($addresserID > 0 && Bitrix\Crm\Integration\IntranetManager::isExternalUser($addresserID)) {
         //Forget about extranet user
         $addresserID = 0;
     }
     $arCommEmails = $addresserID <= 0 ? array($addresserInfo['EMAIL']) : ($crmEmail !== '' ? array_diff($addresseeEmails, array($crmEmail)) : $addresseeEmails);
     //Trying to fix strange behaviour of array_diff under OPcache (issue #60862)
     $arCommEmails = array_filter($arCommEmails);
     $targInfo = CCrmActivity::ParseUrn(CCrmActivity::ExtractUrnFromMessage($arMessageFields, CCrmEMailCodeAllocation::GetCurrent()));
     $targActivity = $targInfo['ID'] > 0 ? CCrmActivity::GetByID($targInfo['ID'], false) : null;
     // Check URN
     if (!$targActivity && (!isset($targActivity['URN']) || strtoupper($targActivity['URN']) !== strtoupper($targInfo['URN']))) {
         $targActivity = null;
     }
     if ($targActivity) {
         $postingID = self::ExtractPostingID($arMessageFields);
         if ($postingID > 0 && isset($targActivity['ASSOCIATED_ENTITY_ID']) && intval($targActivity['ASSOCIATED_ENTITY_ID']) === $postingID) {
             // Ignore - it is our message.
             return false;
         }
         $parentID = $targActivity['ID'];
         $subject = CCrmActivity::ClearUrn($subject);
         if ($addresserID > 0) {
             $userID = $addresserID;
         } elseif (isset($targActivity['RESPONSIBLE_ID'])) {
             $userID = $targActivity['RESPONSIBLE_ID'];
         }
         if (isset($targActivity['OWNER_TYPE_ID'])) {
             $ownerTypeID = intval($targActivity['OWNER_TYPE_ID']);
         }
         if (isset($targActivity['OWNER_ID'])) {
             $ownerID = intval($targActivity['OWNER_ID']);
         }
         $arCommData = self::ExtractCommsFromEmails($arCommEmails);
         if ($ownerTypeID > 0 && $ownerID > 0) {
             if (empty($arCommData)) {
                 if ($addresserID > 0) {
                     foreach ($addresseeEmails as $email) {
                         if ($email === $crmEmail) {
                             continue;
                         }
                         $arCommData = array(self::CreateComm($ownerTypeID, $ownerID, $email));
                     }
                 } else {
                     $arCommData = array(self::CreateComm($ownerTypeID, $ownerID, $addresserInfo['EMAIL']));
                 }
             } elseif ($ownerTypeID !== CCrmOwnerType::Deal) {
                 //Check if owner in communications. Otherwise clear owner.
                 //There is only one exception for DEAL - it entity has no communications
                 $isOwnerInComms = false;
                 foreach ($arCommData as &$arCommItem) {
                     $commEntityTypeID = isset($arCommItem['ENTITY_TYPE_ID']) ? $arCommItem['ENTITY_TYPE_ID'] : CCrmOwnerType::Undefined;
                     $commEntityID = isset($arCommItem['ENTITY_ID']) ? $arCommItem['ENTITY_ID'] : 0;
                     if ($commEntityTypeID === $ownerTypeID && $commEntityID === $ownerID) {
                         $isOwnerInComms = true;
                         break;
                     }
                 }
                 unset($arCommItem);
                 if (!$isOwnerInComms) {
                     $ownerTypeID = CCrmOwnerType::Undefined;
                     $ownerID = 0;
                 }
             }
         }
     } else {
         if ($addresserID > 0) {
             //It is email from registred user
             $userID = $addresserID;
             if (empty($arCommEmails)) {
                 $arBodyEmails = self::ExtractEmailsFromBody($body);
                 //Clear system user emails
                 if (!empty($arBodyEmails)) {
                     foreach ($arBodyEmails as $email) {
                         if (self::FindUserIDByEmail($email) <= 0) {
                             $arCommEmails[] = $email;
                         }
                     }
                 }
             }
             // Try to resolve communications
             $arCommData = self::ExtractCommsFromEmails($arCommEmails);
         } else {
             //It is email from unknown user
             //Try to resolve bindings from addresser
             $arCommData = self::ExtractCommsFromEmails($arCommEmails);
             if (!empty($arCommData)) {
                 // Try to resolve responsible user
                 foreach ($arCommData as &$arComm) {
                     $userID = self::ResolveResponsibleID($arComm['ENTITY_TYPE_ID'], $arComm['ENTITY_ID']);
                     if ($userID > 0) {
                         break;
                     }
                 }
                 unset($arComm);
             }
         }
         // Try to resolve owner by old-style method-->
         $arACTION_VARS = explode('&', $ACTION_VARS);
         for ($i = 0, $ic = count($arACTION_VARS); $i < $ic; $i++) {
             $v = $arACTION_VARS[$i];
             if ($pos = strpos($v, '=')) {
                 $name = substr($v, 0, $pos);
                 ${$name} = urldecode(substr($v, $pos + 1));
             }
         }
         $arTypeNames = CCrmOwnerType::GetNames(array(CCrmOwnerType::Lead, CCrmOwnerType::Deal, CCrmOwnerType::Contact, CCrmOwnerType::Company));
         foreach ($arTypeNames as $typeName) {
             $regexVar = 'W_CRM_ENTITY_REGEXP_' . $typeName;
             if (empty(${$regexVar})) {
                 continue;
             }
             $match = array();
             if (preg_match('/' . ${$regexVar} . '/i' . BX_UTF_PCRE_MODIFIER, $subject, $match) === 1) {
                 $ownerID = intval($match[1]);
                 $ownerTypeID = CCrmOwnerType::ResolveID($typeName);
                 break;
             }
         }
         // <-- Try to resolve owner by old-style method
         // Filter communications by owner
         if ($ownerTypeID > 0 && $ownerID > 0) {
             if (!empty($arCommData)) {
                 foreach ($arCommData as $commKey => $arComm) {
                     if ($arComm['ENTITY_TYPE_ID'] === $ownerTypeID && $arComm['ENTITY_ID'] === $ownerID) {
                         continue;
                     }
                     unset($arCommData[$commKey]);
                 }
                 $arCommData = array_values($arCommData);
             }
             if (empty($arCommData)) {
                 if ($addresserID > 0) {
                     foreach ($addresseeEmails as $email) {
                         if ($email === $crmEmail) {
                             continue;
                         }
                         $arCommData = array(self::CreateComm($ownerTypeID, $ownerID, $email));
                     }
                 } else {
                     $arCommData = array(self::CreateComm($ownerTypeID, $ownerID, $addresserInfo['EMAIL']));
                 }
             }
         }
     }
     $arBindingData = self::ConvertCommsToBindings($arCommData);
     // Check bindings for converted leads -->
     // Not Existed entities are ignored. Converted leads are ignored if their associated entities (contacts, companies, deals) are contained in bindings.
     $arCorrectedBindingData = array();
     $arConvertedLeadData = array();
     foreach ($arBindingData as $bindingKey => &$arBinding) {
         if ($arBinding['TYPE_ID'] !== CCrmOwnerType::Lead) {
             if (self::IsEntityExists($arBinding['TYPE_ID'], $arBinding['ID'])) {
                 $arCorrectedBindingData[$bindingKey] = $arBinding;
             }
             continue;
         }
         $arFields = self::GetEntity(CCrmOwnerType::Lead, $arBinding['ID'], array('STATUS_ID'));
         if (!is_array($arFields)) {
             continue;
         }
         if (isset($arFields['STATUS_ID']) && $arFields['STATUS_ID'] === 'CONVERTED') {
             $arConvertedLeadData[$bindingKey] = $arBinding;
         } else {
             $arCorrectedBindingData[$bindingKey] = $arBinding;
         }
     }
     unset($arBinding);
     foreach ($arConvertedLeadData as &$arConvertedLead) {
         $leadID = $arConvertedLead['ID'];
         $exists = false;
         $dbRes = CCrmCompany::GetListEx(array(), array('LEAD_ID' => $leadID, 'CHECK_PERMISSIONS' => 'N'), false, false, array('ID'));
         if ($dbRes) {
             while ($arRes = $dbRes->Fetch()) {
                 if (isset($arCorrectedBindingData[self::PrepareEntityKey(CCrmOwnerType::Company, $arRes['ID'])])) {
                     $exists = true;
                     break;
                 }
             }
         }
         if ($exists) {
             continue;
         }
         $dbRes = CCrmContact::GetListEx(array(), array('LEAD_ID' => $leadID, 'CHECK_PERMISSIONS' => 'N'), false, false, array('ID'));
         if ($dbRes) {
             while ($arRes = $dbRes->Fetch()) {
                 if (isset($arCorrectedBindingData[self::PrepareEntityKey(CCrmOwnerType::Contact, $arRes['ID'])])) {
                     $exists = true;
                     break;
                 }
             }
         }
         if ($exists) {
             continue;
         }
         $dbRes = CCrmDeal::GetListEx(array(), array('LEAD_ID' => $leadID, 'CHECK_PERMISSIONS' => 'N'), false, false, array('ID'));
         if ($dbRes) {
             while ($arRes = $dbRes->Fetch()) {
                 if (isset($arCorrectedBindingData[self::PrepareEntityKey(CCrmOwnerType::Deal, $arRes['ID'])])) {
                     $exists = true;
                     break;
                 }
             }
         }
         if ($exists) {
             continue;
         }
         $arCorrectedBindingData[self::PrepareEntityKey(CCrmOwnerType::Lead, $leadID)] = $arConvertedLead;
     }
     unset($arConvertedLead);
     $arBindingData = $arCorrectedBindingData;
     // <-- Check bindings for converted leads
     // If no bindings are found then create new lead from this message
     // Skip lead creation if email list is empty. Otherwise we will create lead with no email-addresses. It is absolutely useless.
     $emailQty = count($arCommEmails);
     if (empty($arBindingData) && $emailQty > 0) {
         if (strtoupper(COption::GetOptionString('crm', 'email_create_lead_for_new_addresser', 'Y')) !== 'Y') {
             // Creation of new lead is not allowed
             return true;
         }
         //"Lead from forwarded email..." or "Lead from email..."
         $title = $subject !== '' ? $subject : GetMessage($addresserID > 0 ? 'CRM_MAIL_LEAD_FROM_USER_EMAIL_TITLE' : 'CRM_MAIL_LEAD_FROM_EMAIL_TITLE', array('%SENDER%' => $addresserInfo['ORIGINAL']));
         $comment = '';
         if ($body !== '') {
             // Remove extra new lines (fix for #31807)
             $comment = preg_replace("/(\r\n|\n|\r)+/", '<br/>', htmlspecialcharsbx($body));
         }
         if ($comment === '') {
             $comment = htmlspecialcharsbx($subject);
         }
         $name = '';
         if ($addresserID <= 0) {
             $name = $addresserInfo['NAME'];
         } else {
             //Try get name from body
             for ($i = 0; $i < $emailQty; $i++) {
                 $email = $arCommEmails[$i];
                 $match = array();
                 if (preg_match('/"([^"]+)"\\s*<' . $email . '>/i' . BX_UTF_PCRE_MODIFIER, $body, $match) === 1 && count($match) > 1) {
                     $name = $match[1];
                     break;
                 }
                 if (preg_match('/"([^"]+)"\\s*[\\s*mailto\\:\\s*' . $email . ']/i' . BX_UTF_PCRE_MODIFIER, $body, $match) === 1 && count($match) > 1) {
                     $name = $match[1];
                     break;
                 }
             }
             if ($name === '') {
                 $name = $arCommEmails[0];
             }
         }
         $arLeadFields = array('TITLE' => $title, 'NAME' => $name, 'STATUS_ID' => 'NEW', 'COMMENTS' => $comment, 'SOURCE_DESCRIPTION' => GetMessage('CRM_MAIL_LEAD_FROM_EMAIL_SOURCE', array('%SENDER%' => $addresserInfo['ORIGINAL'])), 'OPENED' => 'Y', 'FM' => array('EMAIL' => array()));
         $sourceList = CCrmStatus::GetStatusList('SOURCE');
         $sourceID = COption::GetOptionString('crm', 'email_lead_source_id', '');
         if ($sourceID === '' || !isset($sourceList[$sourceID])) {
             if (isset($sourceList['EMAIL'])) {
                 $sourceID = 'EMAIL';
             } elseif (isset($sourceList['OTHER'])) {
                 $sourceID = 'OTHER';
             }
         }
         if ($sourceID !== '') {
             $arLeadFields['SOURCE_ID'] = $sourceID;
         }
         $responsibleID = intval(COption::GetOptionString('crm', 'email_lead_responsible_id', 0));
         if ($responsibleID > 0) {
             $arLeadFields['CREATED_BY_ID'] = $arLeadFields['MODIFY_BY_ID'] = $arLeadFields['ASSIGNED_BY_ID'] = $responsibleID;
             if ($userID === 0) {
                 $userID = $responsibleID;
             }
         }
         for ($i = 0; $i < $emailQty; $i++) {
             $arLeadFields['FM']['EMAIL']['n' . ($i + 1)] = array('VALUE_TYPE' => 'WORK', 'VALUE' => $arCommEmails[$i]);
         }
         $leadEntity = new CCrmLead(false);
         $leadID = $leadEntity->Add($arLeadFields, true, array('DISABLE_USER_FIELD_CHECK' => true, 'REGISTER_SONET_EVENT' => true, 'CURRENT_USER' => $responsibleID));
         // TODO: log error
         if ($leadID > 0) {
             $arBizProcErrors = array();
             CCrmBizProcHelper::AutoStartWorkflows(CCrmOwnerType::Lead, $leadID, CCrmBizProcEventType::Create, $arBizProcErrors);
             $arCommData = array();
             for ($i = 0; $i < $emailQty; $i++) {
                 $arCommData[] = self::CreateComm(CCrmOwnerType::Lead, $leadID, $arCommEmails[$i]);
             }
             $arBindingData = array(self::PrepareEntityKey(CCrmOwnerType::Lead, $leadID) => self::CreateBinding(CCrmOwnerType::Lead, $leadID));
         }
     }
     // Terminate processing if no bindings are found.
     if (empty($arBindingData)) {
         // Try to export vcf-files before exit if email from registered user
         if ($addresserID > 0) {
             $dbAttachment = CMailAttachment::GetList(array(), array('MESSAGE_ID' => $msgID));
             while ($arAttachment = $dbAttachment->Fetch()) {
                 if (GetFileExtension(strtolower($arAttachment['FILE_NAME'])) === 'vcf') {
                     if ($arAttachment['FILE_ID']) {
                         $arAttachment['FILE_DATA'] = CMailAttachment::getContents($arAttachment);
                     }
                     self::TryImportVCard($arAttachment['FILE_DATA']);
                 }
             }
         }
         return false;
     }
     // If owner info not defined set it by default
     if ($ownerID <= 0 || $ownerTypeID <= 0) {
         if (count($arBindingData) > 1) {
             // Search owner in specified order: Contact, Company, Lead.
             $arTypeIDs = array(CCrmOwnerType::Contact, CCrmOwnerType::Company, CCrmOwnerType::Lead);
             foreach ($arTypeIDs as $typeID) {
                 foreach ($arBindingData as &$arBinding) {
                     if ($arBinding['TYPE_ID'] === $typeID) {
                         $ownerTypeID = $typeID;
                         $ownerID = $arBinding['ID'];
                         break;
                     }
                 }
                 unset($arBinding);
                 if ($ownerID > 0 && $ownerTypeID > 0) {
                     break;
                 }
             }
         }
         if ($ownerID <= 0 || $ownerTypeID <= 0) {
             $arBinding = array_shift(array_values($arBindingData));
             $ownerTypeID = $arBinding['TYPE_ID'];
             $ownerID = $arBinding['ID'];
         }
     }
     // Precessing of attachments -->
     $attachmentMaxSizeMb = intval(COption::GetOptionString('crm', 'email_attachment_max_size', 16));
     $attachmentMaxSize = $attachmentMaxSizeMb > 0 ? $attachmentMaxSizeMb * 1048576 : 0;
     $arFilesData = array();
     $dbAttachment = CMailAttachment::GetList(array(), array('MESSAGE_ID' => $msgID));
     $arBannedAttachments = array();
     while ($arAttachment = $dbAttachment->Fetch()) {
         if ($arAttachment['FILE_NAME'] === '1.tmp') {
             // HACK: For bug in module 'Mail'
             continue;
         } elseif (GetFileExtension(strtolower($arAttachment['FILE_NAME'])) === 'vcf') {
             if ($arAttachment['FILE_ID']) {
                 $arAttachment['FILE_DATA'] = CMailAttachment::getContents($arAttachment);
             }
             self::TryImportVCard($arAttachment['FILE_DATA']);
         }
         $fileSize = isset($arAttachment['FILE_SIZE']) ? intval($arAttachment['FILE_SIZE']) : 0;
         if ($fileSize <= 0) {
             //Skip zero lenth files
             continue;
         }
         if ($attachmentMaxSize > 0 && $fileSize > $attachmentMaxSize) {
             //File size limit  is exceeded
             $arBannedAttachments[] = array('name' => $arAttachment['FILE_NAME'], 'size' => $fileSize);
             continue;
         }
         if ($arAttachment['FILE_ID'] && empty($arAttachment['FILE_DATA'])) {
             $arAttachment['FILE_DATA'] = CMailAttachment::getContents($arAttachment);
         }
         $arFilesData[] = array('name' => $arAttachment['FILE_NAME'], 'type' => $arAttachment['CONTENT_TYPE'], 'content' => $arAttachment['FILE_DATA'], 'MODULE_ID' => 'crm');
     }
     //<-- Precessing of attachments
     // Remove extra new lines (fix for #31807)
     $body = preg_replace("/(\r\n|\n|\r)+/", PHP_EOL, $body);
     $encodedBody = htmlspecialcharsbx($body);
     // Creating of new event -->
     $arEventBindings = array();
     foreach ($arBindingData as &$arBinding) {
         $arEventBindings[] = array('ENTITY_TYPE' => $arBinding['TYPE_NAME'], 'ENTITY_ID' => $arBinding['ID']);
     }
     unset($arBinding);
     $eventText = '';
     $eventText .= '<b>' . GetMessage('CRM_EMAIL_SUBJECT') . '</b>: ' . $subject . PHP_EOL;
     $eventText .= '<b>' . GetMessage('CRM_EMAIL_FROM') . '</b>: ' . $addresserInfo['EMAIL'] . PHP_EOL;
     $eventText .= '<b>' . GetMessage('CRM_EMAIL_TO') . '</b>: ' . implode($addresseeEmails, '; ') . PHP_EOL;
     if (!empty($arBannedAttachments)) {
         $eventText .= '<b>' . GetMessage('CRM_EMAIL_BANNENED_ATTACHMENTS', array('%MAX_SIZE%' => $attachmentMaxSizeMb)) . '</b>: ';
         foreach ($arBannedAttachments as &$attachmentInfo) {
             $eventText .= GetMessage('CRM_EMAIL_BANNENED_ATTACHMENT_INFO', array('%NAME%' => $attachmentInfo['name'], '%SIZE%' => round($attachmentInfo['size'] / 1048576, 1)));
         }
         unset($attachmentInfo);
         $eventText .= PHP_EOL;
     }
     $eventText .= $encodedBody;
     $CCrmEvent = new CCrmEvent();
     $CCrmEvent->Add(array('USER_ID' => $userID, 'ENTITY' => array_values($arEventBindings), 'ENTITY_TYPE' => CCrmOwnerType::ResolveName($ownerTypeID), 'ENTITY_ID' => $ownerID, 'EVENT_NAME' => GetMessage('CRM_EMAIL_GET_EMAIL'), 'EVENT_TYPE' => 2, 'EVENT_TEXT_1' => $eventText, 'FILES' => $arFilesData), false);
     // <-- Creating of new event
     // Creating new activity -->
     $siteID = '';
     $dbSites = CSite::GetList($by = 'sort', $order = 'desc', array('DEFAULT' => 'Y', 'ACTIVE' => 'Y'));
     $defaultSite = is_object($dbSites) ? $dbSites->Fetch() : null;
     if (is_array($defaultSite)) {
         $siteID = $defaultSite['LID'];
     }
     if ($siteID === '') {
         $siteID = 's1';
     }
     $storageTypeID = CCrmActivity::GetDefaultStorageTypeID();
     $arElementIDs = array();
     foreach ($arFilesData as $fileData) {
         $fileID = CFile::SaveFile($fileData, 'crm');
         if ($fileID > 0) {
             $elementID = StorageManager::saveEmailAttachment(CFile::GetFileArray($fileID), $storageTypeID, $siteID);
             if ($elementID > 0) {
                 $arElementIDs[] = (int) $elementID;
             }
         }
     }
     $descr = preg_replace("/(\r\n|\n|\r)+/", '<br/>', $encodedBody);
     $now = ConvertTimeStamp(time() + CTimeZone::GetOffset(), 'FULL', $siteID);
     $direction = CCrmActivityDirection::Incoming;
     $completed = 'N';
     // Incomming emails must be marked as 'Not Completed'.
     if ($addresserID > 0 && ActivitySettings::getValue(ActivitySettings::MARK_FORWARDED_EMAIL_AS_OUTGOING)) {
         $direction = CCrmActivityDirection::Outgoing;
         $completed = 'Y';
     }
     $arActivityFields = array('OWNER_ID' => $ownerID, 'OWNER_TYPE_ID' => $ownerTypeID, 'TYPE_ID' => CCrmActivityType::Email, 'ASSOCIATED_ENTITY_ID' => 0, 'PARENT_ID' => $parentID, 'SUBJECT' => $subject, 'START_TIME' => $now, 'END_TIME' => $now, 'COMPLETED' => $completed, 'AUTHOR_ID' => $userID, 'RESPONSIBLE_ID' => $userID, 'PRIORITY' => CCrmActivityPriority::Medium, 'DESCRIPTION' => $descr, 'DESCRIPTION_TYPE' => CCrmContentType::Html, 'DIRECTION' => $direction, 'LOCATION' => '', 'NOTIFY_TYPE' => CCrmActivityNotifyType::None, 'STORAGE_TYPE_ID' => $storageTypeID, 'STORAGE_ELEMENT_IDS' => $arElementIDs);
     $arActivityFields['BINDINGS'] = array();
     foreach ($arBindingData as &$arBinding) {
         $entityTypeID = $arBinding['TYPE_ID'];
         $entityID = $arBinding['ID'];
         if ($entityTypeID <= 0 || $entityID <= 0) {
             continue;
         }
         $arActivityFields['BINDINGS'][] = array('OWNER_TYPE_ID' => $entityTypeID, 'OWNER_ID' => $entityID);
     }
     unset($arBinding);
     $activityID = CCrmActivity::Add($arActivityFields, false, false, array('REGISTER_SONET_EVENT' => true));
     if ($activityID > 0 && !empty($arCommData)) {
         CCrmActivity::SaveCommunications($activityID, $arCommData, $arActivityFields, false, false);
         $arActivityFields['COMMUNICATIONS'] = $arCommData;
     }
     //Notity responsible user
     if ($userID > 0 && $direction === CCrmActivityDirection::Incoming) {
         CCrmActivity::Notify($arActivityFields, CCrmNotifierSchemeType::IncomingEmail);
     }
     // <-- Creating new activity
     return true;
 }
示例#10
0
<?php

/*
##############################################
# Bitrix: SiteManager                        #
# Copyright (c) 2002 - 2010 Bitrix           #
# http://www.bitrixsoft.com                  #
# mailto:admin@bitrixsoft.com                #
##############################################
*/
require_once $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_admin_before.php";
if (!CModule::IncludeModule('mail')) {
    die;
}
$MOD_RIGHT = $APPLICATION->GetGroupRight("mail");
if ($MOD_RIGHT < "R") {
    $APPLICATION->AuthForm(GetMessage("ACCESS_DENIED"));
}
$mb = new CMailBox();
$res = $mb->Check($_REQUEST['serv'], $_REQUEST['port'], $_REQUEST['ssl'], $_REQUEST['login'], $_REQUEST['passw']);
header("Content-Type: application/x-javascript; charset=" . LANG_CHARSET);
echo CUtil::PhpToJSObject($res, false);
require $_SERVER["DOCUMENT_ROOT"] . BX_ROOT . "/modules/main/include/epilog_admin_after.php";
示例#11
0
        $arSettings['PERIOD_CHECK'] = isset($arCurrentMailBox['PERIOD_CHECK']) ? $arCurrentMailBox['PERIOD_CHECK'] : '5';
    }
    if (!isset($arSettings['DELETE_MESSAGES'])) {
        $arSettings['DELETE_MESSAGES'] = isset($arCurrentMailBox['DELETE_MESSAGES']) ? $arCurrentMailBox['DELETE_MESSAGES'] : 'N';
    }
    if ($arSettings['EMAIL'] === '' && $arSettings['SERVER_TYPE'] === 'smtp') {
        $arSettings['EMAIL'] = 'crm@' . $_SERVER['HTTP_HOST'];
    }
}
$arSettings['CREATE_LEAD_FOR_NEW_ADDRESSER'] = strtoupper(COption::GetOptionString('crm', 'email_create_lead_for_new_addresser', 'Y'));
$arSettings['LEAD_RESPONSIBLE_ID'] = intval(COption::GetOptionString('crm', 'email_lead_responsible_id', 0));
$arSettings['LEAD_RESPONSIBLE_NAME'] = $arSettings['LEAD_RESPONSIBLE_ID'] > 0 ? CCrmViewHelper::GetFormattedUserName($arSettings['LEAD_RESPONSIBLE_ID']) : '';
// <-- Settings initialization
// Test POP3 connection
if ($arSettings['SERVER_TYPE'] === 'pop3' && isset($arSettings['SERVER']) && $arSettings['SERVER'] !== '' && isset($arSettings['LOGIN']) && $arSettings['LOGIN'] !== '') {
    $mailBoxEntity = new CMailBox(false);
    $arCheck = $mailBoxEntity->Check($arSettings['SERVER'], $arSettings['PORT'], $arSettings['USE_TLS'], $arSettings['LOGIN'], $arSettings['PASSWORD']);
    if (!$arCheck[0]) {
        ShowError(GetMessage('CRM_ERROR_CHECK_SERVER_CONNECTION', array('#SERVER#' => $arSettings['SERVER'], '#ERROR#' => $arCheck[1])));
    }
}
// Preparing mail box list
$arResult['MAILBOXES_LIST'] = array('-1' => GetMessage('CRM_EMAIL_MAILBOX_SEL'));
// a. Selection of smtp servers
$rsMailFilter = CMailFilter::GetList(array(), array('SERVER_TYPE' => 'smtp', 'EMPTY' => 'Y'));
while ($arMailF = $rsMailFilter->Fetch()) {
    $arResult['MAILBOXES_LIST'][$arMailF['MAILBOX_ID']] = $arMailF['MAILBOX_NAME'];
    if ($arMailF['MAILBOX_TYPE'] == 'smtp' && count($arMailF['DOMAINS']) > 0) {
        $mailBoxID = $arMailF['MAILBOX_ID'];
        $rsMailbox = CMailBox::GetById($mailBoxID);
        $arMailbox = $rsMailbox->Fetch();