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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top