imap_fetchbody

dimka1c

Новичок
Всем привет!
Не получается победить, помогите плз советом

Письмо отправляется через outlook
В письмо вставляется еще около 20 eml, каждое из которых содержит 4 файла
Письма приходят на gmail. Оттуда забираем через imap.
Структура читается, все нормально, но при попытке вытащить прикрепленный файл с помощью imap_fetchbody не правильно распарсивается сообщение, .т.е. в получаемую часть вставляется часть строки-разделителя (boundary)
Сама строка разделитель:
--_005_319e35b7891849d2b43e78dbead536fbCAS01enterpriseomegaaut_

вытаскиваемое тело получается вот такое:
aaut_ (это 5 последних символов из строки разделителя)
Content-Type: text/plain; charset="windows-1251"
Content-ID: <0F7E097C4A12D04DAF646B0F12B914F5@***.ru>
Content-Transfer-Encoding: quoted-printable

и дальше идет аттач, который тоже в конце обрезан.

вложения достаем вот так:
imap_fetchbody ($imap, $uid, '2.1', FT_UID)
imap_fetchbody ($imap, $uid, '2.2', FT_UID)
imap_fetchbody ($imap, $uid, '2.3', FT_UID)
imap_fetchbody ($imap, $uid, '2.4', FT_UID)

причем если достаешь полную секцию (вложенное письмо)
imap_fetchbody ($imap, $uid, '2', FT_UID)
получаем все нормально

Не совсем понимаю, почему так происходит. Кто-то может подсказать? Заранее спасибо.
 

dimka1c

Новичок
та кода то там особо и нет
imap

mailparse не пользую

$inbox = imap_open($hostname,$username,$password) or die('Cannot connect to Gmail: ' . imap_last_error());
$structure = imap_fetchstructure($inbox, $uid);

структура сложная получается, но факт не в том, берем нужную нам часть ручками:
imap_fetchbody ($inbox, $uid, '2.2', FT_UID) - это точно вложение

и получаем бяку, как расписал выше, т.е. забирает часть строки разделителя. Как то не хочется вручную разборку письма писать...
 
Последнее редактирование:

dimka1c

Новичок
и все же не могу найти ответа,

imap_fetchbody($inbox, $uid, '2.2', FT_UID)

получаю результат:

5:39:12 GMT";
modification-date="Mon, 28 Nov 2016 15:39:12 GMT"
Content-ID: <FC2FF0324D0E0E4488EF9E13988DCF61@*****.biz>
Content-Transfer-Encoding: base64

0M8R4KGxGuEAAAAAAAAAAAAAAAAAAAAAPgADAP7/CQAGAAAAAAAAAAAAAAAHAAAAAgAAAAAAAAAA
EAAAAwMAAAEAAAD+////AAAAAAMAAAAFAAAABgAAAAcAAAAIAAAACQAAAAoAAAD/////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////


А должен получить только вложение, которое начинает со строки, выделенной красным. Подскажите, почему так? Кто-нибудь сталкивался?
А если письмо без вложенных message - то все отлично. Куда копать?
 

WMix

герр M:)ller
Партнер клуба
@dimka1c, ты же понимаешь что mime имеют сложную структуру, с рекурсивными вложениями, письмо может содержать вложение письмо, которое содержит вложение письмо с вложением письмо у которого картинка.

приведи пример письма и программу которое это письмо "не правильно" читает
 

dimka1c

Новичок
пару минут, устал я уже с ней бороться, нутром понимаю, что оное работать не правильно не может, но нифига не выходит (((((((((
 
Последнее редактирование:

dimka1c

Новичок
$uid = 62; // вложенные письма с аттачментами
$path = 'files';
$inbox = imap_open(MAIL_HOST_GOOGLE, MAIL_USER_NAME_GOOGLE, MAIL_USER_PASSWORD_GOOGLE) or die('Cannot connect to Gmail: ' . imap_last_error());
$structure = imap_fetchstructure($inbox, $uid, FT_UID);

дальше писать бросил (через рекурсию получал номера), пробую тупо выдирать вложение

imap_fetchbody($inbox, $uid, '2.2', FT_UID)

должно вернуть как бы вернуть именно вложение, однако возвращает хреновину какую-то.

а именно imap_fetchbody($inbox, $uid, '2', FT_UID) - красиво возвращает второе вложенное письмо (именно вложенное письмо с 5-ю вложениями)

Как я понимаю, imap_fetchbody должно вернуть ту часть, которую я запрашиваю. Оно и возвращает, только с куском заголовка и обрезанным вложением.
 

Вложения

  • 95 KB Просмотры: 6

dimka1c

Новичок
т.е. вложенные message оно как то криво обрабатывает, вопрос почему?
смотрю по структуре оригинала, должно выдать так:

=C2=EE =E2=EB=EE=E6=E5=ED=E8=E8 =F4=E0=E9=EB =C7=E0=FF=E2=EA=E8 =D2=DD=CF


___
=C8=E4=E5=ED=F2=E8=F4=E8=EA=E0=F2=EE=F0 =F0=E0=F1=F1=FB=EB=EA=E8=3DD_ZTD, =
=F1=EE=E1=FB=F2=E8=E5=3D7014139


а выдает вот так:

aaut_
Content-Type: text/plain; charset="windows-1251"
Content-ID: <B40AE8D50D827147BF280B47604BB3EF@****.biz>
Content-Transfer-Encoding: quoted-printable

=C2=EE =E2=EB=EE=E6=E5=ED=E

В письме-оригинале соответственно выглядит вот так:

--_005_b41d3720cc5944c599e8bf7240e9bc61CAS01enterpriseomegaaut_
Content-Type: text/plain; charset="windows-1251"
Content-ID: <B40AE8D50D827147BF280B47604BB3EF@*****.biz>
Content-Transfer-Encoding: quoted-printable

=C2=EE =E2=EB=EE=E6=E5=ED=E8=E8 =F4=E0=E9=EB =C7=E0=FF=E2=EA=E8 =D2=DD=CF


___
=C8=E4=E5=ED=F2=E8=F4=E8=EA=E0=F2=EE=F0 =F0=E0=F1=F1=FB=EB=EA=E8=3DD_ZTD, =
=F1=EE=E1=FB=F2=E8=E5=3D7014139

--_005_b41d3720cc5944c599e8bf7240e9bc61CAS01enterpriseomegaaut_

 

dimka1c

Новичок
во как, если эту почту забираешь не с гугла, а, например, с яндекса - все работает.... Это как так........
 

fixxxer

К.О.
Партнер клуба
во как, если эту почту забираешь не с гугла, а, например, с яндекса - все работает.... Это как так........
Чем-то они отличаются, очевидно.

Можешь заморочиться - проанализировать отличия, сделать на основе этого анализа воспроизводящий проблему тест и отрепортить баг.

Но выше уже посоветовали использовать mailparse - это будет проще и надежнее.
 

dimka1c

Новичок
наверняка mailparse в итоге и будет, но уперся я уже в проблему - надо решить.
по структуре письма одинаковые на первый взгляд, но чудес не бывает.....
 

dimka1c

Новичок
итог: на гугле и на яндексе лежат 2 одинаковых письма с кучей вложений
с яндексом работает на ура, с гуглом - лажа.... тупо режет сообщение.
 

fixxxer

К.О.
Партнер клуба
Ну если тебе так прямо хочется разобраться, пиши в личку примеры кода, работающие с гуглом и яндексом соответственно, посмотрю на досуге.
 

WMix

герр M:)ller
Партнер клуба
From: "“Û˜ËÌ ¬Î‡‰ËÏË ¿ÎÂÍ҇̉ӂ˘" <[email protected]>
....
From: "[email protected]" <[email protected]>
To: "“Û˜ËÌ ¬Î‡‰ËÏË ¿ÎÂÍ҇̉ӂ˘" <[email protected]>
Subject: «‡ˇ‚͇ Ë Ï‡¯ÛÚÌ˚È ÎËÒÚ Ì‡ ‰. ’¬-0159325 “›œ
Thread-Topic: «‡ˇ‚͇ Ë Ï‡¯ÛÚÌ˚È ÎËÒÚ Ì‡ ‰. ’¬-0159325 “›œ
там каким-то образом уникоды пробрались, думаю в этом и есть вся проблема
 

dimka1c

Новичок
ребята, всем спасибо. Итог: перешли на другой почтовыйсервер, вопрос отпал сам по себе.
WMix - спасибо огромное, на досуге гляну.
Всем огромное спасибо за ответы
 
Сверху