簡體   English   中英

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。

如果我不限制結果並使用 slice 我會遇到超時錯誤,因為郵箱中的消息太多:

$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',
]

選項已添加到客戶端。 我試過升序和降序。 我也清除了配置緩存,但沒有任何效果。

我仍然在第 1 頁看到最早的結果,在最后看到最新的結果。

有人有更多想法嗎?

在嘗試了幾個解決方案之后,我決定進入供應商文件(config/imap.php)並在那里更改 fetch_order:

'fetch_order' => 'desc'

默認情況下是 asc。 似乎在創建客戶端時更改 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',
    ]
]);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM