Initial commit
This commit is contained in:
commit
3edb5c4963
3
README
Normal file
3
README
Normal file
|
@ -0,0 +1,3 @@
|
|||
Python IMAP mail archiver
|
||||
|
||||
Set username, password and server in the script and go.
|
40
mailarchiver
Executable file
40
mailarchiver
Executable file
|
@ -0,0 +1,40 @@
|
|||
#!/usr/bin/python
|
||||
import imaplib, mailbox
|
||||
import sys, re, os
|
||||
|
||||
user=''
|
||||
passwd=''
|
||||
imap_server = ''
|
||||
mailbox = 'Inbox.Sent'
|
||||
mbox = "test.mbox"
|
||||
|
||||
def connectIMAP():
|
||||
imap = imaplib.IMAP4_SSL(imap_server)
|
||||
imap.login(user, passwd)
|
||||
return imap
|
||||
|
||||
# Scans a mailbox and returns a dictionary of the ids
|
||||
def scanMailbox(imap, mailbox):
|
||||
messages_by_id = {}
|
||||
typ, data = imap.select(mailbox, readonly = True)
|
||||
if 'OK' != typ:
|
||||
print ("Failed: %s" % (data))
|
||||
num_msg = int(data[0])
|
||||
for i in range(1, num_msg+1):
|
||||
typ, data = imap.fetch(i, '(BODY.PEEK[HEADER.FIELDS (MESSAGE-ID)])')
|
||||
if 'OK' != typ:
|
||||
print ("FETCH command failed: %s" % (i, data))
|
||||
mail_header = data[0][1].strip()
|
||||
msg_id = re.compile("^Message\-Id\: (.+)", re.IGNORECASE + re.MULTILINE).match(mail_header).group(1)
|
||||
if msg_id not in messages_by_id.keys():
|
||||
messages_by_id[msg_id] = i
|
||||
print ( "%d messages in %s" % (len(messages_by_id.keys()), mailbox))
|
||||
return messages_by_id
|
||||
|
||||
def downloadMail():
|
||||
print ("I'm learnding")
|
||||
|
||||
if __name__ == '__main__':
|
||||
imap = connectIMAP()
|
||||
scanMailbox(imap, mailbox)
|
||||
downloadMail()
|
Loading…
Reference in New Issue
Block a user