Come determinare l'UID di un messaggio in IMAP
-
23-09-2019 - |
Domanda
Sto lavorando in un client di posta elettronica di progetto utilizzando C#.Io sto usando sia il POP e IMAP protocollo per comunicare con il server.Il problema è che non riesco a capire perché quando voglio ottenere l'UID di un messaggio il risultato dal server POP e IMAP server sono diversi.
POP
C: UIDL 1
S: +OK 1 UID2-1269789826
e
IMAP
C: $ FETCH 1 (UID)
S: * 1 FETCH (UID 2)
S: $ OK Fetch completed.
Perché il risultato per ottenere l'UID è di così diverso?In IMAP è un'altra funzione di questo?Qualsiasi aiuto è benvenuto.Grazie.
Soluzione
POP3 e IMAP sono due protocolli distinti. I UID utilizzati da questi due protocolli non sono correlati e non dovrebbero essere uguali a tutti. Infatti, un POP3 UID è una stringa arbitraria mentre un UID IMAP è un numero a 32 bit (trasmesso come stringa).
In teoria, è possibile scrivere un mail server che supporta sia IMAP e POP3 usare lo stesso UID per entrambi i protocolli, ma non sono a conoscenza di alcun server che sarebbe effettivamente fare questo. In pratica, è necessario trattare UID POP3 e UID IMAP come valori non correlati.
RFC 1939 (POP3): Il unique-id di un messaggio è una stringa server determinato arbitraria, composto da uno a 70 caratteri nell'intervallo 0x21 a 0x7E, che identifica in modo univoco un messaggio all'interno di un maildrop e che persiste tra le sessioni.
RFC 3501 (IMAP): (identificatore unico (UID) Messaggio attributo è) un valore a 32 bit assegnato a ciascun messaggio, che quando viene utilizzato con il valore identificativo validità univoco (vedi sotto) forma un valore a 64 bit che non devono riferirsi a qualsiasi altro messaggio nella cassetta postale o ogni successiva casella di posta con lo stesso nome per sempre.
Altri suggerimenti
Molto importante IMAP fatto
Questo è quello che ho imparato a giocare con GMail (mi aspetto altri sistemi, fa lo stesso):
- Ha inviato un messaggio alla mia casella di posta
- Ha UID 45
- Spostare il messaggio nella cartella posta indesiderata
- Ora ha UID 5 (perché UID è unico per cassetta)
- Spostare in arrivo
- Ora ha UID 46
- Spostare spazzatura
- Ora ha UID 6
- L'idea...
Ho spostato i messaggi utilizzando il GMail.com UI
Per quanto posso dire UID è utile solo per conoscere gli ultimi messaggi in una cartella.È possibile eseguire il comando di Ricerca("UID 34:*
) per ottenere tutti i messaggi in una cartella con UID 34 o al di sopra.
Ma non iniziare a utilizzare UID come chiave di quel messaggio in un database o vi ritroverete con gonzi.
Penso che sto andando a prendere il tempo ricevuto e l'hash del contenuto del messaggio per ottenere un UID posso mettere effettivamente in un database.