2013-03-24 2 views
1

Я использую 'imaplib' в python для получения электронной почты из учетной записи Gmail. Но я просто хочу знать содержание электронной почты, название вложения, но не нужно загружать полное приложение.Python imaplib загрузить Gmail Текст без загрузки полного вложения

По умолчанию

myGmail = imaplib.IMAP4_SSL(...) 
.... 
(respCode, data) = myGmail.fetch(mailUid, 'RFC822') 

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

Я искал в Интернете и stackOverflow, чтобы найти ответ. Многие из них упомянули, что сначала необходимо определить структуру электронной почты, а затем определить часть, которую вы хотите загрузить. И я также прочитал RFC 3501 документа о протоколе IMAP4, в which он отметил, что я могу использовать

BODY[]<> to download the specific body part in Fetch command.

Но я попробовал много команды в питоне imaplib как следующее:

(rCode, data) = myGmail.fetch(mailUid, 'BODY[0]') 
(rCode, data) = myGmail.fetch(mailUid, 'BODY0') 
(rCode, data) = myGmail.fetch(mailUid, 'BODY[TEXT]') 

, но все из них не удалось с сообщением об ошибке:

error: FETCH command error: BAD ['Could not parse command']

Так кто-нибудь может сказать мне, как использовать эту команду в питона imaplib для Gmail?

И только для справки, BODYSTRUCTURE на приведенном выше примере электронной почты является:

(BODY 
(
    (
    (
     ("TEXT" "PLAIN" ("CHARSET" "us-ascii") NIL NIL "QUOTED-PRINTABLE" 1742 33) 
     ("TEXT" "HTML" ("CHARSET" "us-ascii") NIL NIL "QUOTED-PRINTABLE" 17976 485) "ALTERNATIVE" 
    ) 
    (
     "IMAGE" "JPEG" 
     ("NAME" "image001.jpg") "<[email protected]>" "image001.jpg" "BASE64" 4070 
    ) 
    "RELATED" 
) 
    ("APPLICATION" "PDF" ("NAME" "SAC 2012.pdf") NIL "SAC 2012.pdf" "BASE64" 20638) 
    "MIXED" 
) 
) 

Спасибо !!!

+2

Пожалуйста, [не оставляйте код] (http://sscce.org) - это затрудняет отслеживание и воспроизведение проблемы. Это нормально, чтобы пустое имя пользователя и пароль, но кроме этого все должно быть готово для вставки. – phihag

+0

@JXITC - Вы когда-нибудь это понимали? Если да, пожалуйста, поделитесь своим кодом :) –

+1

@ ZacharyBurt На самом деле, в конце концов, я не пытался получить структуру BODY, а затем разобрать. Вместо этого я просто просто загружаю весь контент (включая вложение) один раз. Это быстрое и грязное решение. – JXITC

ответ

2

Просто замените BODY[0] на (BODY[1]).

+0

Счетчик части тела начинается с 1. – Max

Смежные вопросы