使用libcurl和C ++将从IMAP服务器下载的电子邮件保存到文件中

时间:2014-07-20 15:58:35

标签: c++ imap libcurl

我可以从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;
}

1 个答案:

答案 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);