Я использую libcurl с IMAP для получения сообщений из почтового ящика. Я могу получить сообщения полностью, но не могу получить поле заголовка; моя функция записи для завитка возвращает только первую строку.
Вот мой код:
std::string fetchdata;
size_t write_data(char* buf, size_t size, size_t nmemb, void* up) {
fetchdata.append((char*)buf, size*nmemb);
return size*nmemb;
}
int fetchmail() {
CURL *curl;
CURLcode res = CURLE_OK;
curl = curl_easy_init();
if(curl) {
curl_easy_setopt(curl, CURLOPT_USERNAME, "[email protected]");
curl_easy_setopt(curl, CURLOPT_PASSWORD, "mypassword");
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
curl_easy_setopt(curl, CURLOPT_URL, "imaps://imap.gmail.com:993/INBOX");
curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "UID FETCH 10 BODY[HEADER.FIELDS (To)]");
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);
}
std::ofstream outfile("C:\\Path\\fetched.txt", std::ios_base::app);
outfile << fetchdata;
outfile.close();
return (int)res;
}
Запуск fetchmail
выходов
* 3 FETCH (UID 10 BODY[HEADER.FIELDS (To)] {29}
в извлеченном.txt. Однако это только первая строка; вывод консоли
* 3 FETCH (UID 10 BODY[HEADER.FIELDS (To)] {29}
To: [email protected]
)
A004 OK Success
Если я изменю write_data()
на
size_t write_data(char* buf, size_t size, size_t nmemb, void* up) {
fetchdata.append((char*)buf, size*nmemb);
std::cout << buf;
return size*nmemb;
}
он выводит
* 3 FETCH (UID 10 BODY[HEADER.FIELDS (To)] {29
To: [email protected]
)
A004 OK Success
ted. (Success)
(Success)
(Success)
WRITE] INBOX selected. (Success)
[UIDNEXT 12] Predicted next UID.
* OK [HIGHESTMODSEQ 1759]
A003 OK [READ-WRITE] INBOX selected. (Success)
* OK [HIGHESTMODSEQ 1759]
A003 OK [READ-WRITE] INBOX selected. (Success)
Это проблема с моим write_data()
? buf
, похоже, владеет всей информацией.