From: Benjamin Mako Hill Date: Thu, 13 Apr 2023 21:11:28 +0000 (-0700) Subject: minor tweak to make the last patch actually land... X-Git-Url: https://projects.mako.cc/source/attachcheck/commitdiff_plain/HEAD?hp=e1c3042eba5989f7db537ceda2766e08c15f9b59;ds=inline minor tweak to make the last patch actually land... --- diff --git a/README.rst b/README.rst index b651dcb..9a5a4b3 100644 --- a/README.rst +++ b/README.rst @@ -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 diff --git a/attachcheck b/attachcheck index e633291..19159e4 100755 --- a/attachcheck +++ b/attachcheck @@ -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)