# AttachCheck -- A MTA wrapper to help check outgoing email for
# forgotten attachments.
-# (c) 2005 -- Benjamin Mako Hill <mako@bork.hampshire.edu>
-# Author/Software Homepage at: http://mako.cc
+# (c) 2004-2009 -- Benjamin Mako Hill <mako@atdot.cc>
+# Software Homepage at: http://mako.cc/projects/attachcheck
-# This software comes with ABSOLUTELY NO WARRANTY.
-# This is free software and is licensed under the GNU GPL.
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or (at
+# your option) any later version.
-__copyright__ = "Copyright (c) 2004 Benjamin Mako Hill"
-__author__ = "Benjamin Mako Hill <mako@debian.org>"
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+__copyright__ = "Copyright (c) 2004-2009 Benjamin Mako Hill"
+__author__ = "Benjamin Mako Hill <mako@atdot.cc>"
### Configuration Options
###########################################
# 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)' ]
+ r'\balleg(o|at[oaie]|ando)(?im)' ]
+# ignore quoted text (which might refer to attachments in previous emails)
+attachment_regexes = [ r'(^|^[^\n>].*)' + x for x in attachment_regexes ]
### No Edit Below This Line
###########################################
def send_message():
global sendmail
- sendmail = sendmail + " " + " ".join( sys.argv[1:] )
-
- mailpipe = os.popen("%s" % sendmail, 'w')
+
+ # construct the sendmail pipe more safely (thanks iain murray!)
+ cmd = sys.argv[:]
+ cmd[0] = sendmail
+
+ from subprocess import Popen, PIPE
+ process = Popen(cmd, stdin=PIPE)
+ mailpipe = process.stdin
mailpipe.write( message_string )
- sys.exit( mailpipe.close() )
+ mailpipe.close()
+ sys.exit( process.wait() )
## SUB: print error message
def print_error():