2015-05-07 2 views
2

Используя приведенный ниже код, я пытаюсь получить любые команд 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("%s\n", 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: %s\n", curl_easy_strerror(res)); 
     } 

     curl_easy_cleanup(curl); 
    } 

    _getch(); 
    return (int)res; 

} 
+0

Что именно вы хотите сделать? – syntagma

+0

Спасибо за ваш вход REACHUS. Я хотел бы начать с перечисления всех папок для учетной записи gmail. – uhuyt845

+0

Вы можете перечислить все папки, просто используя 'curl_easy_setopt (curl, CURLOPT_URL," imaps: //imap.gmail.com/ ")'. Кроме того, я считаю, что вам не нужно 'curl_easy_setopt (curl, CURLOPT_CUSTOMREQUEST,« LIST »)', но я понимаю, что вы хотите каким-то образом форматировать вывод. – syntagma

ответ

1

Для того, чтобы получить список папок в данной GMail почтовый ящик, вы должны использовать:

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

Кроме того, я считаю, you don't need this line to perform LIST request:

curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "LIST"); 

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

Вы также можете найти другие примеры текущей поддержки IMAP libcurl на examples page (см. Ссылки справа, чтобы получить более подробные примеры).

+0

Спасибо, я ценю это - но знаете ли вы, где я могу загрузить пакет разработки? Имя файла должно быть чем-то вроде curl-7.35.0-devel-mingw. – uhuyt845

+0

Я бы постарался либо из них: http://lrn.no-ip.info/packages/i686-w64-mingw/curl/7.35.0-1/ или попытаться перекрестно скомпилировать его (я видел несколько писем на список рассылки libcurl о том, как это сделать). – syntagma

+0

В Windows они выпускают пакеты «devel» с библиотеками, DLL и включенными файлами. Учитывая текущее состояние libcurl, я думаю, что вручную компиляция звуков напоминает скорее трату времени на игру, которую я не желаю, поэтому я буду использовать инструмент командной строки, пока не получу VMime и не буду работать, но еще раз спасибо за вашу помощь. – uhuyt845

Смежные вопросы