Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!

Как получить email с входящей почты

00 голосов
3
Приходит почта, создаю правило, но в нем мне надо вытянуть email с $arMessageFields["FIELD_FROM"], поскольку это значение такого вида: Имя Фамилия <email>
Где-то видел такой код:
Код
 $from = CMailUtil::ExtractMailAddress($arMessageFields['FIELD_FROM']);

   $rsUser = CUser::GetList(($by="ID"), ($order="desc"), array("email"=>$from));
 
Документации по  ExtractMailAddress нигде не встречал и у меня данный код не работает. Подскажите, пожалуйста, решение!
спросил 21 Фев, 14 от W1Ng (540 баллов)

3 Ответы

00 голосов
Делаю получение email из $arMessageFields["FIELD_FROM"] с помощью регулярных выражений, после чего надо получить ID юзера, его группы и максимальные права доступа к модулю "Техподдержка". Делаю так:
Код
$regEx = "/([\s]*)[\._a-zA-Z0-9-]+@[\._a-zA-Z0-9-]+/i"; 
preg_match_all($regEx, $arMessageFields["FIELD_FROM"], $emailsArr);

$arMyRes = CUser::GetList(($by="id"), ($order="asc"), array("EMAIL" => $emailsArr[0][0]));
if ($arMyRes2 = $arMyRes->Fetch()) {
$arUsGr = CUser::GetUserGroup($arMyRes2 ["ID"]);
if($APPLICATION->GetUserRight("support", $arUsGr) <= "D")    
    return false;
    return true;
} else {
    return false;
}  
Данный код - правило для почтового ящика, с которого создается обращение в службу поддержки. Суть такова: Если пользователь с email, с которого пришло сообщение на почту, не зарегистрирован на сайте, или имеет права доступа к модулю "техподдержка" меньше или равно "D" (доступ закрыт), то новое обращение не создавать. Но как только получаю почту, то появляется ошибка:
Цитата
Fatal error: Call to a member function GetUserRight() on a non-object in ........ ./bitrix/modules/mail/classes/general/mail.php(2684) : e val()'d code on line 7

Не могу понять в чем проблема, ведь GetUserGroup возвращает массив групп, в которых состоит пользователь, а в GetUserRight("support", $arUsGr) указываю имя модуля и массив групп. По-идеи ведь так?! 
В чем моя ошибка?
ответил 21 Июль, 14 от W1Ng (540 баллов)
00 голосов
Скорее всего проблема в том, что в $emailsArr нету email-а. Написал print_r($arMessageFields["FIELD_FROM"]) и получил "Имя Фамилия" (отправителя).
Написал print_r($arMessageFields), так там вообще нигде не встречается email отправителя.
Подскажите, пожалуйста, как и где мне получить email отправителя?
ответил 22 Ноя, 14 от W1Ng (540 баллов)
00 голосов
Вопрос решен!
ответил 18 Март, 15 от W1Ng (540 баллов)

Похожие вопросы