libcurl IMAP不起作用

时间:2015-05-07 19:49:33

标签: c++ c email imap libcurl

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

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

我已尝试在libcurl的网站上使用示例代码,列出文件夹,LSUB等,它总是一样的 - 唯一返回的是收件箱中第一封电子邮件的内容。

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

当然,我一定是做错了。如果你能花点时间纠正我的错误,我会非常感激。谢谢。

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

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;

}

1 个答案:

答案 0 :(得分:1)

要获取给定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");

我已经在Linux上测试了它,在libcurl版本7.35.0上,虽然我相信你遇到的问题不是特定于操作系统的,而是由库中IMAP支持的当前实现状态引起的。您可以找到libcurl版本7.35.0 here的源代码。

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