문제

인쇄하려는 전자 메일이 포함 된 Evolution으로 작성된 단일 스풀 Mbox 파일이 있습니다. 내 문제는 전자 메일이 Mbox 파일에 연대순으로 배치되지 않는다는 것입니다. Bash, Perl 또는 Python을 사용하여 파일을 먼저 주문하는 가장 좋은 방법을 알고 싶습니다. 나는 나에게 주소 된 파일에 대해 수신 된 파일로 오더를하고 싶습니다. MailDir 파일 등을 사용하는 것이 더 쉬울까요?

이메일은 현재 형식으로 존재합니다.

From x@blah.com Fri Aug 12 09:34:09 2005
Message-ID: <42FBEE81.9090701@blah.com>
Date: Fri, 12 Aug 2005 09:34:09 +0900
From: me <x@blah.com>
User-Agent: Mozilla Thunderbird 1.0.6 (Windows/20050716)
X-Accept-Language: en-us, en
MIME-Version: 1.0
To: someone <someone@hotmail.com>
Subject: Re: (no subject)
References: <BAY101-F9353854000A4758A7E2CCA9BD0@phx.gbl>
In-Reply-To: <BAY101-F9353854000A4758A7E2CCA9BD0@phx.gbl>
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 8bit
Status: RO
X-Status: 
X-Keywords:                 
X-UID: 371
X-Evolution-Source: imap://x+blah.com@blah.com/
X-Evolution: 00000002-0010

Hey

the actual content of the email

someone wrote:

> lines of quotedtext

이 정보를 사용하여 파일을 Perl 등으로 쉽게 재구성 할 수있는 방법이 있는지 궁금합니다.

도움이 되었습니까?

해결책

이것이 파이썬에서 할 수있는 방법입니다.

#!/usr/bin/python2.5
from email.utils import parsedate
import mailbox

def extract_date(email):
    date = email.get('Date')
    return parsedate(date)

the_mailbox = mailbox.mbox('/path/to/mbox')
sorted_mails = sorted(the_mailbox, key=extract_date)
the_mailbox.update(enumerate(sorted_mails))
the_mailbox.flush()

다른 팁

ThunderBird의 importexportTools Addon을 사용하여 Mail 메시지를 Mbox로 가져 오면 Python 솔루션이 작동하지 않습니다. 버그가 있습니다 : 메시지는 'From'line과 함께 접두사를 형식으로 접두사해야합니다.

From - Tue Apr 27 19:42:22 2010

그러나 importexportTools는 'From'Line과 접두사를 만듭니다.

From - Sat May 01 2010 15:07:31 GMT+0400 (Russian Daylight Time)

따라서 두 가지 오류가 있습니다.

  1. 시퀀스 '시간 연도'는 '연도'로 나뉩니다.
  2. 시간대 이름과 함께 GMT 정보가 포함 된 추가 쓰레기

Python의 Mailbox.py/unixmailbox에는 'From'Line Matching 용으로 Hardcoded Regexp가 있으므로 일부 메시지는 구문 분석 할 수 없습니다.

저자에게 오류 메시지를 썼지 만 실수로 가져온 많은 메시지가 있습니다.

사서함을로드 할 때 메모리의 메모리를 재정렬 할 수있는 반면 Mbox를 다시 작성하는 요점은 무엇입니까? 주문하고 싶은 시간은 어느 시간입니까? 날짜를 받으시겠습니까? 보낸 날짜? 어쨌든, Mbox와 함께 재생하기위한 모든 Ruby/Python/Perl 모듈이 그렇게 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top