summaryrefslogtreecommitdiff
path: root/emailcanary/emailutils.py
blob: 2358a3a5800fd38e65ee7d79e2ec223105f89446 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
import sys
import imaplib, email


def get_imap(server, username, password):
    '''Connect and login via IMAP'''
    try:
        mail = imaplib.IMAP4_SSL(server)
        mail.login(username, password)
        return mail
    except Exception as e:
        sys.stderr.write("Error connecting to %s@%s: %s\n\n" % (username, server, str(e)))
        return None

def get_mail_uids(mail):
    '''Return a list of message UIDs in the inbox'''
    if mail is None:
        return []
    mail.select("inbox") # connect to inbox.
    result, data = mail.uid('search', None, "ALL") # search and return uids instead
    return data[0].split()

def get_message(mail, uid):
    '''Get a single email message object by UID'''
    if mail is None:
        return None
    result, data = mail.uid('fetch', uid, '(RFC822)')
    if result == 'OK':
        dat0 = data[0]
        if dat0 is None:
            return None
        else:
            raw_email = dat0[1]
            return email.message_from_bytes(raw_email)
    else:
        raise Exception("Bad response from server: %s" % (result))

def delete_message(mail, uid):
    if mail is None:
        return
    result = mail.uid('store', uid, '+FLAGS', '(\Deleted)')

def close(mail):
    if mail is None:
        return
    mail.expunge()
    mail.close()
    mail.logout()