我尝试使用PHP lib AS2Secure接收AS2 MDN。消息到达并解码就好了,但是当响应消失时它会剥离主" multipart / signed"来自Content-Type
的价值。
例如,类似这样的东西应该在主标题中指定一个多部分消息:
Content-Type: multipart/signed; boundary="----=_Part_8f23d0b4-8a42-4946-9928-4d12d9f7fc66.63"; protocol="application/pkcs7-signature"; micalg=SHA1
但是,当多部分消息的响应消失时,我只在主标题中看到这一点:
Content-Type: text/html; charset=UTF-8
这会在远程服务器中触发错误,该错误要求邮件将其内容类型指定为多部分。
我在AS2MDN.php
中跟踪了将多部分内容类型剥离到此代码:
// TODO : replace with futur AS2MimePart to separate content from header
if (strpos($content, "\n\n") !== false) $content = substr($content, strpos($content, "\n\n") + 2);
如果我删除此代码,则会在正文中显示缺少的Content-Type: multipart/signed
行,但Content-Type: text/html
仍显示在标题中。
有什么想法吗?
答案 0 :(得分:0)
这是由PHP Laravel框架(处理应用程序的路由)在输出期间覆盖标题引起的。
在handle()
中的AS2server.php
方法中更改此代码:
ob_end_clean();
// send headers
foreach ($mdn->getHeaders() as $key => $value) {
$header = str_replace(["\r", "\n", "\r\n"], '', $key . ': ' . $value);
header($header);
}
// output MDN
echo $mdn->getContent();
...对这个Laravel友好代码:
$headers = [];
foreach ($mdn->getHeaders() as $key => $value) {
$headers[str_replace(["\r", "\n", "\r\n"], '', $key)] = str_replace(["\r", "\n", "\r\n"], '', $value);
}
return \Response::make($mdn->getContent(), 200, $headers); // Use native Laravel response.
......解决了这个问题!