2010-06-16 2 views
12

Я пишу скрипт Python для обработки писем, возвращенных с Procmail. Как было предложено в этом question, я использую следующий Procmail конфигурации:Разбор электронной почты с Python

:0: 
|$HOME/process_mail.py 

Мой process_mail.py скрипт приема электронной почты, как это с помощью стандартного ввода:

From hostname Tue Jun 15 21:43:30 2010 
Received: (qmail 8580 invoked from network); 15 Jun 2010 21:43:22 -0400 
Received: from mail-fx0-f44.google.com (209.85.161.44) 
by ip-73-187-35-131.ip.secureserver.net with SMTP; 15 Jun 2010 21:43:22 -0400 
Received: by fxm19 with SMTP id 19so170709fxm.3 
for <[email protected]>; Tue, 15 Jun 2010 18:47:33 -0700 (PDT) 
MIME-Version: 1.0 
Received: by 10.103.84.1 with SMTP id m1mr2774225mul.26.1276652853684; Tue, 15 
Jun 2010 18:47:33 -0700 (PDT) 
Received: by 10.123.143.4 with HTTP; Tue, 15 Jun 2010 18:47:33 -0700 (PDT) 
Date: Tue, 15 Jun 2010 20:47:33 -0500 
Message-ID: <[email protected]> 
Subject: TEST 12 
From: Full Name <[email protected]> 
To: [email protected] 
Content-Type: text/plain; charset=ISO-8859-1 

ONE 
TWO 
THREE 

Я пытаюсь разбора сообщение таким образом:

>>> import email 
>>> msg = email.message_from_string(full_message) 

Я хочу получить поля сообщений, такие как «От», «Кому» и «Тема». Однако объект сообщения не содержит ни одного из этих полей.

Что я делаю неправильно?

ответ

9

Вы должны убедиться, что линии не случайно не сломаны (поскольку они выше, хотя трудно сказать, была ли проблема с копировальной пастой) - с intac т сообщение, такие как:

Received: (qmail 8580 invoked from network); 15 Jun 2010 21:43:22 -0400 
Received: from mail-fx0-f44.google.com (209.85.161.44) by ip-73-187-35-131.ip.secureserver.net with SMTP; 15 Jun 2010 21:43:22 -0400 
Received: by fxm19 with SMTP id 19so170709fxm.3 for <[email protected]>; Tue, 15 Jun 2010 18:47:33 -0700 (PDT) 
MIME-Version: 1.0 
Received: by 10.103.84.1 with SMTP id m1mr2774225mul.26.1276652853684; Tue, 15 Jun 2010 18:47:33 -0700 (PDT) 
Received: by 10.123.143.4 with HTTP; Tue, 15 Jun 2010 18:47:33 -0700 (PDT) 
Date: Tue, 15 Jun 2010 20:47:33 -0500 
Message-ID: <[email protected]> 
Subject: TEST 12 
From: Full Name <[email protected]> 
To: [email protected] 
Content-Type: text/plain; charset=ISO-8859-1 

ONE 
TWO 
THREE 

затем

msg = email.message_from_string(msgtxt) 
print msg['Subject'] 

печатает TEST 12 по желанию.

+0

Как получить тело сообщения электронной почты здесь? – Anuj

+0

Если вы действительно хотите, чтобы весь сайт электронной почты RFC2822 с необработанными структурами MIME и все, разбор сообщения в Python в основном является излишним; тело - это все после первой пустой линии. Обычно, с современными сообщениями, вы хотите проанализировать структуру MIME и извлечь одну или несколько частей тела. – tripleee

1

Я отвечаю на себя.

Я нашел ошибку в коде, который создает сообщения. Это добавление строк между некоторыми строками, что предотвращает корректную работу парсера.

3

Похоже, у вас есть символы перевода строки без пробелов предваряется дополнительных линий, которые в соответствии с RFC 2822 §2.3.2 является незаконным:

Каждое поле заголовка логически одна строка символов, содержащих
имя поля, двоеточие , и полевого тела. Однако для удобства
и для устранения ограничений на 998/78 символов в строке
часть тела поля поля заголовка может быть разделена на несколько строк:
; это называется «складыванием». Общее правило:
что везде, где этот стандарт позволяет сбрасывать пробелы (не
просто символы WSP), CRLF может быть вставлен перед любым WSP. Для
например, поле заголовка:

Subject: This is a test 

может быть представлена ​​как:

Subject: This 
    is a test 

Это должно выглядеть примерно так:

From hostname Tue Jun 15 21:43:30 2010 
Received: (qmail 8580 invoked from network); 15 Jun 2010 21:43:22 -0400 
Received: from mail-fx0-f44.google.com (209.85.161.44) 
    by ip-73-187-35-131.ip.secureserver.net with SMTP; 15 Jun 2010 21:43:22 -0400 
Received: by fxm19 with SMTP id 19so170709fxm.3 
    for <[email protected]>; Tue, 15 Jun 2010 18:47:33 -0700 (PDT) 
MIME-Version: 1.0 
Received: by 10.103.84.1 with SMTP id m1mr2774225mul.26.1276652853684; Tue, 15 
    Jun 2010 18:47:33 -0700 (PDT) 
Received: by 10.123.143.4 with HTTP; Tue, 15 Jun 2010 18:47:33 -0700 (PDT) 
Date: Tue, 15 Jun 2010 20:47:33 -0500 
Message-ID: <[email protected]> 
Subject: TEST 12 
From: Full Name <[email protected]> 
To: [email protected] 
Content-Type: text/plain; charset=ISO-8859-1 

ONE 
TWO 
THREE 
Смежные вопросы