Ruslan.nut
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()); 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); #Помечаем письмо как удаленное ### Дебаг 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 «<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); #Удаляем сообщения } #Функции function decode_utf8($str) { #Функция раскодирования текста из base64 в utf8 $res_str = »; foreach ($parts as $p) { if ($p) { $s .= $parts2[1]; $res_str .= $s . ‘ ‘; } } } function preparing_body($imap, $num) { #Получаем тело письма и декодируем его $body = decode_utf8($body); // Декодируем из base64 в utf8 return $body; } function check_mail($body) { #Проверяем письмо от Яндекс Директ if ($check_mail[1][0] == «его рекламы») { return true; // Письмо определено } else { return false; // Письмо не определено } } function preparing_body_mail($body) { #Разделяем части текста preg_match_all(‘#аккаунт клиента (.+?) и пополните#su’, $body, $result[«client_email»]); // Извлекаем email клиента $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; } } }Этапность выполнения такая:
- Подключаемся к почтовому ящику
- Берём оттуда не прочитанные письма
- Проверяем подходит ли письмо по условию
- Если письмо подходит по условию, то через регулярки извлекаем данные
- Отправляем данные в телеграм
- Ставим письмо статус прочитано
Проблема в том, что при пересылке письма себе на почту вручную, либо с другой почты, то письмо нормально обрабатывается и отправляется уведомление. Если письмо приходит с другого ящика, то уведомление не отправляются. Письма одинаковой структуры. Никак не могу понять в чём проблема
ADSoft
значит не одинаковой…
отлаживайте пошагово
1) попадает ли «странное» письмо в цикл
2) срабатывает ли на данном письме $check_mail
в зависимости от результата — копаете дальшеP.S
PHP:
if ($check_mail == true) {эквивалентно
PHP:
if ($check_mail) {
Ruslan.nut
Да в том то и прикол, что оно одинаковое. Попробую конечно ещё дополнительно посмотреть
ADSoft
как вы определяете «одинаковость»?
выводите содержимое письма через var_dump() и смотрите … мб где кодировки не те, может непечатаемые символы… 100500 причин
Ruslan.nut
Понял, спасибо!)
Сейчас буду пробовать