使用LibCurl同步IMAP电子邮件

时间:2017-07-11 14:31:30

标签: c++ imap libcurl

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

我对如何实现这一点有一些想法 - 但问题是我能看到的唯一选项是LibCurl是新的和最近的选项(如果另一个电子邮件客户端出现,可能会)在此期间检索/读取/响应电子邮件。我可以检索自上次收集时间以来到达的电子邮件 - 除了LibCurl不允许检索的粒度比日期更精确。

我到目前为止编写的代码如下(基于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;
}

有没有人知道如何实现我想达到的目标?到目前为止,我一直在尝试使用Gmail(这也提出了如何使用LibCurl而不必降低Gmail的安全设置的问题!)

0 个答案:

没有答案