minor tweak to make the last patch actually land... master
authorBenjamin Mako Hill <mako@atdot.cc>
Thu, 13 Apr 2023 21:11:28 +0000 (14:11 -0700)
committerBenjamin Mako Hill <mako@atdot.cc>
Thu, 13 Apr 2023 21:11:28 +0000 (14:11 -0700)
README.rst
attachcheck

index b651dcbb643916ee6b4ad8c5618b2e162c5695be..9a5a4b3430258da6ce55b18def36da887c3d643a 100644 (file)
@@ -16,13 +16,13 @@ send the message sans attachment.
 AttachCheck It was written in Benjamin Mako Hill. You can find the
 latest version of this program, more information, and some of Mako's
 sometime accidentally insightful or useful ideas at his eponymous
-homepage at: http://mako.cc
+homepage at: https://mako.cc
 
 The AttachCheck website with the latest version of the program is always
-available here: http://mako.cc/projects/attachcheck/
+available here: https://mako.cc/projects/attachcheck/
 
 The latest version of source code is kepted in a Git repository at
-http://projects.mako.cc/source/?p=attachcheck and can be checked out or
+https://projects.mako.cc/source/attachcheck and can be checked out or
 branched with the command::
 
   git clone git://projects.mako.cc/attachcheck
index e633291c10340890abf45452aac7fe3cc3da871b..19159e456b692c37944fc37af05bbaca6598bb8c 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.
@@ -34,11 +34,11 @@ ignored_types = ( "applica/pgp-signat", "application/pgp-signature" )
 
 # list of regular expressions which we will view as being indicative
 # of an attachment
-attachment_regexes = [ r'\battach(ed|ment|ing)?\b(?im)',
-                       r'\balleg(o|at[oaie]|ando)(?im)' ]
+attachment_regexes = [ r'\battach(ed|ment|ing)?\b',
+                       r'\balleg(o|at[oaie]|ando)' ]
 
 # ignore quoted text (which might refer to attachments in previous emails)
-attachment_regexes = [ r'(^|^[^\n>].*)' + x for x in attachment_regexes ]
+attachment_regexes = [ r'(?im)(^|^[^\n>].*)' + x for x in attachment_regexes ]
 
 ### No Edit Below This Line
 ###########################################
@@ -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
@@ -109,8 +109,8 @@ for part in message.walk():
                 attachment_expected = True
 
     # check to see if this mime-type is something we can ignore
-    elif ( re.match( r'message/(?m)', part.get_content_type() ) or
-           re.match( r'multipart/(?m)', part.get_content_type() ) or
+    elif ( re.match( r'(?m)message/', part.get_content_type() ) or
+           re.match( r'(?m)multipart/', part.get_content_type() ) or
            part.get_content_type() in ignored_types ):
         continue
 
@@ -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?