亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

PHP 郵件發(fā)送損壞的標(biāo)頭
P粉979586159
P粉979586159 2023-09-07 10:43:50
0
1
793

我正在努力從 PHP 腳本發(fā)送電子郵件。當(dāng)mail() 函數(shù)被觸發(fā)時(shí),收件者的郵箱由特定服務(wù)(seznam.cz) 託管,並且郵件被下載到郵件用戶端(Mozilla Thunderbird) 並且ESET 防毒軟體會(huì)對(duì)其進(jìn)行檢查,訊息似乎已損壞。

我認(rèn)為,該問題是由防毒軟體在郵件訊息中插入特殊標(biāo)頭並在其後留下空白行所引起的:

...
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
...

我的電子郵件用戶端認(rèn)為該訊息是純文本,並以行 X-PHP-Originating-Script 開頭。訊息的其餘部分包括所有 HTML 標(biāo)記。

這是我用來發(fā)送電子郵件的腳本:

$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);

但是,當(dāng)使用 Laravel 框架時(shí),電子郵件可以正確發(fā)送和顯示。我比較了差異並意識(shí)到 X-PHP-Originating-Script 標(biāo)頭不是由 Laravel 發(fā)送的。

這可能是原因嗎?我該如何解決它?

P粉979586159
P粉979586159

全部回覆(1)
P粉573943755

這可能只是不同行分隔符號(hào)的問題。

直到PHP 7.4 X-PHP-Originating-Script 之後的分隔符號(hào)只是\n (這已更改在PHP 8 中使用 \r\n ,甚至最近在master 中根據(jù)其他因素做出決定)。

由於所有其他標(biāo)頭都是使用 \r\n 連接的,因此防毒軟體在添加標(biāo)頭時(shí)可能會(huì)造成一些混亂。這會(huì)導(dǎo)致雙換行,客戶端將其解釋為正文的開始。

使用顯示所有字元(包括 \n\r)的編輯器查看原始訊息,您可能會(huì)更好地理解它。

解決方案是匹配PHP 版本的行尾,或在所有設(shè)定mail.add_x_header = Off時(shí)刪除時(shí)刪除 X-PHP-Originating-Script 標(biāo)頭> 在php.ini中。

最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板