作者 邓超

1

@@ -579,11 +579,16 @@ class Imap { @@ -579,11 +579,16 @@ class Imap {
579 preg_match('/\("charset" "([a-z0-9\-]{3,})"\)/iU',$result[$key]['BODYSTRUCTURE'],$charset); 579 preg_match('/\("charset" "([a-z0-9\-]{3,})"\)/iU',$result[$key]['BODYSTRUCTURE'],$charset);
580 // 编码 580 // 编码
581 if(!empty($charset[1])){ 581 if(!empty($charset[1])){
582 -// $encode = mb_detect_encoding($str, array("ASCII",'UTF-8',"GB2312","GBK",'BIG5'));  
583 - $result[$key]['HEADER.FIELDS']['Subject'] = mb_convert_encoding($result[$key]['HEADER.FIELDS']['Subject'], 'UTF-8', $charset[1]);  
584 - $result[$key]['HEADER.FIELDS']['From'] = mb_convert_encoding($result[$key]['HEADER.FIELDS']['From'], 'UTF-8', $charset[1]);  
585 - $result[$key]['HEADER.FIELDS']['To'] = mb_convert_encoding($result[$key]['HEADER.FIELDS']['To'], 'UTF-8', $charset[1]); 582 + $charset = [$charset[1]];
  583 + }else{
  584 + $charset = [];
586 } 585 }
  586 +
  587 +
  588 + $result[$key]['HEADER.FIELDS']['Subject'] = MailFun::mb_coding($result[$key]['HEADER.FIELDS']['Subject'],$charset);
  589 + $result[$key]['HEADER.FIELDS']['From'] = MailFun::mb_coding($result[$key]['HEADER.FIELDS']['From'],$charset);
  590 + $result[$key]['HEADER.FIELDS']['To'] = MailFun::mb_coding($result[$key]['HEADER.FIELDS']['To'],$charset);
  591 +
587 } 592 }
588 593
589 return $result; 594 return $result;
@@ -200,8 +200,6 @@ class Mail { @@ -200,8 +200,6 @@ class Mail {
200 } 200 }
201 try { 201 try {
202 202
203 - $file_header = $result['BODYSTRUCTURE'];  
204 -  
205 // 没有收件人 203 // 没有收件人
206 if(!empty($header['To'])){ 204 if(!empty($header['To'])){
207 $header['To'] = MailFun::toOrFrom($header['To']); 205 $header['To'] = MailFun::toOrFrom($header['To']);
@@ -233,7 +231,7 @@ class Mail { @@ -233,7 +231,7 @@ class Mail {
233 'folder_id' => $folder_id, 231 'folder_id' => $folder_id,
234 'email_id' => $email_id, 232 'email_id' => $email_id,
235 'uuid' => md5($email_id.$folder_id.$result['UID']), 233 'uuid' => md5($email_id.$folder_id.$result['UID']),
236 - 'is_file' => MailFun::isFile($file_header[$key]['BODYSTRUCTURE']??'') //是否附件 234 + 'is_file' => MailFun::isFile($result['BODYSTRUCTURE']??'') //是否附件
237 ]; 235 ];
238 }catch (\Throwable $e){ 236 }catch (\Throwable $e){
239 logs( 237 logs(
@@ -25,7 +25,20 @@ class MailFun { @@ -25,7 +25,20 @@ class MailFun {
25 return \json_encode($data,$option); 25 return \json_encode($data,$option);
26 } 26 }
27 27
28 - 28 + /**
  29 + * @param $str
  30 + * @param string $encode
  31 + * @return string
  32 + * @author:dc
  33 + * @time 2023/3/27 13:55
  34 + */
  35 + public static function mb_coding(string $str,array $appcode=[]){
  36 + $encode = mb_detect_encoding($str, array_merge(array("ASCII",'UTF-8',"GB2312","GBK",'BIG5'),$appcode));
  37 + if($encode){
  38 + return mb_convert_encoding($str, 'UTF-8', $encode);
  39 + }
  40 + return $str;
  41 + }
29 42
30 43
31 /** 44 /**
@@ -42,8 +55,8 @@ class MailFun { @@ -42,8 +55,8 @@ class MailFun {
42 // } 55 // }
43 // } 56 // }
44 // return 0; 57 // return 0;
45 - $json = is_array($BODYSTRUCTURE) ? json_encode($BODYSTRUCTURE) : $BODYSTRUCTURE;  
46 - return strpos($json,'"attachment"')!==false; 58 + $json = is_array($BODYSTRUCTURE) ? implode(' ',$BODYSTRUCTURE) : $BODYSTRUCTURE;
  59 + return str_contains(mb_strtolower($json), '"attachment"');
47 } 60 }
48 61
49 62