作者 邓超

qq邮箱有tm毛病

@@ -25,16 +25,43 @@ class Header{ @@ -25,16 +25,43 @@ class Header{
25 protected string $raw_header; 25 protected string $raw_header;
26 26
27 /** 27 /**
  28 + * header消息体里面带内容的 qq的
  29 + * @var string|mixed
  30 + */
  31 + protected string $raw_body;
  32 +
  33 + /**
28 * Header constructor. 34 * Header constructor.
29 * @param string $raw_header 35 * @param string $raw_header
30 */ 36 */
31 public function __construct(string $raw_header) 37 public function __construct(string $raw_header)
32 { 38 {
33 - $this->raw_header = $raw_header; 39 + $raw_header = explode("\r\n\r\n",trim($raw_header));
  40 +
  41 + $this->raw_header = $raw_header[0];
  42 + // qq的会把退信 内容以header形式返回
  43 + $this->raw_body = $raw_header[1]??'';
34 44
35 $this->rfc822_parse_headers(); 45 $this->rfc822_parse_headers();
36 } 46 }
37 47
  48 + /**
  49 + * qq邮箱会这么干
  50 + * 头信息里面的内容消息体
  51 + * @return false|Body
  52 + * @author:dc
  53 + * @time 2025/1/10 11:01
  54 + */
  55 + public function body(){
  56 + if($this->raw_body){
  57 + if(!($this->raw_body instanceof Body)){
  58 + $this->raw_body = new Body($this->raw_body,$this);
  59 + }
  60 + return $this->raw_body;
  61 + }
  62 + return false;
  63 + }
  64 +
38 65
39 /** 66 /**
40 * @param string $name 67 * @param string $name
@@ -415,13 +415,21 @@ class SyncMail { @@ -415,13 +415,21 @@ class SyncMail {
415 $this->db->update(listsSql::$table,$data,dbWhere(['id'=> $id])); 415 $this->db->update(listsSql::$table,$data,dbWhere(['id'=> $id]));
416 } 416 }
417 417
  418 + //TODO 如果header 头信息里面有2段数据 第二段就作为内容解析
  419 + if($item->header->body()){
  420 + $parseBody = $item->header->body();
  421 + }elseif($isBody && $item->body->getRaw()){
  422 + $parseBody = $item->body->getRaw();
  423 + }else{
  424 + $parseBody = false;
  425 + }
418 426
419 // 是否同步body内容 427 // 是否同步body内容
420 - if($isBody && $item->body->getRaw()){ 428 + if($parseBody){
421 // 记录邮件体 源文件 429 // 记录邮件体 源文件
422 Log::put( 430 Log::put(
423 ROOT_PATH.'/eml/'.$this->email['email']."/".$item->getFolderName().'/'.$item->uid.'.eml', 431 ROOT_PATH.'/eml/'.$this->email['email']."/".$item->getFolderName().'/'.$item->uid.'.eml',
424 - $item->header->getRaw()."\r\n\r\n".$item->body->getRaw() 432 + $item->header->getRaw()."\r\n\r\n".$parseBody->getRaw()
425 ); 433 );
426 434
427 $body = [ 435 $body = [
@@ -431,14 +439,14 @@ class SyncMail { @@ -431,14 +439,14 @@ class SyncMail {
431 439
432 440
433 $body['text_html'][] = [ 441 $body['text_html'][] = [
434 - 'body' => base64_encode($item->getBody()->getHtml() ? : $item->getBody()->getText()),  
435 - 'type' => $item->getBody()->getHtml()?'text/html':'text/plain', 442 + 'body' => base64_encode($parseBody->getHtml() ? : $parseBody->getText()),
  443 + 'type' => $parseBody->getHtml()?'text/html':'text/plain',
436 'charset' => 'utf-8', 444 'charset' => 'utf-8',
437 'encode' => 'base64', 445 'encode' => 'base64',
438 ]; 446 ];
439 447
440 // 处理附件 448 // 处理附件
441 - foreach ($item->getBody()->getAttachment() as $itemBody){ 449 + foreach ($parseBody->getAttachment() as $itemBody){
442 $tmp = [ 450 $tmp = [
443 'body' => '', 451 'body' => '',
444 'type' => $itemBody->getFileType(), 452 'type' => $itemBody->getFileType(),
@@ -473,7 +481,7 @@ class SyncMail { @@ -473,7 +481,7 @@ class SyncMail {
473 // 更新描述 481 // 更新描述
474 $this->db->update(listsSql::$table,[ 482 $this->db->update(listsSql::$table,[
475 'description'=> 483 'description'=>
476 - Fun::mb_convert_encoding(mb_substr($item->getBody()->getText(),0,150),'utf-8') 484 + Fun::mb_convert_encoding(mb_substr($parseBody->getText(),0,150),'utf-8')
477 ],dbWhere(['id'=> $id])); 485 ],dbWhere(['id'=> $id]));
478 486
479 } 487 }