PHP: /* connect to yandex */ $hostname = '{imap.yandex.ru:993/imap/ssl}INBOX'; $username = 'почта'; $password = 'пароль'; /* try to connect */ $imap = imap_open($hostname,$username,$password) or die('Cannot connect to Yandex: ' . imap_last_error()); $mails_id = imap_search($imap, 'UNSEEN'); #Извляем только не прочитанные сообщения foreach ($mails_id as $num) { ### Подготавливаем тело письма $body = preparing_body($imap, $num); #Получаем тело письма и декодируем его $check_mail = check_mail($body); #Проверяем то ли письмо нам пришло if ($check_mail == true) { $result_text = preparing_body_mail($body); #Разделяем части текста $client_name = search_client_name($result_text["client_id"][1][0]); include("plugins/Telegram/index.php"); #Отправляем в Телеграм } //imap_delete($imap, $num); #Помечаем письмо как удаленное imap_setflag_full ($imap, $num, '\\seen'); #устанавливаем, что прочитано ### Дебаг echo "<br><br><br><br><br><br><br><br><br><br><br><br>"; echo "Рекламная система: " . $result_text["system"][1][0] . "<br>"; echo "Email клиента: " . $result_text["client_email"][1][0] . "<br>"; echo "Имя клиента: " . $client_name . "<br>"; echo "Elama ID: " . $result_text["client_id"][1][0] . "<br>"; echo "Проверка mail: " . var_dump($check_mail) . "<br>"; ### Само сообщение echo "<br><br><br><br><br><br><br><br><br><br><br><br>"; echo $body; #Логика обработчика /* * 1) Проверяем это письмо о расходе средств? * 2) Подготавливаем письмо для обработки * 3) Обрабатываем письмо * 4) Отправляем в Телеграм * 5) Удаляем письмо * * Срабатывают письма с заголовками: * 1) Яндекс.Директ/Деньги на счету логина e-16714111 в Яндекс.Директе Уведомление о РАСХОДЕ средств * * */ //imap_expunge($imap); #Удаляем сообщения } imap_close($imap); #Функции function decode_utf8($str) { #Функция раскодирования текста из base64 в utf8 $parts = preg_split("/=\?UTF-8\?B\?/i", $str); $res_str = ''; foreach ($parts as $p) { if ($p) { $parts2 = preg_split("/\?=/i", $p); $s = base64_decode($parts2[0]); if (count($parts2) > 1) $s .= $parts2[1]; $res_str .= $s . ' '; } } return trim($res_str); } function preparing_body($imap, $num) { #Получаем тело письма и декодируем его $body = imap_body($imap, $num); // Получаем письма $body = decode_utf8($body); // Декодируем из base64 в utf8 return $body; } function check_mail($body) { #Проверяем письмо от Яндекс Директ preg_match_all('#поэтому показ (.+?) приостановлен#su', $body, $check_mail); // Извлекаем текст if ($check_mail[1][0] == "его рекламы") { return true; // Письмо определено } else { return false; // Письмо не определено } } function preparing_body_mail($body) { #Разделяем части текста preg_match_all('#балансе (.+?), поэтому#su', $body, $result["system"]); // Извлекаем систему preg_match_all('#аккаунт клиента (.+?) и пополните#su', $body, $result["client_email"]); // Извлекаем email клиента preg_match_all('#(ID: (.+?)) з#su', $body, $result["client_id"]); // Извлекаем ID клиента в Elama $result["client_id"][1][0] = substr($result["client_id"][1][0], 4, -1); // Удаляем лишний символ у id return $result; } function search_client_name($client_id) { include "clients.php"; foreach ($clients as $key => $value){ if($clients[$key]["id"] == $client_id){ return $clients[$key]["name"]; break; } } } Этапность выполнения такая: Подключаемся к почтовому ящику Берём оттуда не прочитанные письма Проверяем подходит ли письмо по условию Если письмо подходит по условию, то через регулярки извлекаем данные Отправляем данные в телеграм Ставим письмо статус прочитано Проблема в том, что при пересылке письма себе на почту вручную, либо с другой почты, то письмо нормально обрабатывается и отправляется уведомление. Если письмо приходит с другого ящика, то уведомление не отправляются. Письма одинаковой структуры. Никак не могу понять в чём проблема
значит не одинаковой... отлаживайте пошагово 1) попадает ли "странное" письмо в цикл 2) срабатывает ли на данном письме $check_mail в зависимости от результата - копаете дальше P.S PHP: if ($check_mail == true) { эквивалентно PHP: if ($check_mail) {
как вы определяете "одинаковость"? выводите содержимое письма через var_dump() и смотрите ... мб где кодировки не те, может непечатаемые символы... 100500 причин