imap 卷曲 php

imap with curl on php

我创建了一个非常简单的函数:

function send($command) {
    $url = 'imaps://myImapServer';
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_PORT, 993);
    curl_setopt($ch, CURLOPT_USERNAME, "MyUsername");
    curl_setopt($ch, CURLOPT_PASSWORD, "MyPassword");
    
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HEADER, true);

    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $command);

    $res = curl_exec($ch);

    return $res;
}

我可以用它来查询文件夹,例如,我所有邮件的 UID:

echo send('UID SEARCH ALL');
# Output: * SEARCH 63 64 65 66

但是有两个问题我没有找到解决方案。

您可以尝试使用 CURLOPT_WRITEFUNCTION

curl_setopt($ch, CURLOPT_WRITEFUNCTION, function($ch, $chunk) {
    //your imap handling here
    return strlen($chunk);
});

或者如果您在 class https://www.php.net/manual/en/function.curl-setopt.php#98491

curl_setopt($this->curl_handle, 
            CURLOPT_WRITEFUNCTION, 
            array($this, "class_method_name"));

CURLOPT_WRITEFUNCTION 不断监听您的“中断”输入,将其接收到的块输入回调函数。

您可以使用回调函数连接数据,将其全部推送到一个数组中,或者只在收到数据时对其进行处理,具体取决于您的用例。