2011-12-14 19 views
7

Estoy recuperando correos electrónicos de Gmail usando PHP e IMAP; Sin embargo, algunos correos electrónicos no tienen un mensaje de mensaje. ¿No se supone que todos los mensajes tienen un mensaje de mensaje?PHP IMAP - ¿Los correos electrónicos deben tener un mensaje de mensaje?

Necesito una identificación única para la referencia, así que no estoy seguro de qué otra manera para realizar un seguimiento de los correos electrónicos sin ella.

¿Estoy haciendo algo mal?

Por ejemplo, aquí es un encabezado de correo electrónico que consigo

[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 

Gracias

Respuesta

5

Cualquier MTA que haya encontrado añadirá un ID de mensaje si uno no está presente. Sin embargo, si necesita realizar un seguimiento de los mensajes o enhebrarlos, tendrá que configurar un Message-ID. El encabezado References y el encabezado In-Reply-To usan el valor de un Message-ID anterior para relacionar los mensajes entre sí.

References contiene una lista de Message-ID valores anteriores en la cadena de respuesta, y In-Reply-To contiene el Message-ID a la que el mensaje actual es una respuesta directa.

Tenga en cuenta que de acuerdo con la especificación RFC-2822, a Message-ID is technically not required. Los MTA que se comportan bien generalmente incluyen uno, pero algunos comentadores a continuación describen instancias donde no había un ID de mensaje, lo que causaba fallas en los clientes de mensajería.

+0

Pero como no hay nada que lo garantice, esto no impide que un MTA con errores/maliciosos use identificaciones de mensajes idénticas para diferentes correos, ¿verdad? ¿Cuál es la mejor manera de protegerse contra esta situación? – Pacerier

+0

@Pacerier si su preocupación es asegurarse de que otro MTA no pueda replicar el Message-ID de su servidor, eso es difícil. Podría crear el ID del mensaje como un hash de la hora del mensaje, su nombre de host y una clave secreta, lo que dificultaría la creación de un ID de mensaje, pero no estoy seguro de que gane mucho. El único método sólido de verificación del remitente en el correo electrónico es la firma y el cifrado de PGP. –

+1

Una actualización de esta vieja pregunta: siempre he creído que un ID de mensaje es "obligatorio", ¡pero acabo de descubrir un correo electrónico en mi bandeja de entrada IMAP que no tiene uno! Miré la fuente sin procesar. Mi software de lectura de mensaje IMAP colapsó debido a esto, como a mí, asumió que siempre hay un ID de mensaje. –

5

El ID de mensaje no tiene nada que ver con IMAP, pero es parte del correo en sí y especificados en RFC 2822 como "opcional" (aunque dice que debería estar presente):

Aunque es opcional, cada mensaje DEBE tener un campo "Message-ID:".

De modo que no está haciendo nada incorrecto si algunos correos electrónicos carecen de un ID de mensaje. Sucede para todos los correos que el MUA que originalmente envió el correo no generó uno (que sin embargo todos los MUA de uso común deberían hacer).

En cuanto a una identificación única para identificar correos electrónicos a través de IMAP, es posible que desee echar un vistazo al campo UID que se describe in the standard.

Cuestiones relacionadas