Здравствуйте!
Получаю значит почту imap с яндекса, т.е. со своего почтового ящика на яндексе. Часть писем приходит интересным для меня образом вот в таком формате:
----ALT--3qTFCBd0ekkfmpv0s6C69hoX0USbWYVW1512581220
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: base64
CgoK
----ALT--3qTFCBd0ekkfmpv0s6C69hoX0USbWYVW1512581220
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: base64
CjxIVE1MPjxCT0RZPjxicj48YnI+PGJyPjwvQk9EWT48L0hUTUw+Cg==
----ALT--3qTFCBd0ekkfmpv0s6C69hoX0USbWYVW1512581220--
Чем это можно раскодировать?
Использую функцию разбора imap.
switch ((int)$encoding) {
# 7BIT
case 0:
$body = $msg_body;
break;
# 8BIT
case 1:
$body = imap_8bit($msg_body);
break;
# BINARY
case 2:
$body = imap_binary($msg_body);
break;
# BASE64
case 3:
$body = imap_base64($msg_body);
break;
# QUOTED-PRINTABLE
case 4:
$body = imap_qprint($msg_body);
break;
# OTHER
case 5:
$body = $msg_body;
break;
# UNKNOWN
default:
$body = $msg_body;
break;
}
return $body;
в цикле значит разбираем вот так:
$structure = imap_fetchstructure($connection, $num);
$msg = imap_fetchbody($connection, $num, 1, FT_PEEK);
FT_PEEK - чтобы не читал сообщения в почте )))
в итоге на выходе я получаю письмо не раскодированное imap_fetchbody и понять нимогу что прикрутить надо. Вручную разобрать - это мне кажется не совсем правильно, извлекая base64 из письма (тела), которое не понятно как приходит.
imap_fetchbody - извлекает часть (кусок) письма.
UPD:
добрался до скрипта... решил проблему!
Все оказалось дело не в бобине... дело было в проводах. Итак, данный формат умеет разбирать imap php, но его надо нормально скормить. Что надо сделать?
- Смотрим какую часть тела письма нам надо получить, imap_fetchbody, первую часть, либо же 1.1 ... не трудно будет написать код для получения письма.
Почему именно так? идем в описания структуры писем, читаем (ссылку ниже оставил в коментах). Нужны будут две проверки, дальше разберетесь...