Skip to content

Commit ba58509

Browse files
committed
Handle messages fetched by UID correctly
1 parent 877344c commit ba58509

File tree

2 files changed

+30
-0
lines changed

2 files changed

+30
-0
lines changed

src/Functions.php

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -195,4 +195,22 @@ public static function isRetrofitResource($imap)
195195
{
196196
return is_resource($imap) && get_resource_type($imap) == 'imap';
197197
}
198+
199+
public static function keyBy(string $name, array $list): array
200+
{
201+
$keyBy = [];
202+
foreach ($list as $item) {
203+
if (!isset($item->$name)) {
204+
trigger_error('keyBy: key "' . $name . '" not found!', E_USER_WARNING);
205+
continue;
206+
}
207+
if (isset($keyBy[$item->$name])) {
208+
trigger_error('keyBy: duplicate key "' . $name . '" = "' . $item->$name . '"', E_USER_WARNING);
209+
continue;
210+
}
211+
$keyBy[$item->$name] = $item;
212+
}
213+
214+
return $keyBy;
215+
}
198216
}

src/Message.php

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,10 @@ public static function body($imap, $messageNum, $flags = 0)
165165

166166
$messages = $client->fetch($imap->getMailboxName(), $messageNum, $isUid, ['BODY[TEXT]']);
167167

168+
if ($isUid) {
169+
$messages = Functions::keyBy('uid', $messages);
170+
}
171+
168172
return $messages[$messageNum]->bodypart['TEXT'];
169173
}
170174

@@ -186,6 +190,10 @@ public static function fetchBody($imap, $messageNum, $section, $flags = 0)
186190
return false;
187191
}
188192

193+
if ($isUid) {
194+
$messages = Functions::keyBy('uid', $messages);
195+
}
196+
189197
if ($section) {
190198
return $messages[$messageNum]->bodypart[$section];
191199
}
@@ -217,6 +225,10 @@ public static function fetchMime($imap, $messageNum, $section, $flags = 0)
217225
return "";
218226
}
219227

228+
if ($isUid) {
229+
$messages = Functions::keyBy('uid', $messages);
230+
}
231+
220232
if ($section && isset($messages[$messageNum]->bodypart[$sectionKey])) {
221233
return $messages[$messageNum]->bodypart[$sectionKey];
222234
}

0 commit comments

Comments
 (0)