2013-06-05 2 views
1

두 개 이상의 메일 함을 관리 할 수있는 이메일 관리자에 대해 작업하고 있습니다. 이것은 제 시나리오입니다. 우편함을 통해 메일을 받고 UID가 포함 된 데이터베이스에 해당 등록 정보를 저장합니다. 사서함은 imap 또는 pop3 프로토콜로 다운로드하도록 구성 할 수 있으며 사서함 자체에 따라 다릅니다.다른 imap 메일 함 uid 문제

POP3 UID와 :메시지의 고유 ID가 0x21 고유 우편함 내에 메시지를 식별에서 0x7E에 걸쳐 지속 범위 내에서 하나의 70 문자로 구성된 임의의 서버 결정 문자열 세션.

IMAP UID와 :는 고유 식별자 유효 값으로 사용되는 경우 (아래 참조)는 각 메시지에 할당 된 32 비트 값의 임의의 다른 메시지를 참조 안 64 비트 값을 형성 사서함 또는 동일한 이름을 가진 모든 후속 사서함을 영구 보존합니다.

이렇게 서로 다른 사서함간에 있지만 동일한 POP3 uid를 찾는 것은 거의 불가능합니다. 그러나 IMAP uids가 발생할 가능성이 더 큽니다.

그래서 나는 uid가 모두 다르다는 확신을 필요로합니다. 코드를 작성하지 않아도됩니다. 가능한 경우에만 알고, 올바른 방법을 사용해야합니다.

+2

수정/서버/사용자/등을 식별하는 ID 옆에 uid를 저장하지 않는 이유는 무엇입니까? –

+0

문제는 테이블 구조를 변경할 수 없다는 것입니다. timestamp, from, to, cc, subject, body, attachment. 그렇지 않으면 좋은 생각 일 것입니다. @RowlandShaw – SamDroid

+1

그래서 UID에 accountid를 연결하십시오. - - Max

답변

3

POP3 표준은 UID가 고유하도록 보장하지 않습니다. 공용 UID를 사용하는 다른 메시지를 볼 수 있습니다.

IMAP에는 원하는 방식으로 작동하는 영구 UID가 없습니다. UID는 단일 사서함 내에서 고유하도록 보장되지만 특정 상황에서는 변경 될 수 있습니다 (RFC 3501 및 UIDVALIDITY 응답 참조). 간단히 말해서, IMAP이 제공하는 유일한 보장은 어떤 일이 생기더라도 (mailbox name, UIDVALIDITY, UID)의 세 쌍이 하나의 메시지를 참조한다는 것입니다. 예를 들어 메시지 파트를 캐싱하는 것은 변경할 수 없기 때문에 가능합니다. 이것이 이 아니라는 것을 깨닫도록하십시오.은 동일한 메시지가 항상 동일한 사서함에 남아 있어도 동일한 세 쌍을 항상 할당한다는 것을 의미합니다.

GUID를 제공하는 비표준 확장 프로그램이 있지만 IMAP 서버 구현마다 다르며 모든 곳에서 사용할 수 없습니다.

+0

두 개의 서로 다른 imap 계정에 중복 된 UID가있을 수 있습니까? – DS9

+1

@ DS9, 예, 물론! UID는 하나의 "사서함"("폴더"라고도 함) 내에서만 유일하며 해당 'UIDVALIDITY'값이 변경 될 때까지만 사용됩니다. 이 UID는 전 세계적으로 고유하지 않습니다. –