From b6434634799c3c5ddce74997a2f5705ec9011c52 Mon Sep 17 00:00:00 2001 From: Benjamin Mako Hill Date: Sun, 30 Sep 2018 10:30:50 -0500 Subject: [PATCH] move to python3 - 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 | 35 ++++++++++++++++++----------------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/attachcheck b/attachcheck index e633291..5580a32 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. @@ -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) -- 2.30.2