Información útil del encabezado de IMAP que no aparece

Estoy usando funciones estándar de IMAP para recibir correos electrónicos en PHP. Necesito hacer un seguimiento de la Message-ID del Message-ID (y las References y In-Reply-To ) para cada mensaje para crear subprocesos. Una vez que se implemente este sistema, quiero que los usuarios puedan responder a los mensajes en su cliente de correo para agregar un mensaje a un hilo, pero en mi interfaz web, las respuestas no se pueden adjuntar a la publicación original porque no tengo una identificación en In-Reply-To de cualquier encabezado de correo electrónico. In-Reply-To identificación en la respuesta para adjuntar su respuesta a la notificación que les envié de una nueva publicación, pero no puedo porque no puedo obtener las identificaciones. Si tuviera un encabezado In-Reply-To , los mensajes podrían agruparse, ya que hay un hilo de ID que los conecta.

Además, quiero poder responder a cualquier mensaje que el usuario envíe a la dirección de correo electrónico del servidor si hubo un error con su envío o algo así, en cuyo caso necesitaré el Message-ID de mensaje de su mensaje para que Puedo hacer que el ID de respuesta en el mensaje que envío en respuesta.

No puedo obtener valores para Message-ID , ni In-Reply-To , aunque en realidad tengan valores. (Vaya a cualquier mensaje en Gmail, haga clic en el menú desplegable junto al botón de respuesta, haga clic en “Mostrar original” y verá que toda la información del encabezado que falta cuando llamo a las funciones IMAP está realmente ahí, como aunque Gmail no quiere dar esa información a los servidores IMAP.)

He intentado una variedad de llamadas que supuestamente obtienen la información del encabezado ( imap_headerinfo , imap_fetchheader , imap_fetch_overview ), pero todas devuelven la matriz de valores dispersos para la información del encabezado que no necesito. Despues de ejecutar

 $this->mbox = imap_open('{imap.gmail.com:993/imap/ssl}', $email, $password); 

Solo puedo obtener unos pocos valores útiles del encabezado con cualquiera de estas llamadas:

 imap_header($this->getImapStream(), "1"); imap_fetch_overview($this->getImapStream(), "1"); imap_fetchheader($this->getImapStream(), "1"); 

Puedo ver cosas como Subject , To , Reply-To , y otros valores de encabezado, y todos son precisos, pero Message-ID , las References , In-Reply-To , y otra información valiosa del encabezado está ausente en gran medida (más bien, la matriz Los valores que los representan están vacíos en todos los casos).

Casi puedo garantizar que el problema no está en el código en sí, ya que puedo ver algunos valores en los encabezados y puedo recuperar con éxito los cuerpos de los mensajes; es simplemente como si Google está filtrando la información del encabezado que puedo ver.

Puede notar que tengo exactamente la misma pregunta que en esta página , pero me sugirieron que formule mi propia pregunta, así que eso es lo que hice.


EDITAR

Si alguien me puede dar una manera de responder a los mensajes de mi servidor sin tener que recuperar el Message-ID de mensaje del mensaje al que estoy respondiendo, sería igualmente asombroso.


Editar 2

Enumeré el Message-ID de mensaje de cada mensaje en mi gran bandeja de entrada y, por lo que puedo ver, se muestra aproximadamente el 40% de los ID. Si vuelvo a ejecutar la misma prueba, los mismos mensajes conservarán sus Message-ID . Estoy buscando un patrón entre los mensajes que muestran el Message-ID pero hay pruebas muy sólidas de que no hay un patrón entre los tipos de mensajes.

Cada mensaje, en realidad, tiene un Message-ID (y lo he verificado incluso para los mensajes cuyos ID no aparecen con las consultas de IMAP), pero las funciones de IMAP solo revelan el ID de algunos de los mensajes.

Resulta que los encabezados no estaban, de hecho, desaparecidos. Cuando estaba print_r estas llamadas:

 imap_header($this->getImapStream(), "1"); imap_fetch_overview($this->getImapStream(), "1"); imap_fetchheader($this->getImapStream(), "1"); 

Olvidé generar caracteres de escape en ellos con htmlspecialchars , lo que importa porque Message-ID parecen a algo como o algo parecido, y mi navegador pensó “Oye, esa es una etiqueta rara, pero ¡Lo trataré como a uno!

Probablemente, su función que obtiene los encabezados para el mensaje es enviar una “lista limitante” cuando los solicita, o está utilizando el protocolo IMAP “ENVELOPE”, por lo que no tiene que buscar encabezados inútiles como Received y similares. Garantizo que están allí para ser recuperados, pero sospecho que las funciones de PHP no los están buscando por alguna razón. GMail solo pasa a través del mensaje MIME como lo recibió.

No creo que la información de subprocesos esté incluida en el SOBRE.

¿Eres capaz de hacer un seguimiento de protocolo? Si es así, puedo ayudarte a diagnosticar lo que está pasando.