libcurl IMAP не работает


Используя приведенный ниже код, я пытаюсь получить любые команды libcurl IMAP для работы.

В настоящее время, независимо от набора команд через CURLOPT_CUSTOMREQUEST, в моей функции обратного вызова задаются только самые старые данные электронной почты (1-е) в моем почтовом ящике. Я даже могу поместить что-то вроде "dfsafdasfasfaf" в CURLOPT_CUSTOMREQUEST, и никакой ошибки не будет показано, и самое старое письмо будет напечатано из обратного вызова.

Я пробовал использовать примеры кодов на сайте libcurl, чтобы перечислить папки, LSUB и т. д., И это всегда одно и то же - единственное, что возвращается, - это содержимое 1-го письма в моем почтовом ящике.

Я использую curl 7.40 mingw32 на win32 g++ (- lcurldll).

, Конечно, я должно быть делаю что-то неправильно. Если бы вы нашли минутку, чтобы исправить мою ошибку, я был бы вам очень признателен. Спасибо.

EDIT-даже если вы не знаете ответа, не могли бы вы оставить комментарий, если вы успешно получили libcurl IMAP для работы раньше? Потому что если никто не имеет получил libcurl imap для работы, прежде чем я перестану тратить свое время с ним и перейду к VMime или другому варианту..

EDIT2-мой главный вопрос заключается в том, как я могу перечислять папки через libcurl?

size_t writeCallback(char* buf, size_t size, size_t nmemb, void* up)
{   
    printf("%sn", buf);

    return size*nmemb; //tell curl how many bytes we handled
} 


int main(void)
{
    CURL *curl;
    CURLcode res = CURLE_OK;

    curl = curl_easy_init();
    if(curl) {

        curl_easy_setopt(curl, CURLOPT_USERNAME, "gmailuser");
        curl_easy_setopt(curl, CURLOPT_PASSWORD, "password");


        curl_easy_setopt(curl, CURLOPT_URL, "imaps://imap.gmail.com/INBOX");
        curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);

        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, &writeCallback);
        curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);

        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "LIST");

        res = curl_easy_perform(curl);


        if(res != CURLE_OK)
        {
            fprintf(stderr, "curl_easy_perform() failed: %sn",  curl_easy_strerror(res));
        }

        curl_easy_cleanup(curl);
   }

  _getch (); 
  return (int)res;

}
1 2

1 ответ:

Чтобы получить список папок в заданном почтовом ящике GMail, вы должны использовать:

curl_easy_setopt(curl, CURLOPT_URL, "imaps://imap.gmail.com/");

Кроме того, я считаю, что вам не нужна эта строка для выполнения запроса списка :

curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "LIST");

Я протестировал его на Linux, на libcurl версии 7.35.0, хотя я считаю, что проблемы, с которыми вы сталкиваетесь, не являются специфичными для ОС и скорее вызваны текущим состоянием реализации поддержки IMAP в библиотеке. Исходный код libcurl версии 7.35.0 можно найти здесь.

Ты вы также можете найти больше примеров текущей поддержки libcurl IMAP на страницеexamples (смотрите ссылки справа для более подробных примеров).