2012-11-27 4 views
0

장고/파이썬에서 Gmail 이메일 인터페이스를 만들고 있습니다. 주제와 날짜, 일종의 개요 수준 색인을 포함하는 모든 전자 메일의 골격을 만들고 싶습니다. 따라서 전자 메일이 삭제 되더라도 존재하는 지표와 보낸시기가 표시됩니다.IMAP의 고유 이메일 식별자

내 문제는 IMAP UID가 변경되었다는 것을 고려할 때 고유 한 전자 메일 식별자로 사용할 수있는 것은 무엇입니까? 데이터베이스의 고유 한 ID로 각 전자 메일의 스켈레톤을 만들지 만 전자 메일 UID 및 IMAP 폴더 이름을 연결하면 다른 전자 메일이 삭제 될 때 UID가 변경 될 수 있습니다.

이메일의 고유 식별자를 만드는 가장 좋은 해결책은 무엇입니까? 나는 (보낸 날짜, 제목) 조합을 사용하려고 생각했지만, 좀 더 간단한 것을 찾고있었습니다.

누군가 도울 수 있습니까?

답변

2

나의 이해는 UID가 변경되지 않습니다 ... 그래서 사용하기 괜찮을해야한다는 것입니다 감사하는 IMAP/당신의 DB 사이의 링크로. RFC3501 (업데이트 RFC822)에서

-http://www.limilabs.com/mail/rfc/3501

2.3.1.1. 고유 식별자 (UID) 메시지 속성


고유 식별자가 유효 값을 사용하는 경우 (아래 참조) 각 메시지에 할당 된 32 비트 값이 모든 참조 안 64 비트 값
형성

사서함에있는 다른 메시지 또는 동일한 이름을 가진 후속 사서함 인 영숫자
고유 식별자
은 사서함에서 엄격하게 오름차순으로 할당됩니다. 각
메시지가 사서함에 추가 될 때 이전에 추가 된
메시지보다 높은 UID가 할당됩니다. 메시지 시퀀스
숫자와 달리 고유 식별자는 연속적 일 필요가 없습니다.

메시지의 고유 식별자는
세션 중에 변경하면 안되며 세션간에 변경해서는 안됩니다. 아래에서 설명하는
UIDVALIDITY 메커니즘을 사용하여 세션간에 고유 한 식별자가 감지되어야합니다 (
).

+0

문제입니다. UID는 세션간에 변경되지 않을 수도 있지만 ... 가능합니다. 다른 전자 메일이 이동되거나 삭제되는 경우 다른 전자 메일의 UID가 실제로 변경 될 수 있습니다. 또한 DB에 UID에 매핑을 저장하고 유효성을 저장해야하며 매번 UID 유효성을 검사해야하므로 매우 복잡해 보입니다. 더 간단한 시스템이 있어야합니다. –

+0

@VascoPatricio 그래서 내 이해를 명확히하기 위해 DB에 몇 개의 필드를 저장하고 있습니다. IMAP 서버를 사용하여 필요한 경우 전체 이메일을 가져올 수 있습니까? –

+0

Jon, 정확하게. 목표는 각 전자 메일에 대해 번거롭지 않은 식별자를 사용하는 것이므로 필요한 경우 GMail에서 실시간으로 검색 할 수 있습니다. 그렇지 않은 경우 그 빈 메시지가 있음을 알리는 빈 "해골"이 있습니다. UID/폴더 이름/UID 유효 날짜의 조합은 작동하지만 명백하게 복잡해 보입니다 ... –

0

는 내가 발견 한 것은 모든 폴더는 서로 다른 메시지를 다른 폴더에 repetetive의 UID가된다는 것을 의미합니다 그것의 자신의 UID 씨앗을 가지고 있다는 것입니다. RFC822는 전자 메일의 Message-ID 헤더를 지정합니다.이 헤더는 일반적으로 자동 생성되며 (예 : Gmail) 메시지를 이동 한 후 UID를 수정할 때 사용할 수 있습니다. IMAP은 UID, MessageID와 같은 특정 필드에 대한 쿼리를 지원합니다.

이 결합 된 키를 사용하면 시스템의 모든 메시지를 항상 추적 할 수 있습니다.

직접 보내는 경우 자신의 MessageID를 생성 할 수 있습니다.여기를 생성하는 방법은 다음과 같습니다

http://www.jwz.org/doc/mid.html

더 읽기 :

http://en.wikipedia.org/wiki/Message-ID