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
 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
 
 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
 
 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
 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.
 
 # 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
 
 # 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)
 
 # 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
 ###########################################
 
 ### No Edit Below This Line
 ###########################################
@@ -49,7 +49,7 @@ import email
 import re
 
 ## SUB: send message
 import re
 
 ## SUB: send message
-def send_message(): 
+def send_message(message):
 
     global sendmail
 
 
     global sendmail
 
@@ -60,13 +60,13 @@ def send_message():
     from subprocess import Popen, PIPE
     process = Popen(cmd, stdin=PIPE)
     mailpipe = process.stdin
     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():
     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:
 """(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.
 
 
  (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
     
 # 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
 
 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
                 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
 
            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:
     # 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 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()
             
         else:
             print_error()
@@ -147,4 +148,4 @@ if attachment_expected:
 
 # if we are not expecting anything more, we should send the message
 else:
 
 # 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?