#!/usr/bin/python
import poplib, email, getpass, getopt, sys

#Variables
server = "host"
port = 0
user = "user"
passwd = "pass"
subject = ""
msgCount = 0
verbose = False
useSSL = False
statusOK = 0
statusWARN = 1
statusCRIT = 2
statusUNKN = 3

options, remainder = getopt.getopt(sys.argv[1:], 'H:U:P:p:s:Sdv', ['hostname=','username','port','password','subject','verbose','deleteall','ssl'])
for opt, arg in options:
    if opt in ('-H', '--hostname'):
        server = arg
    elif opt in ('-U', '--username'):
        user = arg
    elif opt in ('-P', '--password'):
        passwd = arg
    elif opt in ('-p', '--port'):
        port = arg
    elif opt in ('-s', '--subject'):
        subject = arg
    elif opt in ('-d', '--deleteall'):
        subject = ""
    elif opt in ('-S', '--ssl'):
        useSSL = True
    elif opt in ('-v', '--verbose'):
        verbose = True

if useSSL:
    if port is 0:
        port = 995
else:
    if port is 0:
        port = 110

if verbose:
    print 'ARGV      :', sys.argv[1:]
    print 'OPTIONS   :', options
    print 'HOSTNAME   :', server
    print 'USERNAME   :', user
    print 'PASSWORD   :', passwd
    print 'PORT       :', port
    print 'SUBJECT    :', subject
    print 'SSL        :', useSSL
    print 'VERBOSE    :', verbose

#Setup connection to server
if useSSL:
    pop = poplib.POP3_SSL(server, port)
else:
    pop = poplib.POP3(server, port)
#Try logging in

try:
    pop.user(user)
    pop.pass_(passwd)
#If failure say so with error
except poplib.error_proto, e:
    print "Login failed:", e
#Else start reading mailbox
else:

    #Get the number of mail messages
    numMessages = len(pop.list()[1])

    if verbose:
        print "You have %d messages." % (numMessages)
        print "Message List:"

    #List the subject line of each message
    for mList in range(numMessages) :
        for msg in pop.retr(mList+1)[1]:
            if msg.startswith("Subject: "+subject):
                msgCount = msgCount+1
                if verbose:
                    print '\t' + msg
                pop.dele(mList+1)
                break
    if verbose:
        print"%d Messages Deleted" % (msgCount)
pop.quit()

if msgCount is 0:
        print "POP3 RECEIVE CRITICAL: no messages found"
        sys.exit(statusCRIT)
else:
        print "POP3 RECEIVE OK: %d found, %d deleted" % (numMessages, msgCount)
        sys.exit(statusOK)

