recherche

Maison  >  Questions et réponses  >  le corps du texte

Mail PHP envoyant des en-têtes corrompus

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粉979586159P粉979586159454 Il y a quelques jours635

répondre à tous(1)je répondrai

  • P粉573943755

    P粉5739437552023-09-08 00:38:50

    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 = OffX-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. 🎜

    répondre
    0
  • Annulerrépondre