Основной текст электронной почты?

#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() для желаемой части.