Maison > Questions et réponses > le corps du texte
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粉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
rn
Étant donné que tous les autres en-têtes sont connectés à l'aide de
n
和 r
Affichez le message original avec un éditeur qui affiche tous les caractères (y compris
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