作者 邓超

imap

@@ -589,7 +589,7 @@ class Imap { @@ -589,7 +589,7 @@ class Imap {
589 unset($result[$key]); 589 unset($result[$key]);
590 continue; 590 continue;
591 } 591 }
592 - $result[$key]['HEADER.FIELDS'] = $this->parseHeader($item['HEADER.FIELDS']); 592 + $result[$key]['HEADER.FIELDS'] = $this->imap_header_parse($item['HEADER.FIELDS']);
593 // 编码问题 593 // 编码问题
594 preg_match('/\("charset" "([a-z0-9\-]{3,})"\)/iU',$result[$key]['BODYSTRUCTURE'],$charset); 594 preg_match('/\("charset" "([a-z0-9\-]{3,})"\)/iU',$result[$key]['BODYSTRUCTURE'],$charset);
595 // 编码 595 // 编码
@@ -670,6 +670,56 @@ class Imap { @@ -670,6 +670,56 @@ class Imap {
670 } 670 }
671 671
672 672
  673 +
  674 + /**
  675 + * 其中的一种解法,不知有没有什么bug
  676 + * 解析原始 header 头信息
  677 + * @param string $header
  678 + * @return array
  679 + * @author:dc
  680 + * @time 2023/6/25 17:48
  681 + */
  682 + public function imap_header_parse(string $header){
  683 + $newArr = [];
  684 + // 分割组成 每一行
  685 + foreach (explode("\n",$header) as $item){
  686 + if(str_starts_with($item,' ') || str_starts_with($item,"\t")){
  687 + $newArr[count($newArr)-1][] = $item;
  688 + }else{
  689 + $newArr[][] = $item;
  690 + }
  691 + }
  692 + // 新的数组
  693 + // 新的数组
  694 + foreach ($newArr as $k=>$item){
  695 + $item = implode("\n",$item);
  696 + $item = explode(':',$item);
  697 + // 剔除key的值
  698 + $item_str = ltrim(implode(':',$item),$item[0].':');
  699 + // 解析编码
  700 + $item_str = mb_decode_mimeheader($item_str);
  701 +
  702 +// $key = str_replace('-','_',strtolower($item[0]));
  703 + $key = $item[0];
  704 +
  705 + // 可能出现重复的,且值不一样
  706 + if(isset($newArr[$key])){
  707 + if(is_string($newArr[$key])){
  708 + $newArr[$key] = [$newArr[$key]];
  709 + }
  710 + $newArr[$key][] = $item_str;
  711 + }else{
  712 + $newArr[$key] = $item_str;
  713 + }
  714 +
  715 + unset($newArr[$k]);
  716 + }
  717 +
  718 + return $newArr;
  719 + }
  720 +
  721 +
  722 +
673 /** 723 /**
674 * 获取邮件内容,包括附件 724 * 获取邮件内容,包括附件
675 * @param mixed $data 1,1:10,[1,2,3] 725 * @param mixed $data 1,1:10,[1,2,3]