Применение регулярного выражения к экземпляру - из электронной почты - PullRequest
0 голосов
/ 11 февраля 2012

Я использую модуль imaplib для входа в мою учетную запись gmail и получения электронной почты.Это дает мне много информации, а также to / from / subject / body text.В соответствии с типом (msg) возвращаемый объект является экземпляром.

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

Пример регулярного выражения для определения даты, которая отлично работает, когда я просто даю ей строку:

    match = re.search(r"Time:\s(([0-2]\d):([0-5]\d))", text) # validates hour and minute in a 24 hour clock

Итак, на самом деле три вопроса:
1.) я собираюсь об этомправильный путь или есть лучший способ сделать это?
2.) как я могу применить свое регулярное выражение к этой информации 'экземпляра', чтобы я мог определить дату / время и т. д.
3.) как я могу просто получитьтело письма?

result, data = mail.fetch(latest_email_id, "(RFC822)")

raw_email = data[0][1]

email_message = email.message_from_string(raw_email)

msg = email.message_from_string(raw_email)
msg.get_payload()

Еще раз спасибо

Ответы [ 2 ]

0 голосов
/ 15 февраля 2012

Оказывается, что к телу электронной почты можно получить доступ через полезную нагрузку [0], поскольку полезная нагрузка является списком, а переменная msg была экземпляром.Затем я просто преобразовал его в строку с простым

payload = msg.get_payload()
body = payload[0]
str_body = str(body)

Еще раз спасибо за вашу помощь

0 голосов
/ 11 февраля 2012

Я думаю, что эта проблема может быть действительно близка к другому вопросу, на который я ответил: полезная нагрузка электронного письма в строковом формате, python

Основной проблемой для другого человека было то, что get_payload() может возвращать многокомпонентные объекты, которые вы должны проверить.Это не всегда просто строка.

Вот фрагмент из другого вопроса о том, как обрабатывать объект, который вы получаете от get_payload ():

if isinstance(payload, list):
    for m in payload:
        print str(m).split()

else:
    print str(m).split()

Кроме того, вы можете просмотреть фактическиерасширенный разговор, который у меня был с ОП этого вопроса здесь: http://chat.stackoverflow.com/rooms/5963/discussion-between-jdi-and-puneet

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...