base64 support by Sjoerd.
diff --git a/Lib/mimify.py b/Lib/mimify.py
index 15f0981..c8af623 100755
--- a/Lib/mimify.py
+++ b/Lib/mimify.py
@@ -31,7 +31,7 @@
 
 qp = regex.compile('^content-transfer-encoding:[ \t]*quoted-printable',
 		   regex.casefold)
-base64 = regex.compile('^content-transfer-encoding:[ \t]*base64',
+base64_re = regex.compile('^content-transfer-encoding:[ \t]*base64',
 		       regex.casefold)
 mp = regex.compile('^content-type:[\000-\377]*multipart/[\000-\377]*boundary="?\\([^;"\n]*\\)',
 		   regex.casefold)
@@ -115,10 +115,11 @@
 		line = line[i + len(match[0]):]
 	return newline + line
 
-def unmimify_part(ifile, ofile):
+def unmimify_part(ifile, ofile, decode_base64 = 0):
 	'''Convert a quoted-printable part of a MIME mail message to 8bit.'''
 	multipart = None
 	quoted_printable = 0
+	is_base64 = 0
 	is_repl = 0
 	if ifile.boundary and ifile.boundary[:2] == QUOTE:
 		prefix = QUOTE
@@ -140,6 +141,9 @@
 		if qp.match(line) >= 0:
 			quoted_printable = 1
 			continue	# skip this header
+		if decode_base64 and base64_re.match(line) >= 0:
+			is_base64 = 1
+			continue
 		ofile.write(pref + line)
 		if not prefix and repl.match(line) >= 0:
 			# we're dealing with a reply message
@@ -173,7 +177,7 @@
 			if line == multipart + '\n':
 				ofile.write(pref + line)
 				nifile = File(ifile, multipart)
-				unmimify_part(nifile, ofile)
+				unmimify_part(nifile, ofile, decode_base64)
 				line = nifile.peek
 				continue
 			# not a boundary between parts
@@ -186,10 +190,13 @@
 					newline = newline[len(QUOTE):]
 				line = line + newline
 			line = mime_decode(line)
+		if line and is_base64 and not pref:
+			import base64
+			line = base64.decodestring(line)
 		if line:
 			ofile.write(pref + line)
 
-def unmimify(infile, outfile):
+def unmimify(infile, outfile, decode_base64 = 0):
 	'''Convert quoted-printable parts of a MIME mail message to 8bit.'''
 	if type(infile) == type(''):
 		ifile = open(infile)
@@ -204,7 +211,7 @@
 	else:
 		ofile = outfile
 	nifile = File(ifile, None)
-	unmimify_part(nifile, ofile)
+	unmimify_part(nifile, ofile, decode_base64)
 	ofile.flush()
 
 mime_char = regex.compile('[=\240-\377]') # quote these chars in body
@@ -285,7 +292,7 @@
 			has_cte = 1
 			if qp.match(line) >= 0:
 				is_qp = 1
-			elif base64.match(line) >= 0:
+			elif base64_re.match(line) >= 0:
 				is_base64 = 1
 		if mp.match(line) >= 0:
 			multipart = '--' + mp.group(1)
@@ -405,11 +412,13 @@
 	import getopt
 	usage = 'Usage: mimify [-l len] -[ed] [infile [outfile]]'
 
-	opts, args = getopt.getopt(sys.argv[1:], 'l:ed')
+	decode_base64 = 0
+	opts, args = getopt.getopt(sys.argv[1:], 'l:edb')
 	if len(args) not in (0, 1, 2):
 		print usage
 		sys.exit(1)
-	if (('-e', '') in opts) == (('-d', '') in opts):
+	if (('-e', '') in opts) == (('-d', '') in opts) or \
+	   ((('-b', '') in opts) and (('-d', '') not in opts)):
 		print usage
 		sys.exit(1)
 	for o, a in opts:
@@ -423,9 +432,14 @@
 			except:
 				print usage
 				sys.exit(1)
+		elif o == '-b':
+			decode_base64 = 1
 	if len(args) == 0:
-		encode(sys.stdin, sys.stdout)
+		encode_args = (sys.stdin, sys.stdout)
 	elif len(args) == 1:
-		encode(args[0], sys.stdout)
+		encode_args = (args[0], sys.stdout)
 	else:
-		encode(args[0], args[1])
+		encode_args = (args[0], args[1])
+	if decode_base64:
+		encode_args = encode_args + (decode_base64,)
+	apply(encode, encode_args)