aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--app/models/outgoing_mailer.rb11
-rw-r--r--app/models/outgoing_message.rb18
2 files changed, 24 insertions, 5 deletions
diff --git a/app/models/outgoing_mailer.rb b/app/models/outgoing_mailer.rb
index 1546d3fd0..bf81bb89f 100644
--- a/app/models/outgoing_mailer.rb
+++ b/app/models/outgoing_mailer.rb
@@ -22,6 +22,7 @@ class OutgoingMailer < ApplicationMailer
@from = info_request.incoming_name_and_email
@recipients = info_request.recipient_name_and_email
@subject = info_request.email_subject_request
+ @headers["message-id"] = OutgoingMailer.id_for_message(outgoing_message)
@body = {:info_request => info_request, :outgoing_message => outgoing_message,
:contact_email => MySociety::Config.get("CONTACT_EMAIL", 'contact@localhost') }
end
@@ -32,12 +33,12 @@ class OutgoingMailer < ApplicationMailer
@from = info_request.incoming_name_and_email
@recipients = OutgoingMailer.name_and_email_for_followup(info_request, incoming_message_followup)
@subject = OutgoingMailer.subject_for_followup(info_request, outgoing_message)
+ @headers["message-id"] = OutgoingMailer.id_for_message(outgoing_message)
@body = {:info_request => info_request, :outgoing_message => outgoing_message,
:incoming_message_followup => incoming_message_followup,
:contact_email => MySociety::Config.get("CONTACT_EMAIL", 'contact@localhost') }
end
- # Separate function, so can be called from controller for logging
# XXX the condition checking valid_to_reply_to? also appears in views/request/_followup.rhtml,
# it shouldn't really, should call something here.
# XXX also OutgoingMessage.get_salutation
@@ -85,6 +86,14 @@ class OutgoingMailer < ApplicationMailer
return true
end
end
+ # Message-ID to use
+ def OutgoingMailer.id_for_message(outgoing_message)
+ message_id = "ogm-" + outgoing_message.id.to_s
+ t = Time.now
+ message_id += "+" + '%08x%05x-%04x' % [t.to_i, t.tv_usec, rand(0xffff)]
+ message_id += "@" + MySociety::Config.get("INCOMING_EMAIL_DOMAIN", "localhost")
+ return "<" + message_id + ">"
+ end
end
diff --git a/app/models/outgoing_message.rb b/app/models/outgoing_message.rb
index 220f4f0a7..669fffb56 100644
--- a/app/models/outgoing_message.rb
+++ b/app/models/outgoing_message.rb
@@ -169,18 +169,28 @@ class OutgoingMessage < ActiveRecord::Base
def send_message(log_event_type = 'sent')
if self.status == 'ready'
if self.message_type == 'initial_request'
- OutgoingMailer.deliver_initial_request(self.info_request, self)
+ mail_message = OutgoingMailer.deliver_initial_request(self.info_request, self)
+
self.last_sent_at = Time.now
self.status = 'sent'
self.save!
- self.info_request.log_event(log_event_type, { :email => self.info_request.recipient_name_and_email, :outgoing_message_id => self.id })
+ self.info_request.log_event(log_event_type, {
+ :email => mail_message.to_addrs.join(", "),
+ :outgoing_message_id => self.id,
+ :smtp_message_id => mail_message.message_id
+ })
self.info_request.set_described_state('waiting_response')
elsif self.message_type == 'followup'
- OutgoingMailer.deliver_followup(self.info_request, self, self.incoming_message_followup)
+ mail_message = OutgoingMailer.deliver_followup(self.info_request, self, self.incoming_message_followup)
+
self.last_sent_at = Time.now
self.status = 'sent'
self.save!
- self.info_request.log_event('followup_' + log_event_type, { :email => OutgoingMailer.name_and_email_for_followup(self.info_request, self.incoming_message_followup), :outgoing_message_id => self.id })
+ self.info_request.log_event('followup_' + log_event_type, {
+ :email => mail_message.to_addrs.join(", "),
+ :outgoing_message_id => self.id,
+ :smtp_message_id => mail_message.message_id
+ })
if self.info_request.described_state == 'waiting_clarification'
self.info_request.set_described_state('waiting_response')
end