为了账号安全,请及时绑定邮箱和手机立即绑定

Laravel imap 获取按最近排序的消息

Laravel imap 获取按最近排序的消息

PHP
喵喔喔 2022-06-11 18:50:49
我正在使用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 页上看到最旧的结果,最后看到最新的结果。有人有更多想法吗?
查看完整描述

1 回答

?
富国沪深

TA贡献1790条经验 获得超9个赞

在尝试了几种解决方案后,我决定进入供应商文件(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',

    ]

]);


查看完整回答
反对 回复 2022-06-11
  • 1 回答
  • 0 关注
  • 145 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号