es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Función de correo PHP8 añadiendo prefijos de espacios a encabezados

Acabo de actualizar de PHP 7.4 a 8.0. De repente, los correos salientes están recibiendo espacios antes de los encabezados personalizados.
Aquí está el código:

$headers = [
    'From: Somebody <somebody@example.com>',
    'Content-Type: text/html; charset="UTF-8"',
];
mail('foo@example.com', 'Subject', 'Body', implode("\n", $headers));

Un mensaje que llegó antes de la actualización se veía así:

To: foo@example.com
Subject: Subject
From: Somebody somebody@example.com
Content-Type: text/html; charset=”UTF-8″
Message-Id: <E1n1vlx-0002C5-FC@hostname>

Body goes here

Después de la actualización, el mismo código envía un mensaje que se ve así para el receptor:

From: somebody@example.com
X-Google-Original-From: Somebody <somebody@example.com>
 Content-Type: text/html; charset="UTF-8"
To: somebody@example.com
Subject: Subject
Message-Id: <E1n20bv-0007st-Eh@hostnme>

Body goes here

El encabezado Content-Type está recibiendo un espacio agregado al principio y, por lo tanto, los clientes de correo lo ignoran. Exim4 no tiene ningún registro del mensaje completo saliente, por lo que no estoy seguro de qué hacer a continuación.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Solución de problemas de encabezados personalizados en el correo electrónico de PHP 8.0

    Si recientemente ha actualizado de PHP 7.4 a 8.0 y está experimentando problemas con los encabezados personalizados en los correos electrónicos salientes, donde los encabezados tienen espacios agregados antes, no está solo. La solución a este problema radica en comprender cómo PHP 8.0 maneja los encabezados y en qué cambios debe realizar en su código.

    Comprensión del problema

    El problema surge debido al manejo incorrecto de los encabezados personalizados en PHP 8.0, que agrega un espacio antes de los valores del encabezado. Como resultado, el cliente de correo electrónico, como Gmail, ignora el encabezado y muestra solo los encabezados predeterminados.

    Solución del problema

    Para solucionar este problema, debe modificar su código envolviendo el encabezado con la función trim().

    $headers = [
        trim('From: Somebody <somebody@example.com>'),
        trim('Content-Type: text/html; charset="UTF-8"'),
    ];
    mail('foo@example.com', 'Asunto', 'Cuerpo', implode("\n", $headers));
    

    Conclusión

    Si está enfrentando problemas con los encabezados personalizados en los correos electrónicos salientes después de actualizar a PHP 8.0, la solución es simplemente recortar los valores del encabezado. Puede hacer esto modificando su código como se muestra arriba.

Comments are closed.