Patch by Mike Meyer:

Add a class to mailbox.py for dealing with qmail directory mailboxes.
The test code was extended to notice these being used as well.
diff --git a/Lib/mailbox.py b/Lib/mailbox.py
index a8f705c..f965b0f 100755
--- a/Lib/mailbox.py
+++ b/Lib/mailbox.py
@@ -155,8 +155,36 @@
 		del self.boxes[0]
 		fp = open(os.path.join(self.dirname, fn))
 		return rfc822.Message(fp)
-	    
-    
+
+class Maildir:
+
+	# Qmail directory mailbox
+
+	def __init__(self, dirname):
+		import string
+		self.dirname = dirname
+		self.boxes = []
+
+		# check for new mail
+		newdir = os.path.join(self.dirname, 'new')
+		for file in os.listdir(newdir):
+			if len(string.split(file, '.')) > 2:
+				self.boxes.append(os.path.join(newdir, file))
+
+		# Now check for current mail in this maildir
+		curdir = os.path.join(self.dirname, 'cur')
+		for file in os.listdir(curdir):
+			if len(string.split(file, '.')) > 2:
+				self.boxes.append(os.path.join(curdir, file))
+
+	def next(self):
+		if not self.boxes:
+			return None
+		fn = self.boxes[0]
+		del self.boxes[0]
+		fp = open(os.path.join(self.dirname, fn))
+		return rfc822.Message(fp)
+
 class BabylMailbox(_Mailbox):
 
 	def _search_start(self):
@@ -186,7 +214,7 @@
 
 	args = sys.argv[1:]
 	if not args:
-		for key in 'MAIL', 'LOGNAME', 'USER':
+		for key in 'MAILDIR', 'MAIL', 'LOGNAME', 'USER':
 			if os.environ.has_key(key):
 				mbox = os.environ[key]
 				break
@@ -200,7 +228,10 @@
 	elif not '/' in mbox:
 		mbox = '/usr/mail/' + mbox
 	if os.path.isdir(mbox):
-		mb = MHMailbox(mbox)
+		if os.path.isdir(os.path.join(mbox, 'cur')):
+			mb = Maildir(mbox)
+		else:
+			mb = MHMailbox(mbox)
 	else:
 		fp = open(mbox, 'r')
 		mb = UnixMailbox(fp)