aboutsummaryrefslogtreecommitdiffstats
path: root/script/handle-mail-replies
diff options
context:
space:
mode:
authorRobin Houston <robin.houston@gmail.com>2011-09-07 12:56:50 +0100
committerRobin Houston <robin.houston@gmail.com>2011-09-07 12:56:50 +0100
commit599330ac8f985768933236a2d761e9396735fdbb (patch)
tree584b88ed2620af10e83125e8cadf05cd051ee1e2 /script/handle-mail-replies
parent8978e9d23082732074cf447416625e1979d6f598 (diff)
New script to handle mail replies
Add a new script to handle email replies sent in response to track messages. At the moment this script just forwards the mail on to the email address specified in the config variable FORWARD_NONBOUNCE_RESPONSES_TO. Later it will handle bounces, too.
Diffstat (limited to 'script/handle-mail-replies')
-rwxr-xr-xscript/handle-mail-replies26
1 files changed, 26 insertions, 0 deletions
diff --git a/script/handle-mail-replies b/script/handle-mail-replies
new file mode 100755
index 000000000..e4faeef90
--- /dev/null
+++ b/script/handle-mail-replies
@@ -0,0 +1,26 @@
+#!/usr/bin/ruby
+
+# Handle email responses sent to us.
+#
+# This script is invoked as a pipe command, i.e. with the raw email message on stdin.
+# - If a message is identified as a permanent bounce, the user is marked as having a
+# bounced address, and will not be sent any more messages.
+# - If a message is identified as an out-of-office autoreply, it is discarded.
+# - Any other messages are forwarded to config.get("FORWARD_NONBOUNCE_RESPONSES_TO")
+
+
+# We want to avoid loading rails unless we need it, so we start by just loading the
+# config file ourselves.
+alaveteli_dir = File.join(File.dirname(__FILE__), '..')
+$:.push(File.join(alaveteli_dir, "commonlib", "rblib"))
+load "config.rb"
+MySociety::Config.set_file(File.join(alaveteli_dir, 'config', 'general'), true)
+MySociety::Config.load_default
+
+message = $stdin.read
+
+forward_non_bounces_to = MySociety::Config.get("FORWARD_NONBOUNCE_RESPONSES_TO", "user-support@localhost")
+IO.popen("/usr/sbin/sendmail -i #{forward_non_bounces_to}", "w") do |f|
+ f.write(message);
+ f.close;
+end