Как напечатать только тело сообщения из полезной нагрузки почты в python 2.7 - PullRequest
0 голосов
/ 20 декабря 2018

Я пытаюсь напечатать сообщение, но получаю нежелательный текст.Невозможно отфильтровать это.

#!/usr/bin/python
import imaplib
import email
import re
p = re.compile(r'Server Status')

mail = imaplib.IMAP4_SSL('stbeehive.yxz.com')
(retcode, capabilities) = mail.login('abc@yxz.com','passwd')
print retcode, capabilities
mail.list()
mail.select('Inbox')
n=0
(retcode, messages) = mail.search(None,'(UNSEEN)')
if retcode == 'OK':
    for num in messages[0].split() :
        print 'Processing '
        n=n+1
        typ, data = mail.fetch(num,'(RFC822)')
        for response_part in data:
             if isinstance(response_part, tuple):
                 original = email.message_from_string(response_part[1])
                 print original['From']
                 print original['Subject']
                 if original.is_multipart():
                     message =  original.get_payload()[0]
                     print message
                     for line in message:
                         if p.findall(line):
                             print line
                 else:
                     print original.get_payload()

print n

Когда я пытаюсь напечатать сообщение ниже. Я просто хочу третью строку из этого.

Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: quoted-printable
Server Status#XYZBSS##XYZ Running

Я пытался отфильтровать "Состояние сервера"используя re.compile в приведенном выше коде, но получая ошибку ниже.

  File "./mail.py", line 27, in <module>
    for line in message:
  File "/usr/lib64/python2.6/email/message.py", line 292, in __getitem__
    return self.get(name)
  File "/usr/lib64/python2.6/email/message.py", line 358, in get
    name = name.lower()
AttributeError: 'int' object has no attribute 'lower'

1 Ответ

0 голосов
/ 20 декабря 2018

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

Без фактического сообщения, которое вы можете посмотреть, нет способа проверить это, но я предполагаю что-то вроде

             if original.is_multipart():
                 # Quick hack, should probably properly recurse
                 message =  original.get_payload()[0].get_payload()
             else:
                 message = original.get_payload()
             #print message
             for line in message.split('\n'):
                 if 'Server Status' in line:   # look ma, no regex necessary
                     print line
...