2016-02-23 2 views
0

Я пытаюсь работать с простым многопользовательским MIME-адресом, используя Python's email module. Однако по какой-то причине я не понимаю, я не могу ходить по всем частям электронной почты - по какой-то причине приложение/pdf не учитывается.Почему парсер электронной почты python не находит все части этого многопользовательского электронного письма MIME?

Sample неудачу операции:

import email  

msgstring = '''See bottom of post''' 

msg = email.message_from_string(msgstring) 

has_pdf_attached = False 

for part in msg.walk(): 
    print (part.get_content_type()) 
    if part.get_content_type() == 'application/pdf': 
     payload = part.get_payload(decode=True) 
     if '%PDF-' in payload: 
      has_pdf_attached = True 

print(has_pdf_attached) 

Выход (уведомление о том, что окончательное 'применение/PDF' часть отсутствует в print Инг частей):

multipart/alternative 
text/plain 
text/html 
False 

само сообщение, пропущено до показать важные бит:

--_=_swift_v4_145618772756cba94f8fcc2_=_ 
Content-type: multipart/alternative; boundary="----------=_1456187728-18401-69" 

This is a multi-part message in MIME format... 

------------=_1456187728-18401-69 
Content-Type: text/plain; charset=utf-8 
Content-Transfer-Encoding: quoted-printable 

A bunch of content here 
foobar 
barfoo 
etc 

------------=_1456187728-18401-69 
Content-Type: text/html; charset="utf-8" 
Content-Disposition: inline 
Content-Transfer-Encoding: quoted-printable 

<html><body> 
    <p>HTML version of content</p> 
</body></html> 

------------=_1456187728-18401-69-- 

--_=_swift_v4_145618772756cba94f8fcc2_=_ 
Content-Type: application/pdf; name test.pdf 
Content-Transfer-Encoding: base64 
Content-Disposition: attachment; filename test.pdf 

A_Big_Long_Base64_Enconded_PDF_File_foofoofoofoofoofoofoofoo 
JVBER0OUMyNzc0ODFDODAwMTI+IF0KL0RvY0NoZWNrFADSFsfsaFdsafsdaf 
dHhyZWYKMzE4MjkKJSVFT0YKFDSFDSFdsfdsfdsfdsfdsfdsfdsfdsfdsfds 

--_=_swift_v4_145618772756cba94f8fcc2_=_-- 

Итак, что я делаю неправильно? Я замечаю, что «обнаруженные» части находятся в первом «разделе», обернутом таинственным для меня --_=_swift_v4_145618772756cba94f8fcc2_=_--. Я предполагаю, что это связано, но поиск google и SO не удалось, поэтому я здесь.

ответ

0

В стандартном опыте переполнения стека все, что мне нужно было сделать, это задать вопрос публично, а затем простой запрос будет проявляться на моих глазах.

В моем msgstring не было всего оригинального электронного письма - библиотека IMAP, которую я использовал, была неправильно сконфигурирована и удаляла основной заголовок сообщения. --_=_swift_v4_145618772756cba94f8fcc2_=_ действительно является границей - главной границей всего многочастного сообщения.

Когда я передал фактическое полное сообщение в виде msgstring, он работал как шарм.

Отбросьте этот глупый вопрос, не зная MIME-формат очень хорошо.