我可以从IMAP服务器获取电子邮件,但我无法将它们保存到计算机上的文件中以便以后处理。有没有办法在C ++中使用libcurl执行此操作?
#include <stdio.h>
#include <curl/curl.h>
int main(void)
{
CURL *curl;
CURLcode res = CURLE_OK;
curl = curl_easy_init();
if(curl) {
/* Set username and password */
curl_easy_setopt(curl, CURLOPT_USERNAME, "username");
curl_easy_setopt(curl, CURLOPT_PASSWORD, "password");
curl_easy_setopt(curl, CURLOPT_URL, "imaps://imap.gmail.com/INBOX/;UID=1");
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0);
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
/* Perform the fetch */
res = curl_easy_perform(curl);
/* Check for errors */
if(res != CURLE_OK)
fprintf(stderr, "curl_easy_perform() failed: %s\n",
curl_easy_strerror(res));
/* Always cleanup */
curl_easy_cleanup(curl);
}
return (int)res;
}
答案 0 :(得分:2)
您正在使用以下网址执行数据传输:
res = curl_easy_perform(curl);
但是你没有对这些数据做任何事情。您必须设置一个回调函数,只要curl_easy_perform(curl)
返回CURLE_OK
,就会调用该函数。
以下是libcurl tutorial所说的内容:
让我们假设您想要接收数据一段时间,因为URL标识了您想要到达的远程资源。由于您编写了一种需要此传输的应用程序,我假设您希望直接将数据传递给您,而不是简单地将其传递给stdout。所以,你编写自己的函数来匹配这个原型:
size_t write_data(void *buffer, size_t size, size_t nmemb, void *userp);
您告诉libcurl通过发出类似于此的函数将所有数据传递给此函数:
curl_easy_setopt(easyhandle, CURLOPT_WRITEFUNCTION, write_data);