Как скачать все письма с помощью FETCH по IMAP используя pycurl
Я пытаюсь получить все письма в директории IMAP с помощью pycurl.
К примеру таким образом я получаю список директорий:
import pycurl
import certifi
with open('mail.txt', 'wb') as f:
c = pycurl.Curl()
c.setopt(pycurl.CAINFO, certifi.where())
c.setopt(c.URL, 'imaps://imap.example.com/')
c.setopt(c.USERPWD, '[email protected]:password')
c.setopt(c.WRITEDATA, f)
c.perform()
c.close()
Далее, мне необходимо получить все письма каждой дериктории. Это делается, с помощью команды FETCH 1:*
С помощью curl команда которая мне нужна выглядит следующим образом:
curl imaps://imap.example.com/ --user "[email protected]:password" -X "FETCH 1:* (BODY[TEXT])" --ssl --verbose
Насколько я понял, то параметр -X в pycurl это POSTFIELDS
Получается, что запрос вышенаписанной мною команды с помощью pycurl будет выглядеть так:
with open('mail.txt', 'wb') as f:
c = pycurl.Curl()
c.setopt(pycurl.CAINFO, certifi.where())
c.setopt(c.URL, 'imaps://imap.example.com/INBOX')
c.setopt(c.USERPWD, '[email protected]:password')
c.setopt(c.POSTFIELDS, 'FETCH 1:* (BODY[TEXT])')
c.setopt(c.WRITEDATA, f)
c.perform()
c.close()
Но данная комманда не работает, и возвращает все тот-же список директорий. Если у кого-нибудь был подобный опыт, прошу подскажите что я делаю не так.
Ответы (1 шт):
Нашел ответ на собственный вопрос. Согласно документации по libcurl API, параметр -X это не POSTFIELDS а CUSTOMREQUEST
https://curl.haxx.se/libcurl/c/curl_easy_setopt.html
То есть конечный код будет выглядеть так:
with open('mail.txt', 'wb') as f:
c = pycurl.Curl()
c.setopt(pycurl.CAINFO, certifi.where())
c.setopt(c.URL, 'imaps://imap.example.com/INBOX')
c.setopt(c.USERPWD, '[email protected]:password')
c.setopt(c.CUSTOMREQUEST, 'FETCH 1:* (BODY[TEXT])')
c.setopt(c.WRITEDATA, f)
c.perform()
c.close()
Другое дело, что curl возвращает только заголовки писем. Само тело писем он возвращает, только при включенном c.setopt(c.VERBOSE, 1)
И то, не пишет в файл, а просто принтит в терминал