aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--app/models/info_request.rb4
-rw-r--r--lib/mail_handler/backends/mail_backend.rb17
-rw-r--r--lib/mail_handler/backends/tmail_backend.rb8
3 files changed, 27 insertions, 2 deletions
diff --git a/app/models/info_request.rb b/app/models/info_request.rb
index 0a06b84a2..3355b9443 100644
--- a/app/models/info_request.rb
+++ b/app/models/info_request.rb
@@ -434,11 +434,11 @@ public
elsif self.allow_new_responses_from == 'anybody'
allow = true
elsif self.allow_new_responses_from == 'authority_only'
- if email.from_addrs.nil? || email.from_addrs.size == 0
+ sender_email = MailHandler.get_from_address(email)
+ if sender_email.nil?
allow = false
reason = _('Only the authority can reply to this request, but there is no "From" address to check against')
else
- sender_email = email.from_addrs[0].spec
sender_domain = PublicBody.extract_domain_from_email(sender_email)
reason = _("Only the authority can reply to this request, and I don't recognise the address this reply was sent from")
allow = false
diff --git a/lib/mail_handler/backends/mail_backend.rb b/lib/mail_handler/backends/mail_backend.rb
index b85ce64a6..ac543540e 100644
--- a/lib/mail_handler/backends/mail_backend.rb
+++ b/lib/mail_handler/backends/mail_backend.rb
@@ -29,10 +29,27 @@ module MailHandler
part_file_name.nil? ? nil : part_file_name.dup
end
+ # Get the body of a mail part
def get_part_body(mail_part)
mail_part.body.decoded
end
+ # Return the first from field if any
+ def first_from(mail)
+ if mail[:from] && mail[:from].addrs[0]
+ mail[:from].decoded
+ mail[:from].addrs[0]
+ else
+ nil
+ end
+ end
+
+ # Return the first from address if any
+ def get_from_address(mail)
+ first_from = first_from(mail)
+ first_from ? first_from.address : nil
+ end
+
# Format
def address_from_name_and_email(name, email)
if !MySociety::Validate.is_valid_email(email)
diff --git a/lib/mail_handler/backends/tmail_backend.rb b/lib/mail_handler/backends/tmail_backend.rb
index 2a61a5d05..fa9f3fbb6 100644
--- a/lib/mail_handler/backends/tmail_backend.rb
+++ b/lib/mail_handler/backends/tmail_backend.rb
@@ -41,10 +41,18 @@ module MailHandler
return part_file_name
end
+ # Get the body of a mail part
def get_part_body(mail_part)
mail_part.body
end
+ def get_from_address(mail)
+ if mail.from_addrs.nil? || mail.from_addrs.size == 0
+ return nil
+ end
+ mail.from_addrs[0].spec
+ end
+
def address_from_name_and_email(name, email)
if !MySociety::Validate.is_valid_email(email)
raise "invalid email " + email + " passed to address_from_name_and_email"