我正在使用libcurl和IMAP從電子郵件收件箱提取消息。我可以完全獲取消息,但我無法獲取標題字段;我的curl寫函數只返回第一行。C++ 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}
在fetched.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
似乎有所有的信息。
write_data()函數中的'buf'參數不是空終止的,而是'cout << buf;'要求的。您正在打印周圍內存的內容。緩衝區只是原始字節,這就是爲什麼你給緩衝區大小作爲另一個參數。 – 2014-11-24 23:19:46
你可以,或者你可以使用一個臨時的'std :: string'代替:'cout << string(buf,size * nmemb);' – 2014-11-24 23:23:02
但是緩衝區包含我需要的東西,看起來'write_data()'是通過了錯誤的大小? – 2014-11-24 23:23:06