Figured it out, the array below returns all headers, posting for others...
[edit] Updated so that headers that may appear more than once are checked and an array with their values are added. The $unlimited
array is sampled from https://www.rfc-editor.org/rfc/rfc5322#section-3.6.[/edit]
<?php
$th = imap_fetchheader($mbox,$cms->page2);
$th = trim($th);
$th = str_ireplace("\r","\n",$th);
$th = str_ireplace("\n\n","\n",$th);
$p0 = explode("\n",$th);
$current = '';
$unlimited = array('comments','keywords','optional-field','resent-bcc','resent-cc','resent-date','resent-from','resent-msg-id','resent-sender','resent-to','trace');
$headers = array();
foreach ($p0 as $k1)
{
$k1 = rtrim($k1);
$a = $k1;
$b = trim($k1);
if ($a!==$b)
{
$p1 = trim($k1);
if (in_array($current,$unlimited)) {array_push($headers[strtolower($current)],$p1);}
else {$headers[strtolower($current)] .= $p1;}
}
else if (stristr($k1,':'))
{
$p1 = explode(':',$k1,2);
if (in_array(strtolower($p1[0]),$unlimited))
{
if (!isset($headers[strtolower($p1[0])])) {$headers[strtolower($p1[0])] = array($p1[1]);}
else {array_push($headers[strtolower($current)],$p1[1]);}
}
else
{
if (!isset($headers[strtolower($p1[0])])) {$headers[strtolower($p1[0])] = $p1[1];}
else {$headers[strtolower($p1[0])] .= $p1[1];}
}
$current = $p1[0];
}
}
ksort($headers);//Mainly for testing purposes, remove this afterwards.
echo '<div><pre>';
$a = print_r($headers,1);
echo htmlspecialchars($a).'</pre></div>';
?>