Проверка важной почты через cURL

У меня есть программка, которая при наличии непрочитанной почты на GMail мигает иконкой-уведомлением. Просто наличие почты по POP3 через URL pop3s://pop.gmail.com я получаю, но теперь хочу исправить программу и мигать только если есть именно важная мне почта - по from.

Так что хочу добиться следующей функциональности на С++ с использованием cURL - есть аккаунт GMail, я хочу заходить туда, смотреть непрочитанные письма - чтобы понимать, от кого они, и если там есть что-то от важных мне отправителей - давать Notify иконку. При этом почта не должна быть затронута - ну, в смысле, ели зайти почтовой программой по POP3 - то она ее заберет.

Как при этом быть с почтой? Как я понимаю, по POP3 ее нельзя забирать - помешаю почтовой программе.

Наверное, надо через IMAP? Подскажите, как на С++ залезть в GMail, посмотреть входящую непрочитанную почту и скачать заголовки (меня интересует в первую очередь from этих писем), но при этом чтоб не мешать GMail ее потом отдать по POP3. Если покажите где-то пример и описание - было бы отлично.

Пока с таким

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

захожу и ответ получаю, но что в нем искать и как - что-то найти не могу.


Ответы (1 шт):

Автор решения: GoodOkk

По POP3 протоколу можно все узнать по перечню сообщений в почтовом ящике и это никак не повлияет на работу почтовой программы, если только вы сами не пометите сообщение для удаления. Я даже не знал, что curl поддерживает pop3, но попробуйте поэкспериментировать с командами, передаваемые в заголовках апи, вот к примеру, удаление письма:

#include <stdio.h>
#include <curl/curl.h>
 
int main(void)
{
  CURL *curl;
  CURLcode res = CURLE_OK;
 
  curl = curl_easy_init();
  if(curl) {
    /* Set username and password */
    curl_easy_setopt(curl, CURLOPT_USERNAME, "user");
    curl_easy_setopt(curl, CURLOPT_PASSWORD, "secret");
 
    /* You can specify the message either in the URL or DELE command */
    curl_easy_setopt(curl, CURLOPT_URL, "pop3://pop.example.com/1");
 
    /* Set the DELE command */
    curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELE");
 
    /* Do not perform a transfer as DELE returns no data */
    curl_easy_setopt(curl, CURLOPT_NOBODY, 1L);
 
    /* Perform the custom request */
    res = curl_easy_perform(curl);
 
    /* Check for errors */
    if(res != CURLE_OK)
      fprintf(stderr, "curl_easy_perform() failed: %s\n",
              curl_easy_strerror(res));
 
    /* Always cleanup */
    curl_easy_cleanup(curl);
  }
 
  return (int)res;
}

https://ru.wikipedia.org/wiki/POP3 Тут примеры команд и ссылки на RFC.

→ Ссылка