C++ 使用libcurl和C+保存从IMAP服务器下载的电子邮件+;归档

C++ 使用libcurl和C+保存从IMAP服务器下载的电子邮件+;归档,c++,imap,libcurl,C++,Imap,Libcurl,我可以从IMAP服务器获取电子邮件,但我无法将它们保存到计算机上的文件中以供以后处理。有没有一种方法在C++中使用LIbCURL?< /P>来实现这一点? #include <stdio.h> #include <curl/curl.h> int main(void) { CURL *curl; CURLcode res = CURLE_OK; curl = curl_easy_init(); if(curl) { /* Set user

我可以从IMAP服务器获取电子邮件,但我无法将它们保存到计算机上的文件中以供以后处理。有没有一种方法在C++中使用LIbCURL?< /P>来实现这一点?
    #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;
}
#包括
#包括
内部主(空)
{
卷曲*卷曲;
CURLcode res=CURLE_OK;
curl=curl_easy_init();
if(curl){
/*设置用户名和密码*/
curl_easy_setopt(curl,CURLOPT_用户名,“用户名”);
curl_easy_setopt(curl,CURLOPT_密码,“密码”);
curl\u easy\u setopt(curl,CURLOPT\u URL,“imaps://imap.gmail.com/INBOX/UID=1“;
curl\u easy\u setopt(curl,CURLOPT\u SSL\u VERIFYPEER,0);
curl\u easy\u setopt(curl,CURLOPT\u SSL\u VERIFYHOST,0);
卷曲度(卷曲度,卷曲度(1L));
/*执行提取*/
res=旋度(curl)\u容易执行(curl);
/*检查错误*/
如果(res!=卷曲(OK)
fprintf(stderr,“curl\u easy\u perform()失败:%s\n”,
卷曲(容易的);
/*总是清理*/
旋度\轻松\清洁(旋度);
}
返回(int)res;
}

您正在使用以下设备执行数据传输:

res = curl_easy_perform(curl);
但是你没有用这些数据做任何事情。您必须设置一个回调函数,只要
curl\u easy\u perform(curl)
返回
CURLE\u OK
,就会调用该函数

下面是我的看法:

让我们假设您希望接收数据,因为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);

你忘了写真正的问题是什么。“我无法将它们保存到文件”是什么意思?会发生什么?你试了什么?