97 lines
2.6 KiB
Python
Executable File
97 lines
2.6 KiB
Python
Executable File
#!/usr/bin/env python
|
|
#
|
|
# Very basic example of using Python and IMAP to iterate over emails in a
|
|
# gmail folder/label. This code is released into the public domain.
|
|
#
|
|
# http://www.voidynullness.net/blog/2013/07/25/gmail-email-with-python-via-imap/
|
|
#
|
|
import sys
|
|
import imaplib
|
|
import getpass
|
|
import email
|
|
import email.header
|
|
import datetime
|
|
import argparse
|
|
|
|
|
|
def process_mailbox(M):
|
|
"""
|
|
Do something with emails messages in the folder.
|
|
For the sake of this example, print some headers.
|
|
"""
|
|
|
|
rv, data = M.search(None, "ALL")
|
|
if rv != 'OK':
|
|
print("No messages found!")
|
|
return
|
|
|
|
for num in data[0].split():
|
|
rv, data = M.fetch(num, '(RFC822)')
|
|
if rv != 'OK':
|
|
print("ERROR getting message", num)
|
|
return
|
|
|
|
msg = email.message_from_string(data[0][1])
|
|
decode = email.header.decode_header(msg['Subject'])[0]
|
|
subject = unicode(decode[0])
|
|
print('Message %s: %s' % (num, subject))
|
|
print('Raw Date:', msg['Date'])
|
|
# Now convert to local date-time
|
|
date_tuple = email.utils.parsedate_tz(msg['Date'])
|
|
if date_tuple:
|
|
local_date = datetime.datetime.fromtimestamp(
|
|
email.utils.mktime_tz(date_tuple))
|
|
print("Local Date:",
|
|
local_date.strftime("%a, %d %b %Y %H:%M:%S"))
|
|
|
|
|
|
#Parsing arguments
|
|
parser = argparse.ArgumentParser(description='Recurse over each email of imap directory')
|
|
|
|
parser.add_argument('-u', '--username',
|
|
action="store", dest="username",
|
|
help="Username", required=True)
|
|
|
|
parser.add_argument('-p', '--password',
|
|
action="store", dest="password",
|
|
help="Password", required=True)
|
|
|
|
parser.add_argument('-s', '--server',
|
|
action="store", dest="server",
|
|
help="Imap server", required=True)
|
|
|
|
parser.add_argument('-S', '--ssl',
|
|
action="store", dest="ssl",
|
|
help="using ssl or not (imaps vs imap)", default="true", choices=['false', 'true'])
|
|
|
|
options = parser.parse_args()
|
|
|
|
if options.ssl == "true" :
|
|
imap_ressource = imaplib.IMAP4_SSL(options.server)
|
|
else :
|
|
imap_ressource = imaplib.IMAP4(options.server)
|
|
|
|
|
|
try:
|
|
rv, data = imap_ressource.login(options.username, options.password)
|
|
except imaplib.IMAP4.error:
|
|
print("LOGIN FAILED!!! ")
|
|
sys.exit(1)
|
|
|
|
print(rv, data)
|
|
|
|
rv, mailboxes = imap_ressource.list()
|
|
if rv == 'OK':
|
|
print("Mailboxes:")
|
|
print(mailboxes)
|
|
|
|
rv, data = imap_ressource.select(EMAIL_FOLDER)
|
|
if rv == 'OK':
|
|
print("Processing mailbox...\n")
|
|
process_mailbox(M)
|
|
imap_ressource.close()
|
|
else:
|
|
print("ERROR: Unable to open mailbox ", rv)
|
|
|
|
imap_ressource.logout()
|