作者 邓超

imap

... ... @@ -589,7 +589,7 @@ class Imap {
unset($result[$key]);
continue;
}
$result[$key]['HEADER.FIELDS'] = $this->parseHeader($item['HEADER.FIELDS']);
$result[$key]['HEADER.FIELDS'] = $this->imap_header_parse($item['HEADER.FIELDS']);
// 编码问题
preg_match('/\("charset" "([a-z0-9\-]{3,})"\)/iU',$result[$key]['BODYSTRUCTURE'],$charset);
// 编码
... ... @@ -670,6 +670,56 @@ class Imap {
}
/**
* 其中的一种解法,不知有没有什么bug
* 解析原始 header 头信息
* @param string $header
* @return array
* @author:dc
* @time 2023/6/25 17:48
*/
public function imap_header_parse(string $header){
$newArr = [];
// 分割组成 每一行
foreach (explode("\n",$header) as $item){
if(str_starts_with($item,' ') || str_starts_with($item,"\t")){
$newArr[count($newArr)-1][] = $item;
}else{
$newArr[][] = $item;
}
}
// 新的数组
// 新的数组
foreach ($newArr as $k=>$item){
$item = implode("\n",$item);
$item = explode(':',$item);
// 剔除key的值
$item_str = ltrim(implode(':',$item),$item[0].':');
// 解析编码
$item_str = mb_decode_mimeheader($item_str);
// $key = str_replace('-','_',strtolower($item[0]));
$key = $item[0];
// 可能出现重复的,且值不一样
if(isset($newArr[$key])){
if(is_string($newArr[$key])){
$newArr[$key] = [$newArr[$key]];
}
$newArr[$key][] = $item_str;
}else{
$newArr[$key] = $item_str;
}
unset($newArr[$k]);
}
return $newArr;
}
/**
* 获取邮件内容,包括附件
* @param mixed $data 1,1:10,[1,2,3]
... ...