popcount.py

#!/usr/bin/env python

"""
$Id: popcount.py 275 2001-11-05 13:24:03Z david $

Counts the number of mail items awaiting retrieval
from a user"s POP3 mailbox.

Usage: popcount.py <POP3 server> <username>
"""


import getpass, poplib, sys, socket


USAGE = "Usage: %s <server> <username>" % sys.argv[0]


def die (reason=None):
	"""
	This exits the application with an error status
	code, and optionally displays a reason.
	"""
	if reason:
		sys.stderr.write(reason + "\n")
	sys.exit(1)


def popcount (hostname, username, password):
	"""
	Checks a given POP3 server using a given username
	and password, then returns a count of the number
	of messages awaiting retrieval.
	"""
	nMessages = 0
	try:
		popserver = poplib.POP3(hostname)
		popserver.user(username)
		popserver.pass_(password)
		nMessages = len(popserver.list()[1])
		popserver.quit()
	except poplib.error_proto, reason:
		die("Error: %s" % reason)
	except socket.error, reason:
		die("Error: %s" % reason)
	return nMessages


def main ():
	"""
	Allows popcount to be run as a simple UNIX command
	line utility.
	"""
	try:
		# Get command line arguments
		hostname = sys.argv[1]
		username = sys.argv[2]
	except IndexError:
		# Not supplied, print usage
		die(USAGE)
	password  = getpass.getpass()
	nMessages = popcount(hostname, username, password)
	print "You have %d messages awaiting retrieval" % nMessages


if __name__ == "__main__":
	main()