PHP-Mail sendet beschädigte Header
P粉979586159
P粉979586159 2023-09-07 10:43:50
0
1
621

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?

P粉979586159
P粉979586159

Antworte allen(1)
P粉573943755

这可能只是不同行分隔符的问题。

直到 PHP 7.4 X-PHP-Originating-Script 之后的分隔符只是 \n (这已更改 在 PHP 8 中使用 \r\n ,甚至最近 在 master 中根据其他因素做出决定)。

由于所有其他标头都是使用 \r\n 连接的,因此防病毒软件在添加标头时可能会造成一些混乱。这会导致双换行,客户端将其解释为正文的开始。

使用显示所有字符(包括 \n\r)的编辑器查看原始消息,您可能会更好地理解它。

解决方案是匹配 PHP 版本的行尾,或者在所有设置 mail.add_x_header = Off时删除 X-PHP-Originating-Script 标头> 在 php.ini 中。

Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage