正则表达式从 php imap 的电子邮件正文中提取 base64 编码部分

Regex to extract base64 encoded parts from email body from php imap

我在下面有以下内容,它是一个电子邮件正文,我只想从 PHP 中提取 base64 编码的文件。我在想我可以使用正则表达式来提取 base64 部分,这样我就可以解码它们,例如

preg_match('/Content-Transfer-Encoding: base64\s(.*)\sContent-Type:/', $message['body'], $matches);

echo base64_decode($matches[0]);

但是我没有得到任何匹配项,因为我认为我的正则表达式不起作用。理想情况下,我想捕获在 'Content-Transfer-Encoding:' 之后开始并以另一个 'Content-Type:' 部分开始结束的每个部分。我的问题是,如何对所有 base64 部分进行正则表达式?例如

Content-Transfer-Encoding:(将此部分捕获为匹配项)内容类型:

以下是消息的一部分,完整的字符串可以在这里找到:

http://pastebin.com/A5XXnSaT

--_004_D16F6E4A2986D34F9D752E3564EAC46F359618EFAPP1197ghakfplc_ Content-Type: multipart/alternative; boundary="_000_D16F6E4A2986D34F9D752E3564EAC46F359618EFAPP1197ghakfplc_" --_000_D16F6E4A2986D34F9D752E3564EAC46F359618EFAPP1197ghakfplc_ Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 SGksIFBsZWFzZSBmaW5kIHRoZSBhdHRhY2hlZCBQRlMgZXJyb3IgUmVwb3J0DQoKLS0tLS0tLS0t LQpCJlEgcGxjClJlZ2lzdGVyZWQgT2ZmaWNlOiBCJlEgSG91c2UsIENoZXN0bnV0IEF2ZW51ZSwg Q2hhbmRsZXJzIEZvcmQsIEVhc3RsZWlnaCwgSGFtcHNoaXJlLCBTTzUzIDNMRQpCdXkgT25saW5l IE5PVyBhdCB3d3cuZGl5LmNvbSBvciBmb2xsb3cgQiZRIG9uIEZhY2Vib29rIHd3dy5mYWNlYm9v...

输出6个解码部分

$result=[];
preg_match_all('/Content-Transfer-Encoding: base64\s(.*?)\s--/', $message['body'], $matches);

foreach ($matches[1] as $base) {
    $result[] = base64_decode($base);
}

print_r($result);

示例:https://eval.in/438478