2011-12-14 17 views
7

Sto recuperando email da Gmail usando PHP e IMAP; tuttavia, alcune e-mail non hanno un messageid. Non tutti i messaggi dovrebbero avere un messageid?IMAP PHP - Le e-mail devono avere un messageid?

Ho bisogno di un ID univoco di riferimento quindi non sono sicuro di come altro tenere traccia delle e-mail senza di esso.

Sto facendo qualcosa di sbagliato?

Per esempio qui è un colpo di testa di posta elettronica ottengo

[date] => Sun, 06 Nov 2011 21:21:56 -0500 
    [subject] => Daylight Saving Time? Chili's Saving Time! 
    [to] => [email protected] 
    [message_id] => 
    [from] => [email protected] 
    [sender] => [email protected] 
    [reply_toaddress] => [email protected] 
    [size] => 14385 
    [msgno] => 156 
    [status] => Unread 

Grazie

risposta

5

Qualsiasi MTA che abbia mai incontrato aggiungerà un ID messaggio se uno non è già presente. Tuttavia, se è necessario tenere traccia dei messaggi o infilarli, sarà necessario impostare uno Message-ID. L'intestazione References e l'intestazione In-Reply-To utilizzano il valore di un precedente Message-ID per correlare i messaggi insieme.

References contiene un elenco di Message-ID valori precedenti nella catena di risposta, e In-Reply-To contiene il Message-ID a cui il messaggio corrente è una risposta diretta.

Si noti che in base alle specifiche RFC-2822, a Message-ID is technically not required. Gli MTA ben educati generalmente includono uno, ma alcuni commentatori di seguito descrivono casi in cui un ID messaggio non era presente, causando errori nei client di messaggistica.

+0

Ma poiché non c'è nulla che lo garantisca, ciò non impedisce a un MTA malizioso o malizioso di utilizzare ID messaggio identici per posta diversa, giusto? Qual è il modo migliore per evitare questa situazione? – Pacerier

+0

@Pacerier se ci si preoccupa che un altro MTA non possa replicare l'ID messaggio del server, è difficile. È possibile creare l'ID del messaggio come hash dell'ora del messaggio, del proprio nome host e di una chiave segreta, il che renderebbe difficile la creazione di un ID messaggio, ma non sono sicuro che si guadagni molto. L'unico metodo efficace per la verifica del mittente nella posta elettronica è la firma e la crittografia PGP. –

+1

Un aggiornamento a questa vecchia domanda: ho sempre creduto che un ID messaggio fosse un "must", ma ho appena scoperto un'e-mail nella mia casella di posta IMAP che non ne ha uno! Ho guardato la fonte grezza. Il mio software di lettura dei messaggi IMAP è andato in crash a causa di ciò, come me ha presupposto che ci sia sempre un ID messaggio. –

5

L'ID messaggio non ha nulla a che fare con IMAP, ma fa parte della posta stesso e specificato in RFC 2822 come "optional" (anche se dice che dovrebbe essere presente):

Sebbene facoltativo, ogni messaggio DOVREBBE avere un campo "ID messaggio:".

Quindi non si sta facendo nulla di male se alcuni messaggi mancano di un ID messaggio. Succede per tutte le mail che il MUA che ha originariamente inviato la posta non ne ha generato uno (che comunque ogni MUA comunemente usato dovrebbe fare).

Per quanto riguarda un ID univoco per l'identificazione di e-mail tramite IMAP, è possibile dare un'occhiata al campo UID descritto in the standard.

Problemi correlati