| 
@@ -121,69 +121,84 @@ class Mail { | 
 | 
@@ -121,69 +121,84 @@ class Mail { | 
| 
121
 | 
         // 读取所有文件夹,未解密
 | 
121
 | 
         // 读取所有文件夹,未解密
 | 
| 
122
 | 
         $folders    =   $this->client->getFolder();
 | 
122
 | 
         $folders    =   $this->client->getFolder();
 | 
| 
123
 | 
 
 | 
123
 | 
 
 | 
| 
124
 | 
-//        $db->transaction();
 | 
 | 
   | 
| 
125
 | 
-        foreach ($folders as $folder){
 | 
 | 
   | 
| 
126
 | 
-            $pid = 0;
 | 
 | 
   | 
| 
127
 | 
-            $uuid = md5($email_id.$folder['folder']);
 | 
 | 
   | 
| 
128
 | 
-
 | 
 | 
   | 
| 
129
 | 
-            // 处理子父文件夹
 | 
 | 
   | 
| 
130
 | 
-            if(str_contains($folder['folder'], '/')){
 | 
 | 
   | 
| 
131
 | 
-                // 子目录
 | 
 | 
   | 
| 
132
 | 
-                $folder['name'] = explode('/',$folder['parseFolder']);
 | 
 | 
   | 
| 
133
 | 
-                // 查找pid
 | 
 | 
   | 
| 
134
 | 
-                $pid = $db->value(folderSql::has(['uuid'=>md5($email_id.explode('/',$folder['folder'])[0])]));
 | 
 | 
   | 
| 
135
 | 
-                // 去掉父目录名称
 | 
 | 
   | 
| 
136
 | 
-                $folder['parseFolder'] = explode('/',$folder['parseFolder'])[1];
 | 
124
 | 
+        foreach ($folders as $k=>$item){
 | 
| 
 | 
   | 
125
 | 
+            $pname = explode('/',$item['folder']);
 | 
| 
 | 
   | 
126
 | 
+            if(count($pname)>1){
 | 
| 
 | 
   | 
127
 | 
+                array_pop($pname);
 | 
| 
 | 
   | 
128
 | 
+                $pname = implode('/',$pname);
 | 
| 
 | 
   | 
129
 | 
+            }else{
 | 
| 
 | 
   | 
130
 | 
+                $pname = '';
 | 
| 
137
 | 
             }
 | 
131
 | 
             }
 | 
| 
138
 | 
 
 | 
132
 | 
 
 | 
| 
 | 
   | 
133
 | 
+            $folders[$k]['pname'] = $pname;
 | 
| 
 | 
   | 
134
 | 
+        }
 | 
| 
139
 | 
 
 | 
135
 | 
 
 | 
| 
140
 | 
-            try {
 | 
 | 
   | 
| 
141
 | 
-                $folder_name = '';
 | 
 | 
   | 
| 
142
 | 
-                // 已发送
 | 
 | 
   | 
| 
143
 | 
-                if(in_array('Send',$folder['check'])){
 | 
 | 
   | 
| 
144
 | 
-                    $folder_name = folderAlias('Send');
 | 
 | 
   | 
| 
145
 | 
-                }
 | 
 | 
   | 
| 
146
 | 
-                // 草稿
 | 
 | 
   | 
| 
147
 | 
-                elseif(in_array('Drafts',$folder['check'])){
 | 
 | 
   | 
| 
148
 | 
-                    $folder_name = folderAlias('Drafts');
 | 
 | 
   | 
| 
149
 | 
-                }
 | 
 | 
   | 
| 
150
 | 
-                // 垃圾
 | 
 | 
   | 
| 
151
 | 
-                elseif(in_array('Junk',$folder['check'])){
 | 
 | 
   | 
| 
152
 | 
-                    $folder_name = folderAlias('Junk');
 | 
 | 
   | 
| 
153
 | 
-                }
 | 
 | 
   | 
| 
154
 | 
-                // 回收站
 | 
 | 
   | 
| 
155
 | 
-                elseif(in_array('Trash',$folder['check'])){
 | 
 | 
   | 
| 
156
 | 
-                    $folder_name = folderAlias('Trash');
 | 
 | 
   | 
| 
157
 | 
-                }
 | 
136
 | 
+        $p = 0;
 | 
| 
 | 
   | 
137
 | 
+        $uuids = [];
 | 
| 
 | 
   | 
138
 | 
+        while ($folders){
 | 
| 
 | 
   | 
139
 | 
+            foreach ($folders as $fk=>$folder){
 | 
| 
 | 
   | 
140
 | 
+                $uuid = md5($email_id.$folder['folder']);
 | 
| 
 | 
   | 
141
 | 
+                $uuids[$uuid] = $uuid;
 | 
| 
 | 
   | 
142
 | 
+                // 查找/出现的次数
 | 
| 
 | 
   | 
143
 | 
+                if (substr_count($folder['folder'],'/') == $p){
 | 
| 
 | 
   | 
144
 | 
+// 查找pid
 | 
| 
 | 
   | 
145
 | 
+                    $pid = $db->value(folderSql::has(['uuid'=>md5($email_id.$folder['pname'])]));
 | 
| 
 | 
   | 
146
 | 
+                    $pid = $pid ? $pid : 0;
 | 
| 
 | 
   | 
147
 | 
+//                    try {
 | 
| 
 | 
   | 
148
 | 
+                        $folder_name = '';
 | 
| 
 | 
   | 
149
 | 
+                        // 已发送
 | 
| 
 | 
   | 
150
 | 
+                        if(in_array('Send',$folder['check'])){
 | 
| 
 | 
   | 
151
 | 
+                            $folder_name = folderAlias('Send');
 | 
| 
 | 
   | 
152
 | 
+                        }
 | 
| 
 | 
   | 
153
 | 
+                        // 草稿
 | 
| 
 | 
   | 
154
 | 
+                        elseif(in_array('Drafts',$folder['check'])){
 | 
| 
 | 
   | 
155
 | 
+                            $folder_name = folderAlias('Drafts');
 | 
| 
 | 
   | 
156
 | 
+                        }
 | 
| 
 | 
   | 
157
 | 
+                        // 垃圾
 | 
| 
 | 
   | 
158
 | 
+                        elseif(in_array('Junk',$folder['check'])){
 | 
| 
 | 
   | 
159
 | 
+                            $folder_name = folderAlias('Junk');
 | 
| 
 | 
   | 
160
 | 
+                        }
 | 
| 
 | 
   | 
161
 | 
+                        // 回收站
 | 
| 
 | 
   | 
162
 | 
+                        elseif(in_array('Trash',$folder['check'])){
 | 
| 
 | 
   | 
163
 | 
+                            $folder_name = folderAlias('Trash');
 | 
| 
 | 
   | 
164
 | 
+                        }
 | 
| 
158
 | 
 
 | 
165
 | 
 
 | 
| 
159
 | 
-                if(!$folder_name){
 | 
 | 
   | 
| 
160
 | 
-                    $folder_name = folderAlias($folder['parseFolder']);
 | 
 | 
   | 
| 
161
 | 
-                }
 | 
 | 
   | 
| 
162
 | 
-                if(!$db->count(folderSql::has(['uuid'=>$uuid]))){
 | 
 | 
   | 
| 
163
 | 
-                    $db->insert(folderSql::$table,[
 | 
 | 
   | 
| 
164
 | 
-                        'email_id' => $email_id,
 | 
 | 
   | 
| 
165
 | 
-                        'folder' => folderAlias($folder_name),
 | 
 | 
   | 
| 
166
 | 
-                        'origin_folder' => $folder['folder'],
 | 
 | 
   | 
| 
167
 | 
-                        'uuid'  =>  $uuid,
 | 
 | 
   | 
| 
168
 | 
-                        'pid'   =>  $pid
 | 
 | 
   | 
| 
169
 | 
-                    ],false);
 | 
 | 
   | 
| 
170
 | 
-                }else{
 | 
 | 
   | 
| 
171
 | 
-                    $db->update(folderSql::$table,[
 | 
 | 
   | 
| 
172
 | 
-                        'email_id' => $email_id,
 | 
 | 
   | 
| 
173
 | 
-                        'folder' => folderAlias($folder_name),
 | 
 | 
   | 
| 
174
 | 
-                        'origin_folder' => $folder['folder'],
 | 
 | 
   | 
| 
175
 | 
-                        'uuid'  =>  $uuid,
 | 
 | 
   | 
| 
176
 | 
-                        'pid'   =>  $pid
 | 
 | 
   | 
| 
177
 | 
-                    ],dbWhere(['email_id' => $email_id,'uuid'  =>  $uuid]),false);
 | 
 | 
   | 
| 
178
 | 
-                }
 | 
 | 
   | 
| 
179
 | 
-            }catch (\Throwable $e){
 | 
 | 
   | 
| 
180
 | 
-                // 这里就不处理失败了
 | 
 | 
   | 
| 
181
 | 
-            }
 | 
166
 | 
+                        if(!$folder_name){
 | 
| 
 | 
   | 
167
 | 
+                            $fn = explode('/',$folder['parseFolder']);
 | 
| 
 | 
   | 
168
 | 
+                            $folder_name = folderAlias(end($fn));
 | 
| 
 | 
   | 
169
 | 
+                        }
 | 
| 
 | 
   | 
170
 | 
+                        if(!$db->count(folderSql::has(['uuid'=>$uuid]))){
 | 
| 
 | 
   | 
171
 | 
+                            $db->insert(folderSql::$table,[
 | 
| 
 | 
   | 
172
 | 
+                                'email_id' => $email_id,
 | 
| 
 | 
   | 
173
 | 
+                                'folder' => folderAlias($folder_name),
 | 
| 
 | 
   | 
174
 | 
+                                'origin_folder' => $folder['folder'],
 | 
| 
 | 
   | 
175
 | 
+                                'uuid'  =>  $uuid,
 | 
| 
 | 
   | 
176
 | 
+                                'pid'   =>  $pid
 | 
| 
 | 
   | 
177
 | 
+                            ],false);
 | 
| 
 | 
   | 
178
 | 
+                        }else{
 | 
| 
 | 
   | 
179
 | 
+                            $db->update(folderSql::$table,[
 | 
| 
 | 
   | 
180
 | 
+                                'email_id' => $email_id,
 | 
| 
 | 
   | 
181
 | 
+                                'folder' => folderAlias($folder_name),
 | 
| 
 | 
   | 
182
 | 
+                                'origin_folder' => $folder['folder'],
 | 
| 
 | 
   | 
183
 | 
+                                'uuid'  =>  $uuid,
 | 
| 
 | 
   | 
184
 | 
+                                'pid'   =>  $pid
 | 
| 
 | 
   | 
185
 | 
+                            ],dbWhere(['email_id' => $email_id,'uuid'  =>  $uuid]),false);
 | 
| 
 | 
   | 
186
 | 
+                        }
 | 
| 
 | 
   | 
187
 | 
+//                    }catch (\Throwable $e){
 | 
| 
 | 
   | 
188
 | 
+                        // 这里就不处理失败了
 | 
| 
 | 
   | 
189
 | 
+//                    }
 | 
| 
182
 | 
 
 | 
190
 | 
 
 | 
| 
 | 
   | 
191
 | 
+                    unset($folders[$fk]);
 | 
| 
183
 | 
 
 | 
192
 | 
 
 | 
| 
 | 
   | 
193
 | 
+                }
 | 
| 
 | 
   | 
194
 | 
+            }
 | 
| 
 | 
   | 
195
 | 
+            $p++;
 | 
| 
 | 
   | 
196
 | 
+        }
 | 
| 
184
 | 
 
 | 
197
 | 
 
 | 
| 
 | 
   | 
198
 | 
+        if($uuids){
 | 
| 
 | 
   | 
199
 | 
+            // 删除以前的
 | 
| 
 | 
   | 
200
 | 
+            $db->delete(folderSql::$table,['uuid.notin'=>$uuids,'email_id'=>$email_id]);
 | 
| 
185
 | 
         }
 | 
201
 | 
         }
 | 
| 
186
 | 
-//        $db->commit();
 | 
 | 
   | 
| 
187
 | 
 
 | 
202
 | 
 
 | 
| 
188
 | 
     }
 | 
203
 | 
     }
 | 
| 
189
 | 
 
 | 
204
 | 
 
 |