2014-04-25 18 views
5

Sto salvando gli elementi della mia casella di posta su un database mysql (per eseguire ricerche veloci nella mia intranet, dal momento che imap_search' è troppo lento).Perché imap uid non è unico? su diverse cartelle?

Mi collego al server e alla cartella e iterando attraverso i messaggi.

codice semplificato:

$numMsg = imap_num_msg($conn); 

for($i=1;$i<=$numMsg;$i++){ 
    $uid = imap_uid($conn,$i); 
    echo("msg_num:".$i." - uid:".$uid); 
} 

e ottengo qualcosa di simile:

msg_num: 5 - uid: 5msg_num: 6 - uid: 6msg_num: 7 - uid: 7msg_num: 8 - uid : 8msg_num: 9 - uid: 9msg_num: 10 - uid: 10msg_num: 11 - uid: 11msg_num: 12 - uid: 12

che è totalmente sbagliato !!!

uid non dovrebbe essere unico?

ottengo questo UID in 5 sotto-cartelle che ho e anche in Posta inviata, in Posta in arrivo ottengo uid destra (msg_num:5 - uid:1503msg_num:6 - uid:1504msg_num:7 - uid:1506)

+0

Questo potrebbe far luce: http://stackoverflow.com/questions/14894624/getting-unique-email-id-with-imap-in-php –

risposta

11

destro, l'UID è unico solo per cartella. L'ID univoco persistente completo di un messaggio è una tupla del nome della cartella, le UIDVALIDITY delle cartelle e l'UID dei messaggi. Quella tupla, su un server correttamente implementato, farà sempre riferimento solo a un messaggio.

Ad esempio: (INVIATO, 1, 100) Indica il messaggio con ID 100 dalla prima incarnazione della cartella inviata. Le UIDVALIDITY tendono ad essere di circa 10 cifre e si suppone che cambino se la cartella viene cancellata e ricreata o deve essere reindirizzata/rigenerata dal software del server.

+0

grazie Max, ho pensato che l'UID fosse unico in tutte le caselle di posta , Stavo usando UID per vedere se l'email era già nel DB mysql, ma ora controllerò con altri valori, ora controllando se l'email è nel DB confrontando DATE, SUBJECT, indirizzo FROM e indirizzo TO invece di UID. –

+1

Questo è ancora pericoloso. Dovresti includere il nome della cartella e la validità UID come chiavi extra. Allora sarà completamente unico. – Max

+0

Non sono sicuro di usare il nome della cartella, dato che l'e-mail potrebbe cambiare cartella ed essere sempre la stessa e-mail, o no? da intendevi il normale uid? o la validità UID è un'altra cosa? –