使用下面的代码,我试图让任何的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;
}
答案 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支持的更多示例(有关更多详细示例,请参阅右侧的链接)。