2015-07-10 17 views
7

IMAP aracılığıyla e-postalarıma erişmek, yönetmek ve filtrelemek için bir Python betiği yazdım (Python'un imaplib kullanarak). Ayrıştırma IMAP E-posta Ekleri için BODYSTRUCTURE

(ilk postanın tamamını indirmeden) bir e-posta eki listesini almak için, ben e-postanın UID kullanarak e-postanın BODYSTRUCTURE, yani getirilen:

imap4.uid('FETCH', emailUID, '(BODYSTRUCTURE)') 

ve eki adlarını almak Buradan.

Normalde ek adını içeren "bölümü" gibi görünecektir: Ben bazen okumuştum

("attachment" ("filename" {34}', 'This is the second attachment.docx')) 

:

("attachment" ("filename" "This is the first attachment.zip")) 

Ama vesilelerle birkaç üzerine, şöyle bir şey karşılaştı IMAP, çift tırnak içine alınmış dizgileri temsil etmek yerine, dizgi uzunluğu olan kıvrımlı ayraçları ve ardından gerçek dizeyi (tırnak işaretleri olmadan) kullanır.

örn.

{16}This is a string 

Ama dize yukarıda kesinlikle o uyması görünmüyor (tek tırnak, virgül ve kapanış kıvırcık parantez sonra bir boşluk var ve dize kendisi tek tırnak içinde sarılır) . Ben tüm e-posta indirdiğinde

, o eklentiyi içeren mesajı bölümü için başlık normal görünüyordu:

Content-Type: application/docx 
Content-Transfer-Encoding: base64 
Content-Disposition: attachment; filename="This is the second attachment.docx" 

I (eee ... ayrıştırmak) olduğunu yorumlayabiliriz nasıl "anormal" vücut yapısı, yapım duygusu Ekstra tek tırnak işaretleri, virgül, vb ...

Ve bu "standart" mı?

cevap

6

Baktığınız şey, kesik ve israftan zarar görmüş, karmaşık bir sözcüktür. Daha sonra birçok bayt (değil karakter) olmasıdır

{5} 
Hello 

, uzunluk, daha sonra bir CRLF gibi bir birebir görünüyor:

{4} 

+0

@ ile beraberim. OP: Daha ayrıntılı ya da alternatif bir açıklama (teklifinizi sunduğunuzdan tahmin ettiğim gibi) istiyorsanız, ham çıktıyı sorunuza yapıştırmanızı (küçük bir parçacığı) öneririm. Muhtemelen Python'un imaplib'inde, istemcinizle sunucu arasındaki diyaloğun tam bir hata ayıklama dökümünü almanın bir yolu olduğunu düşünüyorum. – tripleee

+0

@tripleee maalesef, soruna neden olan e-postayı sildim ve o zamandan beri sorunla karşılaştım. Tam bir hata ayıklama dökümünü almayı düşünmedim, ancak tekrar karşılaştığımda ona bakacağım. lütuf teklif etmemin nedeni, kesmeyi-ve-yapıştırmanın problemi yarattığını düşünmüyorum (doğrudan değeri değişkenin değerini almak için dosyaya vermiştim). Yine de, sınırlı bilgi ile, tek olası cevap değildir, ben ödül vereceğim. –

1

IMAP-Tools, bir GitHub proje gibi görünüyor, bir BODYSTRUCTURE içerir ayrıştırıcı.

+1

teşekkürler, bu kütüphane yararlı görünüyor. fakat imaplib'den aldığım çıktı zaten karıştırılmış olduğundan, parse_bodystructure işlevine giriş aynı yönlendirilmiş dizgedir. –

+0

Evet, bu iyi bir nokta –