2015-09-16 1 views
0

Я могу открыть электронную почту с помощью питона (IMAP и почтовые модули), в основном, следуя советам здесь: How can I get an email message's text content using python?Извлечение первой строки электронной почты тела с помощью питона

Но мне нужно напечатать только первую строку каждого почтового тела - как я могу это сделать?

for part in email_message.walk(): 
    # each part is a either non-multipart, or another multipart message 
    # that contains further parts... Message is organized like a tree 
    if part.get_content_type() == 'text/plain': 
     print part.get_payload() # prints the raw text 

это то, что я в настоящее время приходится печатать тело, любые идеи, как я мог бы ограничить, что в первой строке письма?

ответ

1

Там же метод в библиотеке строки точно для этой операции - splitlines(), который заботится о различных линейных окончаний (\ п или \ г \ п). From the doc:

Например, 'AB C \ N \ ндэ фг \ RKL \ г \ n'.splitlines() возвращает [' «AB C '', 'де фг', 'Ы'],

Поскольку он возвращает массив, получение первого элемента тривиально - [0]. Он также не возвращает лишнюю пустую строку, если последний элемент заканчивается символом новой строки, в отличие от split('n').

Плюс, вам лучше использовать get_payload(decode=True), он позаботится о расшифровке base64 и т. Д. Наконец, вот ваш пример обновления:

for part in email_message.walk(): 
# each part is a either non-multipart, or another multipart message 
# that contains further parts... Message is organized like a tree 
if part.get_content_type() == 'text/plain': 
    # you may want to break it out in 2 statements for readability 
    print part.get_payload(decode=True).splitlines()[0] # prints the first line 

BTW, текстовые вложения также «текст/обычного» типа содержимого и может испортить планируемые данные; вы можете пропустить их - see my post here (self quoting, xaxax).

HTH

1

Согласно документам, get_payload() должен возвращать строку, чтобы это работало.

for part in email_message.walk(): 
    # each part is a either non-multipart, or another multipart message 
    # that contains further parts... Message is organized like a tree 
    if part.get_content_type() == 'text/plain': 
     lines=part.get_payload().split("\n") 
     print lines[0]