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