Условия задачи: Есть служебный ящик. Создаем письмо на два адреса – служебный ящик и (копия) на ящик сотрудника портала. Можно наоборот: письмо - сотруднику, копия - на служебный ящик.
Задача: при получении письма создать задачу сотруднику, указанному в адресе "получатель". Постановщик - сотрудник, указанный в адресе "отправитель"
Реализация: 1) создаем почтовый ящик на внешнем почтовом сервере. 2) создаем служебный ящик в портале: "Рабочий стол - Сервисы - Почта - Почтовые ящики"
в ячейку "название" пишем произвольное название служебного ящика. в графе "тип" указываем "внешний POP3 сервер" в графе "почтовый сервер/порт" указываем адрес почтового сервера. В нашем случае - pop.gmail.com ставим флажок "использовать безопасное соединение". Порт - 995 (установится автоматически) В графе "имя входа" - имя реального аккаунта, соответствующего почтовому ящику на внешнем сервере. В графе "пароль" - пароль для внешнего п/я В графе "проверять с периодом" ставим периодичность (в минутах), с которой содержимое ящика будет проверяться автоматически, или 0 - для ручной проверки
3) Создаем правило обработки: "Рабочий стол - Сервисы - Почта - Правила - Добавить правило - ручная настройка" На вкладке "параметры" указываем: имя ящика (которое было в графе "название" при создании ящика) название и описание правила "применять при событиях" - ставим флажок "При получении почты"
На вкладке "действия" в окне "Действия на PHP скрипте" вписываем следующий код:
if (CModule::IncludeModule("tasks"))
{
$from = CMailUtil::ExtractMailAddress($arMessageFields['FIELD_FROM']);
$rsUser = CUser::GetList(($by="ID"), ($order="desc"), array("email"=>$from));
if ($oUser = $rsUser->Fetch())
$id_created = $oUser["ID"];
//получаем все почтовые адреса из полей "кому", "копия"
$arr_to = CMailUtil::ExtractAllMailAddresses($arMessageFields["FIELD_TO"].",".$arMessageFields["FIELD_CC"].",".$arMessageFields["FIELD_BCC"]);
foreach ($arr_to as $to)
{
if (empty($to))
continue;
$rsUser = CUser::GetList(($by="ID"), ($order="desc"), array("email"=>$to));
if ($oUser = $rsUser->Fetch())
$arr_responsible[] = $oUser["ID"];
}
$arFields = Array(
"TITLE" => $arMessageFields['SUBJECT'],
"DESCRIPTION" => $arMessageFields['BODY'],
"RESPONSIBLE_ID" => $arr_responsible[0],
"STATUS"=>2,
"CREATED_BY" => $id_created
);
$obTask = new CTasks;
$ID = $obTask->Add($arFields);
$arr_accomp = array_splice($arr_responsible, 1, (count($arr_responsible)-1));
CTasks::AddAccomplices($ID, $arr_accomp);
//добавляем к задаче вложения
$dbr_attach = CMailAttachment::GetList(Array("NAME"=>"ASC", "ID"=>"ASC"), Array("MESSAGE_ID"=>$arMessageFields['ID']));
while ($dbr_attach_arr = $dbr_attach->GetNext())
{
if ($dbr_attach_arr["FILE_NAME"]=='1.tmp')
continue;
$attach_id = $dbr_attach_arr["ID"];
$dbr = $DB->Query("SEL ECT * FROM b_mail_msg_attachment WH ERE ID=".intval($attach_id));
if($dbr_arr = $dbr->Fetch())
{
$fname = $_SERVER['DOCUMENT_ROOT']."/upload/".$dbr_attach_arr["FILE_NAME"];
$handle = fopen($fname, 'wb');
fwrite($handle, $dbr_arr["FILE_DATA"]);
fclose($handle);
$arFile = CFile::MakeFileArray($fname);
$arFile["old_file"] = "";
$arFile["del"] = "Y";
$arFile["MODULE_ID"] = "tasks";
$fid[] = CFile::SaveFile($arFile, "tasks");
}
}
CTasks::AddFiles($ID, $fid);
foreach ($arr_responsible as $responsible)
{
$arPortalMessageFields = array(
"FROM_USER_ID" => $id_created,
"TO_USER_ID" => $responsible,
"MESSAGE" =>"Добавлена новая задача \r\n <a href = '".$_SERVER['HTTP_HOST']."/company/personal/user/".$responsible."/tasks/task/view/".$ID."/'>".$arMessageFields['SUBJECT']."</a>",
"=DATE_CREATE" => $GLOBALS["DB"]->CurrentTimeF unction(),
"MESSAGE_TYPE" => "S",
);
// если планируете почту проверять вручную (в графе "проверять с периодом" почтового ящика стоит ноль) - то следующие 2 строчки нужно раскомментарить
/*
if (CModule::IncludeModule("socialnetwork"))
CSocNetMessages::Add($arPortalMessageFields);
*/
}
}
Платная версия с расширенными функциональными возможностями и регулярными обновлениями. Решение доступно на Маркетплейс. Бесплатная, облегчённая, версия с ограниченным функционалом. Решение доступно на Маркетплейс.
Группы на сайте создаются не только сотрудниками «1С-Битрикс», но и партнерами компании. Поэтому мнения участников групп могут не совпадать с позицией компании «1С-Битрикс».