2014-04-25 3 views
5

Ich speichere meine Mailbox-Elemente in einer MySQL-Datenbank (um schnelle Suchen in meinem Intranet durchzuführen, da imap_search' zu langsam ist).Warum imap uid ist nicht einzigartig? auf verschiedenen Ordnern?

Ich verbinde mich mit dem Server und Ordner und durchläuft Nachrichten.

vereinfacht Code:

$numMsg = imap_num_msg($conn); 

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

und ich so etwas wie dieses:

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

die völlig falsch ist !!!

uid soll nicht eindeutig sein?

Ich erhalte diese UIDs in 5 Unterordnern, die ich habe und auch in Gesendete Objekte auf dem Posteingang ich uids rechts (msg_num:5 - uid:1503msg_num:6 - uid:1504msg_num:7 - uid:1506)

+0

Dies könnte etwas Licht werfen: http://stackoverflow.com/questions/14894624/getting-unique-email-id-with-imap-in-php –

Antwort

11

Rechts, die UID pro Ordner nur einzigartig ist. Die vollständige dauerhafte eindeutige ID einer Nachricht ist ein Tupel des Ordnernamens, der Ordner UIDVALIDITY und der Nachrichten-UID. Dieses Tupel wird sich auf einem korrekt implementierten Server immer nur auf eine Nachricht beziehen.

Zum Beispiel: (SENT, 1, 100) Zeigt eine Nachricht mit der ID 100 aus der ersten Inkarnation des gesendeten Ordners an. UIDVALIDITYs sind in der Regel zehnstellige Zahlen und sollen sich ändern, wenn der Ordner gelöscht und neu erstellt wird oder von der Serversoftware neu indiziert/neu erstellt werden muss.

+0

danke Max, ich dachte, dass UID einzigartig in allen Mailbox war , Ich benutzte UID, um zu sehen, ob die E-Mail bereits in der Mysql DB war, aber jetzt werde ich mit anderen Werten überprüfen, jetzt prüfen, ob die E-Mail in der Datenbank DATE, SUBJECT, FROM-Adresse und TO-Adresse statt nur UID vergleicht. –

+1

Das ist immer noch gefährlich. Sie sollten den Ordnernamen und die UID-Gültigkeit als zusätzliche Schlüssel angeben. Dann wird es völlig einzigartig sein. – Max

+0

Ich bin mir nicht sicher über die Verwendung des Ordnernamens, da die E-Mail den Ordner ändern kann und immer noch die gleiche E-Mail ist oder nicht? Mit UID meinst du die regelmäßige UID? oder UID-Gültigkeit ist eine andere Sache? –