Библиотека электронной почты Python - Анализ сообщения / вложения rfc822
Я использую Python 2.7 и пытаюсь разобрать электронные письма, которые пересылаются в качестве вложения во входящие. Я не могу разобрать заголовки / электронную почту в прикрепленном сообщении. Я вижу это как 'message/rfc822', но когда я пытаюсь разобрать его, он отображается пустым.
Я вытащил сообщения через генератор, и он работает нормально, как показано ниже:
res, data = self.imap_client.fetch(msg_id, '(RFC822)')
msg = email.message_from_string(data[0][1])
yield msg
Это сообщение затем помещается в другую функцию, где я извлекаю вложения (через walk()).
attachments = []
for part in msg.walk():
content_disposition = part.get('Content-Disposition', None)
if content_disposition:
attachments.append(Attachment(part, email_date))
return attachments
Класс Attachment выглядит следующим образом:
class Attachment(object):
def __init__(self, attachment, email_date=None):
self.content_type = attachment.get_content_type()
self.attachment = attachment
fname = None
if self.content_type.startswith('message/'):
self.data = attachment.as_string()
fname = 'mail.eml'
else:
self.data = attachment.get_payload(decode=True)
try:
self.size = len(self.data)
except TypeError:
self.size = 0
if self.attachment.get_filename():
fname = self.attachment.get_filename().strip().replace(' ', '-')
self.name = re.sub(r'(?u)[^-\w.]', '', fname)
self.date = email_date
Я пытался вытащить вложение с помощью get_payload и передать его (как указано выше), используя только as_string(), но безрезультатно. Когда я пытаюсь разобрать вложение электронной почты, оно не получает никаких данных:
if attachment.content_type == "message/rfc822":
msg = email.message_from_string(attachment.data)
print msg.get('Subject', None)