作者 邓超

x

@@ -62,7 +62,7 @@ class AutoMail { @@ -62,7 +62,7 @@ class AutoMail {
62 $ids[] = $i+$id; 62 $ids[] = $i+$id;
63 } 63 }
64 $id = end($ids); 64 $id = end($ids);
65 - if($id<($maxId-500000)){ 65 + if($id<($maxId-100000)){
66 continue; 66 continue;
67 } 67 }
68 redis()->rPush('auto_check_ids',implode(',',$ids)); 68 redis()->rPush('auto_check_ids',implode(',',$ids));
@@ -191,6 +191,7 @@ class SyncMail { @@ -191,6 +191,7 @@ class SyncMail {
191 2 Notification 191 2 Notification
192 2 Invitation 192 2 Invitation
193 2 Automatyczna 193 2 Automatyczna
  194 +2 代开
194 2 expired'; 195 2 expired';
195 $filter = explode("\n",$filter); 196 $filter = explode("\n",$filter);
196 197
@@ -36,6 +36,10 @@ class Address { @@ -36,6 +36,10 @@ class Address {
36 36
37 /** 37 /**
38 * 解析地址 38 * 解析地址
  39 + * 情况1 "name" <xxx@email.com>
  40 + * 情况2 "name" xxx@email.com
  41 + * 情况3 name xxx@email.com
  42 + * 情况4 xxx@email.com
39 * @author:dc 43 * @author:dc
40 * @time 2024/9/11 11:39 44 * @time 2024/9/11 11:39
41 */ 45 */
@@ -45,7 +49,16 @@ class Address { @@ -45,7 +49,16 @@ class Address {
45 49
46 if(!empty($email)){ 50 if(!empty($email)){
47 $this->email = $email; 51 $this->email = $email;
48 - $this->name = trim(str_replace([$email,'"','<','>','&gt;','&lt;'],'',$this->raw)); 52 + $this->name = trim($this->raw);
  53 + $len = strlen($email);
  54 +
  55 + if(substr($this->name,-1)=='>'){
  56 + $len += 2;
  57 + }
  58 +
  59 + $this->name = substr($this->name,0,-$len);
  60 + $this->name = trim($this->name);
  61 + $this->name = trim($this->name,'"');
49 } 62 }
50 if($this->name){ 63 if($this->name){
51 // $this->name = DeCode::decode($this->name); 64 // $this->name = DeCode::decode($this->name);
@@ -64,12 +77,23 @@ class Address { @@ -64,12 +77,23 @@ class Address {
64 * @time 2024/9/11 11:43 77 * @time 2024/9/11 11:43
65 */ 78 */
66 private function pregEmail(string $str):string { 79 private function pregEmail(string $str):string {
67 - preg_match('/\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/',$str,$email);  
68 - if(empty($email[0])){ 80 + preg_match_all('/\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/',$str,$email);
  81 + if(!empty($email[0])){
  82 + $email = end($email[0]);
  83 + }else{
  84 + $email = '';
  85 + }
  86 + if(empty($email)){
69 // 邮箱2 87 // 邮箱2
70 - preg_match('/[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/',$str,$email); 88 + preg_match_all('/[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/',$str,$email);
  89 +
  90 + if(!empty($email[0])){
  91 + $email = end($email[0]);
  92 + }else{
  93 + $email = '';
  94 + }
71 } 95 }
72 - return str_replace(['<','>'],'',$email[0]??''); 96 + return str_replace(['<','>'],'',$email);
73 } 97 }
74 98
75 99
@@ -106,18 +106,19 @@ class Header{ @@ -106,18 +106,19 @@ class Header{
106 106
107 /** 107 /**
108 * 读取字段 108 * 读取字段
109 - * @param string $name 109 + * @param string $name 字段名称
  110 + * @param mixed ...$params 额外参数
110 * @return mixed 111 * @return mixed
111 * @author:dc 112 * @author:dc
112 - * @time 2024/9/11 15:06 113 + * @time 2024/12/11 11:50
113 */ 114 */
114 - public function get(string $name):mixed { 115 + public function get(string $name,...$params):mixed {
115 $name = strtolower($name); 116 $name = strtolower($name);
116 117
117 $m = 'get'.str_replace(' ','',ucwords(str_replace('-',' ',$name))); 118 $m = 'get'.str_replace(' ','',ucwords(str_replace('-',' ',$name)));
118 119
119 if(method_exists($this,$m)){ 120 if(method_exists($this,$m)){
120 - return $this->{$m}(); 121 + return $this->{$m}(...$params);
121 } 122 }
122 123
123 return $this->attributes[$name]??''; 124 return $this->attributes[$name]??'';
@@ -192,15 +193,19 @@ class Header{ @@ -192,15 +193,19 @@ class Header{
192 } 193 }
193 194
194 195
195 -  
196 /** 196 /**
197 * 发件人 可能是欺炸 发件人 197 * 发件人 可能是欺炸 发件人
198 - * @return Address 198 + * @param bool $isArray 是否返回数组
  199 + * @return Address|array
199 * @author:dc 200 * @author:dc
200 - * @time 2024/9/11 15:19 201 + * @time 2024/12/11 11:52
201 */ 202 */
202 - public function getFrom():Address {  
203 - return Address::make($this->attributes['from']??''); 203 + public function getFrom(bool $isArray = false):Address|array {
  204 + $address = Address::make($this->attributes['from']??'');
  205 + if($isArray){
  206 + return $address->toArray();
  207 + }
  208 + return $address;
204 } 209 }
205 210
206 /** 211 /**
@@ -274,7 +279,7 @@ class Header{ @@ -274,7 +279,7 @@ class Header{
274 public function toArray():array { 279 public function toArray():array {
275 $arr = []; 280 $arr = [];
276 foreach ($this->attributes as $key=>$attr){ 281 foreach ($this->attributes as $key=>$attr){
277 - $arr[$key] = $this->get($key); 282 + $arr[$key] = $this->get($key,true);
278 } 283 }
279 284
280 return $arr; 285 return $arr;
@@ -300,24 +305,21 @@ class Header{ @@ -300,24 +305,21 @@ class Header{
300 305
301 $str = trim($str); 306 $str = trim($str);
302 $str = explode("\r\n",$str); 307 $str = explode("\r\n",$str);
303 - foreach ($str as $k=>$s){  
304 - $s = trim($s);  
305 - if(preg_match("/^=\?([a-z0-9-.]{3,})\?[bq]\?/i",$s,$code)){ 308 + $str = implode('',$str);
  309 + preg_match_all("/=\?[a-z0-9-.]{3,}\?[bq]\?.*\?=$/Ui",$str,$codes);
  310 + foreach ($codes[0] as $c){
  311 + if(preg_match("/^=\?([a-z0-9-.]{3,})\?[bq]\?.*\?=$/i",$c,$cc)){
306 // 解码 这个函数好像已经转码了, 312 // 解码 这个函数好像已经转码了,
307 // iso-8859-8-i php 好像没有这个编码 ,阿拉伯 iso-8859-8 313 // iso-8859-8-i php 好像没有这个编码 ,阿拉伯 iso-8859-8
308 // =?iso-8859-8-i?B?4eTu+eog7PTw6en66iDg7CDn4fj6IERjb20gLSD08OnkIO7xIDgyNzUz?= 314 // =?iso-8859-8-i?B?4eTu+eog7PTw6en66iDg7CDn4fj6IERjb20gLSD08OnkIO7xIDgyNzUz?=
309 - $s = str_replace("=?{$code[1]}?",'=?'.Fun::getEncodingAliases($code[1]).'?',$s); 315 + $s = str_replace("=?{$cc[1]}?",'=?'.Fun::getEncodingAliases($cc[1]).'?',$c);
310 316
311 $s = mb_decode_mimeheader($s); 317 $s = mb_decode_mimeheader($s);
312 318
313 - $str[$k] = $s;  
314 - // 转字符编码  
315 -// return mb_convert_encoding($str,'utf-8',$code[1]); 319 + $str = str_replace($c,$s,$str);
316 } 320 }
317 } 321 }
318 -  
319 -  
320 - return implode(" ",$str); 322 + return $str;
321 } 323 }
322 324
323 325
@@ -380,7 +380,7 @@ class SyncMail { @@ -380,7 +380,7 @@ class SyncMail {
380 'cc' => $item->header->getCc(true), 380 'cc' => $item->header->getCc(true),
381 'bcc' => $item->header->getBcc(true), 381 'bcc' => $item->header->getBcc(true),
382 'from' => $item->header->getFrom()->email, 382 'from' => $item->header->getFrom()->email,
383 - 'from_name' => $item->header->getFrom()->name, 383 + 'from_name' => mb_substr($item->header->getFrom()->name,0,200),
384 'to' => implode(',',array_column($item->header->getTo(true),'email')), 384 'to' => implode(',',array_column($item->header->getTo(true),'email')),
385 'to_name' => $item->header->getTo(true), 385 'to_name' => $item->header->getTo(true),
386 // 这个是 邮件的时间 就是header里面带的 一般情况就是发件时间 386 // 这个是 邮件的时间 就是header里面带的 一般情况就是发件时间