首页 > 解决方案 > 从 x 秒前获取电子邮件 - PHP IMAP ddeboer 库

问题描述

我正在尝试通过使用 imap 的 ddeboer PHP 库下载电子邮件。我可以登录我的电子邮件帐户并获取电子邮件。但是,每当我尝试通过过滤电子邮件的年龄来获取电子邮件时,它只会返回所有电子邮件。当它实际上应该只返回 x 天/秒等旧的电子邮件时。我使用的函数来自 ddboe 库的文档(https://github.com/ddeboer/imap)。

$today = new DateTimeImmutable();
$thirtyDaysAgo = $today->sub(new DateInterval('P30D'));

$messages = $mailbox->getMessages(
    new Ddeboer\Imap\Search\Date\Since($thirtyDaysAgo),
    \SORTDATE, // Sort criteria
    true // Descending order
);

整个班级是:

<?php

namespace App\Controller;

use DateInterval;
use Ddeboer\Imap\Server;
use stdClass;
use DateTime;
use DateTimeImmutable;
use Ddeboer\Imap\Search\Date\Since;

class RoflsController extends AppController
{
    private $connection;
    private $server;

    public function initialize(): void
    {
        $this->createServer();
        $this->establishConnection("yourUser", "yourPassword");
    }


    private function createServer()
    {
        $this->server = new Server('imap.gmail.com');
    }

    public function getConnection()
    {
        return $this->connection;
    }

    public function establishConnection($username, $password)
    {
        $this->connection = $this->server->authenticate($username, $password);
    }

    public function imap($username, $password)
    {
        $this->viewBuilder()->setClassName('Json');

    
        $this->establishConnection($username, $password);
      
    }



    public function getMessages()
    {


        $mailbox = $this->connection->getMailbox('INBOX');

        $lastQueriedDateTime = new DateTimeImmutable('@' . (time() - 200));
        $messages = $mailbox->getMessages(
            new Since($lastQueriedDateTime),
            \SORTDATE, // Sort criteria
            true // Descending order
        );


        $msg = [];

        $test = [];
        foreach ($messages as $message) {
            $msg[] = $message;
            $test[] = $message->getDate();
        }
        return $msg;


  
    }

    public function turnRawMessagesToArrayOfMessageObjects($messages): array
    {

        $msgObjectArra = [];

        foreach ($messages as $msg) {
            $messageObject = new stdClass;
            $messageObject->content = $msg->getContent();
            $messageObject->subjectLine = $msg->getHeaders()['subject'];
            $messageObject->sender = $msg->getHeaders()['fromaddress'];
            $messageObject->date = $msg->getHeaders()['date'];
            $messageObject->id = uniqid();
            $msgObjectArra[] = $messageObject;
        }

        return $msgObjectArra;
    }
}

谁能告诉我我做错了什么?如何仅获取几秒/分钟等前收到的电子邮件?

标签: phpimap

解决方案


推荐阅读