L'analisi delle risposte IMAP in pitone
Domanda
Sto usando imaplib di lavorare con imap in python, tuttavia sembra che non dispone di mezzi per analizzare i dettagli di risposte IMAP. Ad esempio, interrogazione come:
msgdata = connection.fetch(num, "(BODY.PEEK[HEADER.FIELDS (FROM TO CC DATE SUBJECT MESSAGE-ID)] UID)")
dove num
è il numero del messaggio, per un server di posta elettronica può produrre (per esempio):
('OK', [('1234 (BODY[HEADER.FIELDS (FROM TO CC DATE SUBJECT MESSAGE-ID)] {123}', 'From: ...etc headers'), ' UID 3456)'])
e per un altro:
('OK', [('1234 (UID 3456 BODY[HEADER.FIELDS (FROM TO CC DATE SUBJECT MESSAGE-ID)] {123}', 'From: ...etc headers'), ')'])
Come si vede, i dettagli del messaggio sono diverse e UID è ancora in elemento diverso lì. Quindi la domanda è - c'è qualche libreria che permettesse di ordinare automaticamente fuori e astratti i dettagli di ciò particolare server di posta fa?
Soluzione
di Doug Hellman Python modulo della voce Settimana per imaplib è abbastanza ampio tutorial sul soggetto, ma è lontano a lungo per riprodurre qui.
Si potrebbe desiderare di utilizzare una libreria di livello superiore come IMAPClient per nascondere alcuni dei dettagli del protocollo IMAP .
Altri suggerimenti
Guardate Imbox, probabilmente troverete quello che state cercando https://pypi.org/project / imbox /
È possibile utilizzare il pacchetto imap_tools: https://pypi.org/project/imap-tools/
for message in mailbox.fetch():
message.uid # str or None, '123'
message.subject # str, 'some subject'
message.from_ # str, 'sender@ya.ru'
message.to # tuple, ('iam@goo.ru', 'friend@ya.ru', )
message.cc # tuple, ('cc@mail.ru', )
message.bcc # tuple, ('bcc@mail.ru', )
message.date # datetime.datetime, 1900-1-1 for unparsed, may be naive or with tzinfo
message.text # str, 'hi'
message.html # str, '<b>hi</b>'
message.flags # tuple, ('SEEN', 'FLAGGED', 'ENCRYPTED')
message.headers # dict, {'Received': ('from 1.m.net', 'from 2.m.net'), 'AntiVirus-Status': ('Clean',)}
message.attachments # [(str, bytes)], 'cat.jpg', b'\xff\xd8\xff\xe0\'
message.obj # original email.message.Message object
message.from_values # dict or None, {'email': 'sender@ya.ru', 'name': 'Ivan', 'full': 'Ivan <sender@ya.ru>'}
message.to_values # tuple, ({'email': '', 'name': '', 'full': ''},)
message.cc_values # tuple, ({'email': '', 'name': '', 'full': ''},)
message.bcc_values # tuple, ({'email': '', 'name': '', 'full': ''},)
message.date_str # original date str, 'Tue, 03 Jan 2017 22:26:59 +0500'