У меня есть часть C ++, которая делает вызовы IMAP (чтобы прочитать содержимое почтового ящика). Это прекрасно работает большую часть времени. Однако бывают периоды, когда я получаю много invalid credential (CURLE_LOGIN_DENIED )
ответов от cURL, в то время как я проверяю и имя пользователя, и пароль (они верны, то же самое с действительными вызовами).
Тем не менее, ответ IMAP дает мне Invalid credentials
-ответ. Почтовый ящик размещен на Office365, поэтому я не думаю, что узким местом здесь является сервер, поскольку он большой игрок?
Что может быть не так? Я выполнял отладку в течение нескольких дней, но не могу найти проблему.
Примечание: даже если я установил жестко закодированную комбинацию имени пользователя и пароля, иногда она все равно дает сбой. Так что, похоже, он связан с сервером?
cURL-запрос:
string CurlContent;
CURL *curl = curl_easy_init();
struct curl_slist *LibcurlHeaders = NULL;
if (curl) {
string host = [IMAP ADDRESS HERE];
LibcurlHeaders = curl_slist_append(LibcurlHeaders, "Expect:");
curl_easy_setopt(curl, CURLOPT_URL, host.c_str());
curl_easy_setopt(curl, CURLOPT_USERNAME, [USERNAME HERE]);
curl_easy_setopt(curl, CURLOPT_PASSWORD, [PASSWORD HERE]);
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, LibcurlHeaders);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, LibcurlResponse);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &CurlContent);
CURLcode res = curl_easy_perform(curl);
curl_easy_cleanup(curl);
curl_slist_free_all(LibcurlHeaders);
if (res == CURLE_OK) {
//ALL FINE
}
else if (res == CURLE_LOGIN_DENIED) {
//INVALID CREDENTIALS. THIS HAPPENS A LOT FOR CERTAIN PERIODS
}
else if (res == CURLE_OPERATION_TIMEDOUT) {
//TIMEOUTS SOMETIMES OCCUR AS WELL
}
else {
//UNSPECIFIED ERROR. NEVER OCCURS
}
}