diff options
-rw-r--r-- | app/controllers/admin_request_controller.rb | 6 | ||||
-rw-r--r-- | app/models/incoming_message.rb | 32 | ||||
-rw-r--r-- | app/models/info_request.rb | 10 | ||||
-rw-r--r-- | app/models/outgoing_mailer.rb | 4 |
4 files changed, 34 insertions, 18 deletions
diff --git a/app/controllers/admin_request_controller.rb b/app/controllers/admin_request_controller.rb index 3e574b10f..6b6a8525e 100644 --- a/app/controllers/admin_request_controller.rb +++ b/app/controllers/admin_request_controller.rb @@ -278,7 +278,7 @@ class AdminRequestController < AdminController if params[:incoming_message_id] incoming_message = IncomingMessage.find(params[:incoming_message_id]) - email = incoming_message.mail.from_addrs[0].address + email = incoming_message.from_address name = incoming_message.safe_mail_from || info_request.public_body.name else email = info_request.public_body.request_email @@ -313,12 +313,12 @@ class AdminRequestController < AdminController @raw_email = RawEmail.find(params[:id]) # For the holding pen, try to guess where it should be ... @holding_pen = false - if (@raw_email.incoming_message.info_request == InfoRequest.holding_pen_request && !@raw_email.incoming_message.mail.from_addrs.nil? && @raw_email.incoming_message.mail.from_addrs.size > 0) + if (@raw_email.incoming_message.info_request == InfoRequest.holding_pen_request && !@raw_email.incoming_message.empty_from_field?) @holding_pen = true # 1. Use domain of email to try and guess which public body it # is associated with, so we can display that. - email = @raw_email.incoming_message.mail.from_addrs[0].spec + email = @raw_email.incoming_message.from_email domain = PublicBody.extract_domain_from_email(email) if domain.nil? diff --git a/app/models/incoming_message.rb b/app/models/incoming_message.rb index 60828e179..5205d0a2d 100644 --- a/app/models/incoming_message.rb +++ b/app/models/incoming_message.rb @@ -85,6 +85,28 @@ class IncomingMessage < ActiveRecord::Base @mail end + def from_address + self.mail.from_addrs[0].address + end + + def empty_from_field? + self.mail.from_addrs.nil? || self.mail.from_addrs.size == 0 + end + + def from_email + self.mail.from_addrs[0].spec + end + + def addresses + ((self.mail.to || []) + + (self.mail.cc || []) + + (self.mail.envelope_to || [])).uniq + end + + def message_id + self.mail.message_id + end + # Returns the name of the person the incoming message is from, or nil if # there isn't one or if there is only an email address. XXX can probably # remove from_name_if_present (which is a monkey patch) by just calling @@ -93,10 +115,10 @@ class IncomingMessage < ActiveRecord::Base # Return false if for some reason this is a message that we shouldn't let them reply to def _calculate_valid_to_reply_to # check validity of email - if self.mail.from_addrs.nil? || self.mail.from_addrs.size == 0 + if empty_from_field? return false end - email = self.mail.from_addrs[0].spec + email = self.from_email if !MySociety::Validate.is_valid_email(email) return false end @@ -136,7 +158,7 @@ class IncomingMessage < ActiveRecord::Base # instead? self.mail_from = self.mail.from_name_if_present begin - self.mail_from_domain = PublicBody.extract_domain_from_email(self.mail.from_addrs[0].spec) + self.mail_from_domain = PublicBody.extract_domain_from_email(self.from_email) rescue NoMethodError self.mail_from_domain = "" end @@ -1062,10 +1084,10 @@ class IncomingMessage < ActiveRecord::Base # Return false if for some reason this is a message that we shouldn't let them reply to def valid_to_reply_to? # check validity of email - if self.mail.from_addrs.nil? || self.mail.from_addrs.size == 0 + if empty_from_field? return false end - email = self.mail.from_addrs[0].spec + email = self.from_email if !MySociety::Validate.is_valid_email(email) return false end diff --git a/app/models/info_request.rb b/app/models/info_request.rb index 89893a396..e1885dee6 100644 --- a/app/models/info_request.rb +++ b/app/models/info_request.rb @@ -355,12 +355,7 @@ public def InfoRequest.guess_by_incoming_email(incoming_message) guesses = [] # 1. Try to guess based on the email address(es) - addresses = - (incoming_message.mail.to || []) + - (incoming_message.mail.cc || []) + - (incoming_message.mail.envelope_to || []) - addresses.uniq! - for address in addresses + incoming_message.addresses.each do |address| id, hash = InfoRequest._extract_id_hash_from_email(address) guesses.push(InfoRequest.find_by_id(id)) guesses.push(InfoRequest.find_by_idhash(hash)) @@ -419,8 +414,7 @@ public end for im in self.incoming_messages - other_message_id = im.mail.message_id - if message_id == other_message_id + if message_id == im.message_id return true end end diff --git a/app/models/outgoing_mailer.rb b/app/models/outgoing_mailer.rb index a307bb778..277794c69 100644 --- a/app/models/outgoing_mailer.rb +++ b/app/models/outgoing_mailer.rb @@ -47,7 +47,7 @@ class OutgoingMailer < ApplicationMailer return info_request.recipient_name_and_email else # calling safe_mail_from from so censor rules are run - return TMail::Address.address_from_name_and_email(incoming_message_followup.safe_mail_from, incoming_message_followup.mail.from_addrs[0].spec).to_s + return TMail::Address.address_from_name_and_email(incoming_message_followup.safe_mail_from, incoming_message_followup.from_email).to_s end end # Used in the preview of followup @@ -64,7 +64,7 @@ class OutgoingMailer < ApplicationMailer if incoming_message_followup.nil? || !incoming_message_followup.valid_to_reply_to? return info_request.recipient_email else - return incoming_message_followup.mail.from_addrs[0].spec + return incoming_message_followup.from_email end end # Subject to use for followup |