#python #email
#python #Адрес электронной почты
Вопрос:
привет всем, я использую скрипт, который включает:
import oauth2 as oauth
import oauth2.clients.imap as imaplib
import email
conn = imaplib.IMAP4_SSL('imap.googlemail.com')
conn.debug = 4
# This is the only thing in the API for impaplib.IMAP4_SSL that has
# changed. You now authenticate with the URL, consumer, and token.
conn.authenticate(url, consumer, token)
# Once authenticated everything from the impalib.IMAP4_SSL class will
# work as per usual without any modification to your code.
conn.select('[Gmail]/All Mail')
response, item_ids = conn.search(None, "SINCE", "01-Jan-2011")
item_ids = item_ids[0].split()
# Now iterate through this shit and retrieve all the email while parsing
# and storing into your whatever db.
for emailid in item_ids:
resp, data = conn.fetch(emailid, "(RFC822)")
email_body = data[0][1]
mail = email.message_from_string(email_body)
Моя текущая проблема заключается в том, что я, похоже, не могу получить тело mail
экземпляра. Я могу просмотреть содержимое электронного письма, распечатав его или mail.as_string(), но тогда даже с mail.keys() и mail.values() я фактически не могу увидеть содержимое письма (основное сообщение).
Что не так с этим API электронной библиотеки? (или, скорее, что я делаю не так)?
Ответ №1:
Из email
документов:
Вы можете передать анализатору строку или файловый объект, и анализатор вернет вам корневой экземпляр сообщения структуры объекта.
Для простых, не MIME-сообщений полезной нагрузкой этого корневого объекта, скорее всего, будет строка, содержащая текст сообщения. Для MIME-сообщений корневой объект вернет True из своего метода is_multipart(), а доступ к подразделам можно получить с помощью методов get_payload() и walk() .
Так что используйте get_payload()
или, если сообщение состоит из нескольких частей, затем вызовите walk()
метод, а затем используйте get_payload()
для желаемой части.