diff options
-rw-r--r-- | app/models/info_request.rb | 4 | ||||
-rw-r--r-- | lib/mail_handler/backends/mail_backend.rb | 17 | ||||
-rw-r--r-- | lib/mail_handler/backends/tmail_backend.rb | 8 |
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" |