|
|
|
@ -1,10 +1,9 @@
|
|
|
|
|
import imaplib
|
|
|
|
|
import pprint
|
|
|
|
|
import email.message
|
|
|
|
|
import email.charset
|
|
|
|
|
import pathlib
|
|
|
|
|
import time
|
|
|
|
|
import os
|
|
|
|
|
import imap_settings as settings
|
|
|
|
|
from secrets import token_urlsafe
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def connect():
|
|
|
|
@ -12,6 +11,9 @@ def connect():
|
|
|
|
|
server = imaplib.IMAP4_SSL(settings.IMAP_HOST)
|
|
|
|
|
server.login(settings.IMAP_USER, settings.IMAP_PWD)
|
|
|
|
|
tmp, data = server.select('Inbox')
|
|
|
|
|
|
|
|
|
|
#When you connect to the inbox one of the parameters returned is the current
|
|
|
|
|
#number of messages in it
|
|
|
|
|
if os.environ.get('NUMMESSAGES') is None:
|
|
|
|
|
os.environ["NUMMESSAGES"] = data[0].decode("UTF-8")
|
|
|
|
|
|
|
|
|
@ -24,16 +26,14 @@ def bytesmessage_to_string(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"))
|
|
|
|
|
tmp, data = server.append(inbox, flags='', date_time=time.time(), message=str(msg).encode("UTF-8"))
|
|
|
|
|
server.close()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def recv_all(inbox):
|
|
|
|
|
def recv_all():
|
|
|
|
|
"""receive a list of all MIME messages from inbox newer than the last message when first connected"""
|
|
|
|
|
print("recieve imap")
|
|
|
|
|
|
|
|
|
|
server = connect()
|
|
|
|
|
r = []
|
|
|
|
@ -58,7 +58,7 @@ def clean_inbox():
|
|
|
|
|
"""clean all messsages from IMAP inbox"""
|
|
|
|
|
print('cleaning IMAP...')
|
|
|
|
|
server = connect()
|
|
|
|
|
typ, data = server.search(None, 'ALL')
|
|
|
|
|
tmp, data = server.search(None, 'ALL')
|
|
|
|
|
for num in data[0].split():
|
|
|
|
|
server.store(num, '+FLAGS', '\\Deleted')
|
|
|
|
|
server.expunge()
|
|
|
|
@ -66,3 +66,28 @@ def clean_inbox():
|
|
|
|
|
print('IMAP inbox empty.')
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def backup_inbox():
|
|
|
|
|
"""copy all messsages from IMAP to local backup folder"""
|
|
|
|
|
server = connect()
|
|
|
|
|
tmp, data = server.search(None, 'ALL')
|
|
|
|
|
for num in data[0].split():
|
|
|
|
|
tmp, data = server.fetch(num, '(RFC822 BODY[HEADER])')
|
|
|
|
|
device = str(data[0][1]).split('From: "')[1].split(' of')[0]
|
|
|
|
|
name = device + "_" + token_urlsafe(16) + ".eml"
|
|
|
|
|
msg = bytesmessage_to_string(data[0][1])
|
|
|
|
|
with open(os.path.join('Backup/TestInbox',name), "wb") as f:
|
|
|
|
|
f.write(str(msg).encode())
|
|
|
|
|
|
|
|
|
|
server.close()
|
|
|
|
|
|
|
|
|
|
def restore_inbox():
|
|
|
|
|
"""copy all the messages from the Backup folder to the IMAP inbox"""
|
|
|
|
|
server = connect()
|
|
|
|
|
backups = pathlib.Path("./Backup/TestInbox")
|
|
|
|
|
emails = backups.glob("*.eml")
|
|
|
|
|
l = [ path for path in emails ]
|
|
|
|
|
for p in l:
|
|
|
|
|
with open(p, "rb") as f:
|
|
|
|
|
tmp, data = server.append("Inbox", flags='', date_time=p.stat().st_ctime, message=f.read(-1))
|
|
|
|
|
|
|
|
|
|
server.close()
|
|
|
|
|