使用下面的代码,我试图让任何libcurl IMAP命令都能工作。
目前,不管通过CURLOPT_CUSTOMREQUEST设置的命令集如何,在我的回调函数中,唯一给出的数据是收件箱中最古老的电子邮件(第一封)。我甚至可以将类似于"dfsafdasfasfaf“的内容放在CURLOPT_CUSTOMREQUEST中,这样就不会显示错误,并且将从回调中打印出最古老的电子邮件。
我试过在libcurl的站点上使用示例代码,列出文件夹、LSUB等等,而且总是一样--唯一返回的是我收件箱中第一封电子邮件的内容。
我使用的是curl 7.40 mingw32 on win32 g++ (-lcurldll)。
我肯定做错什么了。如果你能花点时间纠正我的错误,我会非常感激的。谢谢。
编辑-即使你不知道答案,如果你已经成功地让libcurl IMAP工作,你能留下评论吗?因为如果没有人让libcurl工作之前,我将停止浪费时间,转而使用VMime或其他选项。
EDIT2 2-我的主要问题是如何通过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;
}发布于 2015-05-07 22:32:15
为了获取给定GMail收件箱中的文件夹列表,您应该使用:
curl_easy_setopt(curl, CURLOPT_URL, "imaps://imap.gmail.com/");而且,我相信您不需要这一行来执行列表请求
curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "LIST");我已经在Linux上对它进行了测试,在libcurl版本7.35.0上,尽管我认为您遇到的问题不是操作系统特有的,而是由库中IMAP支持的当前实现状态引起的。您可以找到libcurl版本7.35.0 这里的源代码。
您还可以在示例页上找到更多当前libcurl支持的示例(更详细的示例请参见右侧的链接)。
https://stackoverflow.com/questions/30110396
复制相似问题