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?
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
prendre des décisions basées sur d'autres facteurs).n
(cela a changé Utilisern
(这已更改 在 PHP 8 中使用rn
en PHP 8 et encore plus récemment en masterrn
Étant donné que tous les autres en-têtes sont connectés à l'aide den
和r
Affichez le message original avec un éditeur qui affiche tous les caractères (y comprismail.add_x_header = Off
时删除X-PHP-Originating-Script
La solution est de faire correspondre les fins de ligne de la version PHP, ou de définir tous les