PHP8 邮件函数添加 space 前缀到 headers
PHP8 mail function adding space prefixes to headers
我刚刚从 PHP 7.4 升级到 8.0。所有突然发出的邮件都以 spaces 为自定义 headers 的前缀。
代码如下:
$headers = [
'From: Somebody <somebody@example.com>',
'Content-Type: text/html; charset="UTF-8"',
];
mail('foo@example.com', 'Subject', 'Body', implode("\n", $headers));
升级前收到的消息如下所示:
To: foo@example.com
Subject: Subject
From: Somebody <somebody@example.com>
Content-Type: text/html; charset="UTF-8"
Message-Id: <E1n1vlx-0002C5-FC@hostname>
Body goes here
升级后,相同的代码向接收者发送如下所示的消息:
From: somebody@example.com
X-Google-Original-From: Somebody <somebody@example.com>
Content-Type: text/html; charset="UTF-8"
To: somebody@example.com
Subject: Subject
Message-Id: <E1n20bv-0007st-Eh@hostnme>
Body goes here
Content-Type header 开始添加 space,因此邮件客户端会忽略它。 exim4 没有任何完整传出消息的日志,所以我不确定下一步该去哪里。
我认为 $headers 不应该是数组,只需使用简单的字符串即可。您可以在此处查看示例 #2 https://www.php.net/manual/en/function.mail.php
对内爆使用 \r\n
而不是 \n
-- RFC5321 明确指定 CRLF 作为行终止符。我注意到 Gmail 在您指定的两个 header 行之间添加了这个 X-Google-Original-From
header:
From: somebody@example.com
X-Google-Original-From: Somebody <somebody@example.com>
Content-Type: text/html; charset="UTF-8"
我敢打赌 space 是 Google 试图在你的两个之间插入这一行的产物,但实际上不是你的两个,因为行结尾不正确。
我刚刚从 PHP 7.4 升级到 8.0。所有突然发出的邮件都以 spaces 为自定义 headers 的前缀。
代码如下:
$headers = [
'From: Somebody <somebody@example.com>',
'Content-Type: text/html; charset="UTF-8"',
];
mail('foo@example.com', 'Subject', 'Body', implode("\n", $headers));
升级前收到的消息如下所示:
To: foo@example.com
Subject: Subject
From: Somebody <somebody@example.com>
Content-Type: text/html; charset="UTF-8"
Message-Id: <E1n1vlx-0002C5-FC@hostname>
Body goes here
升级后,相同的代码向接收者发送如下所示的消息:
From: somebody@example.com
X-Google-Original-From: Somebody <somebody@example.com>
Content-Type: text/html; charset="UTF-8"
To: somebody@example.com
Subject: Subject
Message-Id: <E1n20bv-0007st-Eh@hostnme>
Body goes here
Content-Type header 开始添加 space,因此邮件客户端会忽略它。 exim4 没有任何完整传出消息的日志,所以我不确定下一步该去哪里。
我认为 $headers 不应该是数组,只需使用简单的字符串即可。您可以在此处查看示例 #2 https://www.php.net/manual/en/function.mail.php
对内爆使用 \r\n
而不是 \n
-- RFC5321 明确指定 CRLF 作为行终止符。我注意到 Gmail 在您指定的两个 header 行之间添加了这个 X-Google-Original-From
header:
From: somebody@example.com
X-Google-Original-From: Somebody <somebody@example.com>
Content-Type: text/html; charset="UTF-8"
我敢打赌 space 是 Google 试图在你的两个之间插入这一行的产物,但实际上不是你的两个,因为行结尾不正确。