Ich arbeite daran, eine E-Mail über ein PHP-Skript zu senden. Wenn die mail()
-Funktion ausgel?st wird, das Postfach des Empf?ngers von einem bestimmten Dienst (seznam.cz) gehostet wird und die Nachricht auf den E-Mail-Client (Mozilla Thunderbird) heruntergeladen und von ESET Antivirus überprüft wird, scheint die Nachricht besch?digt zu sein.
Ich glaube, dass das Problem dadurch verursacht wird, dass Antivirensoftware spezielle Header in E-Mail-Nachrichten einfügt und dahinter leere Zeilen hinterl?sst:
... 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 ...
Mein E-Mail-Client geht davon aus, dass die Nachricht reiner Text ist und beginnt mit der Zeile X-PHP-Originating-Script
. Der Rest der Nachricht enth?lt das gesamte HTML-Markup.
Dies ist das Skript, das ich zum Versenden der E-Mail verwende:
$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);
Bei Verwendung des Laravel-Frameworks werden E-Mails jedoch korrekt gesendet und angezeigt. Ich habe die Unterschiede verglichen und festgestellt, dass der X-PHP-Originating-Script
-Header nicht von Laravel gesendet wird.
K?nnte das der Grund sein? Wie kann ich es l?sen?
這可能只是不同行分隔符的問題。
直到 PHP 7.4 X-PHP-Originating-Script 之后的分隔符只是 \n
(這已更改 在 PHP 8 中使用 \r\n
,甚至最近 在 master 中根據(jù)其他因素做出決定)。
由于所有其他標(biāo)頭都是使用 \r\n
連接的,因此防病毒軟件在添加標(biāo)頭時可能會造成一些混亂。這會導(dǎo)致雙換行,客戶端將其解釋為正文的開始。
使用顯示所有字符(包括 \n
和 \r
)的編輯器查看原始消息,您可能會更好地理解它。
解決方案是匹配 PHP 版本的行尾,或者在所有設(shè)置 mail.add_x_header = Off
時刪除 X-PHP-Originating-Script
標(biāo)頭> 在 php.ini 中。