move to python3
authorBenjamin Mako Hill <mako@atdot.cc>
Sun, 30 Sep 2018 15:30:50 +0000 (10:30 -0500)
committerBenjamin Mako Hill <mako@atdot.cc>
Sun, 30 Sep 2018 15:30:50 +0000 (10:30 -0500)
- move the new system to python3
- rework the subject munging so that it doesn't involve working with the full
  message as string
- pass message object around explicitly

attachcheck

index e633291c10340890abf45452aac7fe3cc3da871b..5580a32ca68a9d835f7c72d6641041499006da90 100755 (executable)
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
 
 # AttachCheck -- A MTA wrapper to help check outgoing email for
 # forgotten attachments.
@@ -49,7 +49,7 @@ import email
 import re
 
 ## SUB: send message
-def send_message(): 
+def send_message(message):
 
     global sendmail
 
@@ -60,13 +60,13 @@ def send_message():
     from subprocess import Popen, PIPE
     process = Popen(cmd, stdin=PIPE)
     mailpipe = process.stdin
-    mailpipe.write( message_string )
+    mailpipe.write( message.as_string().encode() )
     mailpipe.close()
     sys.exit( process.wait() )
 
 ## SUB: print error message
 def print_error():
-    print >>sys.stderr, \
+    print(\
 """(Your message mentions attachments but does not include any.
 
 Either:
@@ -78,11 +78,11 @@ Either:
 
  (2) Add a \"X-AttachCheck-Override: Yes\" header the message.
 
-Read the documentation for AttachCheck for more details."""
+Read the documentation for AttachCheck for more details.""", file=sys.stderr)
     
 # get the mail from stdin
-message_string = sys.stdin.read()
-message = email.message_from_string( message_string )
+message_bytes = sys.stdin.buffer.read()
+message = email.message_from_bytes( message_bytes )
 
 attachment_expected = False
 attachment_seen = False
@@ -124,21 +124,22 @@ if attachment_expected:
     # if we are expecting an attachment and we've seen one, we should
     # send the file and be done with things
     if attachment_seen:
-        send_message()
+        send_message(message)
 
     # if we are expected have not seen it, we need to check to see if
     # the mail has been confirmed
 
     else:
         # check for the confirmation
-
-        if re.search( r'Subject: CONFIRM', message_string ):
-            message_string = re.sub( r'(Subject: )(CONFIRM )(.*?)\n',
-                                     r'\1\3\n', message_string )
-            send_message()
-
-        elif message.get( 'X-AttachCheck-Override' ) == "Yes":
-            send_message()
+        subject_string = message['Subject']
+        print(subject_string)
+        if re.search( r'^\s*CONFIRM', subject_string ):
+            subject_string = re.sub( r'(CONFIRM )(.*?)', r'\2', subject_string )
+            message['Subject'] = subject_string
+            send_message(message)
+
+        elif message['X-AttachCheck-Override'] == "Yes":
+            send_message(message)
             
         else:
             print_error()
@@ -147,4 +148,4 @@ if attachment_expected:
 
 # if we are not expecting anything more, we should send the message
 else:
-    send_message()
+    send_message(message)

Benjamin Mako Hill || Want to submit a patch?