C++ 使用LibCurl同步IMAP电子邮件

C++ 使用LibCurl同步IMAP电子邮件,c++,imap,libcurl,C++,Imap,Libcurl,我正在尝试使用LibCurl同步我的IMAP电子邮件,这样,实际上,我有一个电子邮件客户端,它会在新电子邮件到达时定期将其检索到文件夹中。它不应该做任何像过滤这样聪明的事情——只需要收到电子邮件 我对如何实现这一点有一些想法,但问题是,我能看到的LibCurl的唯一选项是NEW和recented,如果另一个电子邮件客户端同时出现并检索/读取/响应电子邮件,这些选项(大概)将不起作用。我可以检索自上次收集时间以来收到的电子邮件——除了LibCurl不允许检索的粒度比Day更精确 到目前为止,我编写

我正在尝试使用LibCurl同步我的IMAP电子邮件,这样,实际上,我有一个电子邮件客户端,它会在新电子邮件到达时定期将其检索到文件夹中。它不应该做任何像过滤这样聪明的事情——只需要收到电子邮件

我对如何实现这一点有一些想法,但问题是,我能看到的LibCurl的唯一选项是NEW和recented,如果另一个电子邮件客户端同时出现并检索/读取/响应电子邮件,这些选项(大概)将不起作用。我可以检索自上次收集时间以来收到的电子邮件——除了LibCurl不允许检索的粒度比Day更精确

到目前为止,我编写的代码如下(基于LibCurl文档中的示例):


有人知道我怎样才能达到我想达到的目标吗?到目前为止,我一直在试用Gmail(这也提出了一个问题,即如何在不降低Gmail安全设置的情况下使用LibCurl!)

你知道fetchmail吗?这就是它所做的。我是-但它并不真正适合我的用例。我想要的是一个单一的应用程序,它可以获取我的电子邮件,然后进一步处理它。我意识到我可以用fetchmail和一堆脚本达到同样的效果——但是,就像老鼠窝里的电线一样,这让我觉得很凌乱。我宁愿(如果可能的话)使用LibCurl并拥有一个很好的集成解决方案。
#include "curl_imap.h"

using namespace std;

std::string homedirectory;

int curl_changedir(string path, CURL* curl) {
    string newpath;
    curl_easy_setopt(curl, CURLOPT_URL, path.c_str());         
    return 0;
}

CURL* curl_login(char* username, char* password) {
    CURLcode res = CURLE_OK;

    CURL *curl = curl_easy_init();
    if(curl) {
        curl_easy_setopt(curl, CURLOPT_USERNAME, username);
        curl_easy_setopt(curl, CURLOPT_PASSWORD, password);
        curl_changedir(homedirectory, curl);
    } else {
        return NULL;
    }
    return curl;
}

int fetch_imap_inbox(IMAPSetting &imap) {
    homedirectory.assign(imap.url,strlen(imap.url));    
    CURLcode res = CURLE_OK;
    CURL *curl = curl_easy_init();
    curl = curl_login(imap.username, imap.password);
    if (curl) {
        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);
    }

    return (int)res;
}