作者 邓超

qq邮箱有tm毛病

... ... @@ -25,16 +25,43 @@ class Header{
protected string $raw_header;
/**
* header消息体里面带内容的 qq的
* @var string|mixed
*/
protected string $raw_body;
/**
* Header constructor.
* @param string $raw_header
*/
public function __construct(string $raw_header)
{
$this->raw_header = $raw_header;
$raw_header = explode("\r\n\r\n",trim($raw_header));
$this->raw_header = $raw_header[0];
// qq的会把退信 内容以header形式返回
$this->raw_body = $raw_header[1]??'';
$this->rfc822_parse_headers();
}
/**
* qq邮箱会这么干
* 头信息里面的内容消息体
* @return false|Body
* @author:dc
* @time 2025/1/10 11:01
*/
public function body(){
if($this->raw_body){
if(!($this->raw_body instanceof Body)){
$this->raw_body = new Body($this->raw_body,$this);
}
return $this->raw_body;
}
return false;
}
/**
* @param string $name
... ...
... ... @@ -415,13 +415,21 @@ class SyncMail {
$this->db->update(listsSql::$table,$data,dbWhere(['id'=> $id]));
}
//TODO 如果header 头信息里面有2段数据 第二段就作为内容解析
if($item->header->body()){
$parseBody = $item->header->body();
}elseif($isBody && $item->body->getRaw()){
$parseBody = $item->body->getRaw();
}else{
$parseBody = false;
}
// 是否同步body内容
if($isBody && $item->body->getRaw()){
if($parseBody){
// 记录邮件体 源文件
Log::put(
ROOT_PATH.'/eml/'.$this->email['email']."/".$item->getFolderName().'/'.$item->uid.'.eml',
$item->header->getRaw()."\r\n\r\n".$item->body->getRaw()
$item->header->getRaw()."\r\n\r\n".$parseBody->getRaw()
);
$body = [
... ... @@ -431,14 +439,14 @@ class SyncMail {
$body['text_html'][] = [
'body' => base64_encode($item->getBody()->getHtml() ? : $item->getBody()->getText()),
'type' => $item->getBody()->getHtml()?'text/html':'text/plain',
'body' => base64_encode($parseBody->getHtml() ? : $parseBody->getText()),
'type' => $parseBody->getHtml()?'text/html':'text/plain',
'charset' => 'utf-8',
'encode' => 'base64',
];
// 处理附件
foreach ($item->getBody()->getAttachment() as $itemBody){
foreach ($parseBody->getAttachment() as $itemBody){
$tmp = [
'body' => '',
'type' => $itemBody->getFileType(),
... ... @@ -473,7 +481,7 @@ class SyncMail {
// 更新描述
$this->db->update(listsSql::$table,[
'description'=>
Fun::mb_convert_encoding(mb_substr($item->getBody()->getText(),0,150),'utf-8')
Fun::mb_convert_encoding(mb_substr($parseBody->getText(),0,150),'utf-8')
],dbWhere(['id'=> $id]));
}
... ...