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.
 
 
 

78 lines
2.1 KiB

import imaplib
import pprint
import email.message
import email.charset
import time
import sync_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)
server.select('Inbox')
return server
def pEpMessage_to_imap(msg):
"convert pEpMessage to python imap formatted string"
new_message = email.message.Message()
new_message["From"] = str(msg.from_).replace("\n", " ")
new_message["To"] = str(msg.to[0])
new_message["Subject"] = msg.shortmsg
if msg.opt_fields:
for field, value in msg.opt_fields.items():
new_message[field] = str(value).replace("\n", " ")
new_message.set_payload(msg.longmsg)
new_message.set_charset(email.charset.Charset("utf-8"))
encoded_message = str(new_message).encode("utf-8")
return encoded_message
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"
server = connect()
msg = pEpMessage_to_imap(msg)
print('******** sent msg *******')
print(msg)
server.append('Inbox', '', imaplib.Time2Internaldate(time.time()), msg)
server.close()
def recv_all(inbox, start_time):
"""receive a list of new MIME messages from inbox, which are newer than the
start_time"""
server = connect()
r = []
tmp, data = server.search(None, 'ALL')
# tmp, data = server.search(None, 'SENTSINCE {0}'.format(start_time.strftime("%d-%b-%Y %H:%M%S")))
for num in data[0].split():
tmp, data = server.fetch(num, '(RFC822)')
msg = bytesmessage_to_string(data[0][1])
r.append((num, msg))
print('******** recieved msg *******')
print(msg)
server.close()
return r
def clean_inbox():
print('clean IMAP')
server = connect()
typ, data = server.search(None, 'ALL')
for num in data[0].split():
server.store(num, '+FLAGS', '\\Deleted')
server.expunge()