Mail PHP envoyant des en-têtes corrompus
P粉979586159
P粉979586159 2023-09-07 10:43:50
0
1
623

Je travaille sur l'envoi d'un email à partir d'un script PHP. Lorsque la fonction mail() est déclenchée, que la boîte aux lettres du destinataire est hébergée par un service spécifique (seznam.cz) et que le message est téléchargé sur le client de messagerie (Mozilla Thunderbird) et vérifié par ESET Antivirus, le message semble corrompu.

Je pense que le problème est dû au fait qu'un logiciel antivirus insère des en-têtes spéciaux dans les messages électroniques et laisse des lignes vides après eux :

...
Subject: =?UTF-8?B?Tm92w70gxI1sZW4gd2VidSBBU1AgxIxSIQ==?=
X-EsetId: 37303A298C7FEE69657363

X-PHP-Originating-Script: 80:script.php
MIME-Version: 1.0
Content-type:text/html;charset=UTF-8
...

Mon client de messagerie pense que le message est en texte brut et commence par la ligne X-PHP-Originating-Script. Le reste du message inclut tous les balises HTML.

Voici le script que j'utilise pour envoyer l'e-mail :

$subject = mb_encode_mimeheader('Subject text');
$emailBody = '<!DOCTYPE html>
<html lang="cs">
    ...
</html>';
$emailAltBody = "...";

$headers = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type:text/html;charset=UTF-8" . "\r\n";
$headers .= 'From: <email.address@example.com>' . "\r\n";

$result = mail("email.address@example.com", $subject, $emailBody, $headers);

Cependant, lors de l'utilisation du framework Laravel, les e-mails sont envoyés et affichés correctement. J'ai comparé les différences et réalisé que l'en-tête X-PHP-Originating-Script n'est pas envoyé par Laravel.

Est-ce que cela pourrait être la raison ? Comment puis-je le résoudre?

P粉979586159
P粉979586159

répondre à tous(1)
P粉573943755

Il se peut simplement qu'il s'agisse d'un problème de différents séparateurs de lignes.

Jusqu'à PHP 7.4 le délimiteur après X-PHP-Originating-Script était juste n (cela a changé Utiliser n (这已更改 在 PHP 8 中使用 rn en PHP 8 et encore plus récemment en master

prendre des décisions basées sur d'autres facteurs).

rnÉtant donné que tous les autres en-têtes sont connectés à l'aide de

, un logiciel antivirus peut provoquer une certaine confusion lors de l'ajout des en-têtes. Il en résulte une double nouvelle ligne, qui est interprétée par le client comme le début du corps.

nrAffichez le message original avec un éditeur qui affiche tous les caractères (y compris

) et vous pourrez mieux le comprendre.

mail.add_x_header = Off时删除 X-PHP-Originating-ScriptLa solution est de faire correspondre les fins de ligne de la version PHP, ou de définir tous les

en-têtes > dans php.ini. 🎜
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal