aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFrancis Irving <francis@mysociety.org>2009-10-29 19:00:04 +0000
committerFrancis Irving <francis@mysociety.org>2009-10-29 19:00:04 +0000
commit8f0ca6b58d49afe70de5d9a44ba23171a0bab3da (patch)
tree15589b61b72c250750f75cc4dc1c3d7322aa7cd8
parent733e19f8bf826de5ca0a73f00b2da8e1b5733e45 (diff)
Option to use message id to not duplicate incoming messages.
-rw-r--r--app/models/info_request.rb18
-rw-r--r--app/models/request_mailer.rb6
2 files changed, 24 insertions, 0 deletions
diff --git a/app/models/info_request.rb b/app/models/info_request.rb
index a32aff1fb..7cee3fe1c 100644
--- a/app/models/info_request.rb
+++ b/app/models/info_request.rb
@@ -324,6 +324,23 @@ public
end
end
+ # Has this email already been received here? Based just on message id.
+ def already_received?(email, raw_email_data)
+ message_id = email.message_id
+ if message_id.nil?
+ raise "No message id for this message"
+ end
+
+ for im in self.incoming_messages
+ other_message_id = im.mail.message_id
+ if message_id == other_message_id
+ return true
+ end
+ end
+
+ return false
+ end
+
# A new incoming email to this request
def receive(email, raw_email_data, override_stop_new_responses = false)
if !override_stop_new_responses
@@ -388,6 +405,7 @@ public
RequestMailer.deliver_new_response(self, incoming_message)
end
+
# An annotation (comment) is made
def add_comment(body, user)
comment = Comment.new
diff --git a/app/models/request_mailer.rb b/app/models/request_mailer.rb
index 0d55d1d96..1bebb5181 100644
--- a/app/models/request_mailer.rb
+++ b/app/models/request_mailer.rb
@@ -192,6 +192,12 @@ class RequestMailer < ApplicationMailer
# Send the message to each request, to be archived with it
for reply_info_request in reply_info_requests
+ # If environment variable STOP_DUPLICATES is set, don't send message with same id again
+ if ENV['STOP_DUPLICATES']
+ if reply_info_request.already_received?(email, raw_email)
+ raise "message " + email.message_id + " already received by request"
+ end
+ end
reply_info_request.receive(email, raw_email)
end
end