Laravel imap 获取按最近排序的消息
Laravel imap get messages sorted by most recent
我正在使用 laravel-imap 从邮箱中检索邮件:
$aMessage = $selectedFolder->query()->setFetchFlags(true)->setFetchBody(true)->setFetchAttachment(false)->leaveUnread()
->limit(40, $highest_page)->get();
默认情况下,最新消息位于最高页面。如果我只是获取所有消息并按原样显示它们,我会先看到旧消息(第 1 页)。
到目前为止我尝试了什么:
在我调用 ->get()
之后,结果可以被视为正常的 laravel 集合,但是我使用这些方法没有成功:
$aMessage = $aMessage->sortByDesc('date')->values()->all();
$aMessage = $aMessage->sortByDesc(function ($item) {
//\Log::info(print_r($item, true));
return $item->date;
})->values()->all();
我确定上述方法不起作用,因为我使用 ->limit(40, $highest_page)
,这意味着该集合的大小为 40。
如果我不限制结果,使用切片我遇到超时错误,因为邮箱中的消息太多:
$aMessage = $selectedFolder->query()->setFetchFlags(true)->setFetchBody(true)->setFetchAttachment(false)->leaveUnread()
->get()->reverse()->slice(0, $messages_per_page);
我也试过laravel-imap的方法paginate()
。结果与 limit()
.
相同
在这一点上,我确信在结果变成一个集合之前我必须以某种方式进行排序。我还发现:
'options' => [
'fetch_order' => 'desc',
]
选项已添加到客户端。我尝试了 asc 和 desc。我还清除了配置缓存,但没有任何效果。
我仍然在第 1 页看到最早的结果,在最后看到最新的结果。
有人有更多想法吗?
在尝试了几种解决方案后,我决定进入供应商文件 (config/imap.php) 并更改 fetch_order:
'fetch_order' => 'desc'
默认为升序。似乎在创建客户端时更改 fetch_order 不会覆盖配置。我以前有过这个但它没有用,也没有抛出错误:
$this->oClient = new Client([
'host' => env('MAIL_HOST_IN'),
'port' => env('MAIL_PORT_IN'),
'encryption' => env('MAIL_ENCRYPTION_IN'),
'validate_cert' => true,
'username' => env('MAIL_USERNAME'),
'password' => env('MAIL_PASSWORD'),
'protocol' => 'imap',
'options' => [
'fetch_order' => 'desc',
]
]);
我正在使用 laravel-imap 从邮箱中检索邮件:
$aMessage = $selectedFolder->query()->setFetchFlags(true)->setFetchBody(true)->setFetchAttachment(false)->leaveUnread()
->limit(40, $highest_page)->get();
默认情况下,最新消息位于最高页面。如果我只是获取所有消息并按原样显示它们,我会先看到旧消息(第 1 页)。
到目前为止我尝试了什么:
在我调用 ->get()
之后,结果可以被视为正常的 laravel 集合,但是我使用这些方法没有成功:
$aMessage = $aMessage->sortByDesc('date')->values()->all();
$aMessage = $aMessage->sortByDesc(function ($item) {
//\Log::info(print_r($item, true));
return $item->date;
})->values()->all();
我确定上述方法不起作用,因为我使用 ->limit(40, $highest_page)
,这意味着该集合的大小为 40。
如果我不限制结果,使用切片我遇到超时错误,因为邮箱中的消息太多:
$aMessage = $selectedFolder->query()->setFetchFlags(true)->setFetchBody(true)->setFetchAttachment(false)->leaveUnread()
->get()->reverse()->slice(0, $messages_per_page);
我也试过laravel-imap的方法paginate()
。结果与 limit()
.
在这一点上,我确信在结果变成一个集合之前我必须以某种方式进行排序。我还发现:
'options' => [
'fetch_order' => 'desc',
]
选项已添加到客户端。我尝试了 asc 和 desc。我还清除了配置缓存,但没有任何效果。
我仍然在第 1 页看到最早的结果,在最后看到最新的结果。
有人有更多想法吗?
在尝试了几种解决方案后,我决定进入供应商文件 (config/imap.php) 并更改 fetch_order:
'fetch_order' => 'desc'
默认为升序。似乎在创建客户端时更改 fetch_order 不会覆盖配置。我以前有过这个但它没有用,也没有抛出错误:
$this->oClient = new Client([
'host' => env('MAIL_HOST_IN'),
'port' => env('MAIL_PORT_IN'),
'encryption' => env('MAIL_ENCRYPTION_IN'),
'validate_cert' => true,
'username' => env('MAIL_USERNAME'),
'password' => env('MAIL_PASSWORD'),
'protocol' => 'imap',
'options' => [
'fetch_order' => 'desc',
]
]);