libcurl IMAP 不工作

libcurl IMAP not working

使用下面的代码,我试图让 any 的 libcurl IMAP 命令工作。

目前,无论通过 CURLOPT_CUSTOMREQUEST 设置的命令如何,在我的回调函数中,唯一给出的数据是收件箱中最旧的电子邮件(第一封)。我什至可以在 CURLOPT_CUSTOMREQUEST 中放置类似 "dfsafdasfasfaf" 的内容,并且不会显示任何错误,并且将从回调中打印最早的电子邮件。

我试过使用 libcurl 网站上的示例代码来列出文件夹、LSUB 等,结果总是一样的——唯一返回的是我收件箱中第一封电子邮件的内容。

我在 win32 g++ (-lcurldll) 上使用 curl 7.40 mingw32。

肯定是我做错了什么。如果您能花点时间纠正我的错误,我将不胜感激。谢谢你。

编辑 - 即使您不知道答案,如果您之前已经成功让 libcurl IMAP 工作,您能否发表评论?因为如果在我停止浪费时间并转向 VMime 或其他选项之前没有人让 libcurl imap 工作..

EDIT2- 我的主要问题是如何通过 libcurl 列出文件夹?

size_t writeCallback(char* buf, size_t size, size_t nmemb, void* up)
{   
    printf("%s\n", buf);

    return size*nmemb; //tell curl how many bytes we handled
} 


int main(void)
{
    CURL *curl;
    CURLcode res = CURLE_OK;

    curl = curl_easy_init();
    if(curl) {

        curl_easy_setopt(curl, CURLOPT_USERNAME, "gmailuser");
        curl_easy_setopt(curl, CURLOPT_PASSWORD, "password");


        curl_easy_setopt(curl, CURLOPT_URL, "imaps://imap.gmail.com/INBOX");
        curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);

        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, &writeCallback);
        curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);

        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "LIST");

        res = curl_easy_perform(curl);


        if(res != CURLE_OK)
        {
            fprintf(stderr, "curl_easy_perform() failed: %s\n",  curl_easy_strerror(res));
        }

        curl_easy_cleanup(curl);
   }

  _getch (); 
  return (int)res;

}

要获取给定 GMail 收件箱中的文件夹列表,您应该使用:

curl_easy_setopt(curl, CURLOPT_URL, "imaps://imap.gmail.com/");

另外,我相信you don't need this line to perform LIST request:

curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "LIST");

我已经在 libcurl 7.35.0 版 Linux 上对其进行了测试,但我相信您遇到的问题不是 OS 特有的,而是由当前的在库中实现 IMAP 支持。您可以找到 libcurl 版本 7.35.0 here.

的源代码

您还可以在 examples page 上找到有关当前 libcurl IMAP 支持的更多示例(有关更详细的示例,请参阅右侧的链接)。