IMAP과 함께 libcurl을 사용하여 전자 메일받은 편지함에서 메시지를 가져옵니다. 메시지를 완전히 가져올 수는 있지만 헤더 필드를 가져올 수 없습니다. curl에 대한 write 함수는 첫 번째 줄만 반환합니다.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
출력 fetched.txt에서
* 3 FETCH (UID 10 BODY[HEADER.FIELDS (To)] {29}
실행 :
여기 내 코드입니다. 그러나 이것은 첫 번째 줄에 불과합니다. 콘솔 출력
* 3 FETCH (UID 10 BODY[HEADER.FIELDS (To)] {29}
To: [email protected]
)
A004 OK Success
내가이 내 write_data()
에 문제가
* 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()
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;
}
에 수정하는 경우?
buf
모든 정보가있는 것 같습니다.
'write_data()'함수의'buf' 매개 변수는 null로 끝나지 않지만'cout << buf;'는 그것을 필요로합니다. 주변 메모리의 내용을 인쇄하고 있습니다. 버퍼는 raw 바이트 일 뿐이므로 다른 매개 변수로 버퍼 크기가 지정됩니다. –
대신에 임시적인'std :: string'을 쓸 수 있습니다 :'cout << string (buf, size * nmemb);' –
그러나 버퍼에 내가 필요한 것을 포함하고 있다면'write_data()'가 잘못된 크기를 전달 했습니까? –