You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
68 lines
1.7 KiB
68 lines
1.7 KiB
import imaplib
|
|
import pprint
|
|
import email.message
|
|
import email.charset
|
|
import time
|
|
import os
|
|
import imap_settings as settings
|
|
|
|
|
|
def connect():
|
|
"connect to the IMAP server Inbox"
|
|
server = imaplib.IMAP4_SSL(settings.IMAP_HOST)
|
|
server.login(settings.IMAP_USER, settings.IMAP_PWD)
|
|
tmp, data = server.select('Inbox')
|
|
if os.environ.get('NUMMESSAGES') is None:
|
|
os.environ["NUMMESSAGES"] = data[0].decode("UTF-8")
|
|
|
|
return server
|
|
|
|
def bytesmessage_to_string(msg):
|
|
"converts bytes-like message to string"
|
|
msg = msg.decode("UTF-8").rstrip()
|
|
return msg
|
|
|
|
def send(inbox, msg):
|
|
"send msg to inbox in MIME format"
|
|
print("send imap")
|
|
|
|
server = connect()
|
|
tmp, data = server.append('Inbox', '', imaplib.Time2Internaldate(time.time()), str(msg).encode("UTF-8"))
|
|
server.close()
|
|
|
|
|
|
def recv_all(inbox):
|
|
"""receive a list of all MIME messages from inbox newer than the last message when first connected"""
|
|
print("recieve imap")
|
|
|
|
server = connect()
|
|
r = []
|
|
|
|
tmp, data = server.search(None, 'ALL')
|
|
|
|
oldermsgid = os.environ.get('NUMMESSAGES')
|
|
|
|
for num in data[0].split():
|
|
if int(num) >= int(oldermsgid):
|
|
tmp, data = server.fetch(num, '(RFC822)')
|
|
msg = bytesmessage_to_string(data[0][1])
|
|
r.append((num, msg))
|
|
os.environ["NUMMESSAGES"] = num.decode("UTF-8")
|
|
|
|
server.close()
|
|
|
|
return r
|
|
|
|
|
|
def clean_inbox():
|
|
"""clean all messsages from IMAP inbox"""
|
|
print('cleaning IMAP...')
|
|
server = connect()
|
|
typ, data = server.search(None, 'ALL')
|
|
for num in data[0].split():
|
|
server.store(num, '+FLAGS', '\\Deleted')
|
|
server.expunge()
|
|
server.close()
|
|
print('IMAP inbox empty.')
|
|
|
|
|
|
|