1

I'm working on an app that needs to be able to send out email updates and then route the reply back to the original item.

All emails will come to a single address (this can't change unfortunately), and I need to be able to determine where they go. My initial thought was setting the message-id for the item so that it comes back as a References header.

any ideas on how to accomplish this with ActionMailer?

Ryan
  • 668
  • 5
  • 12

2 Answers2

2

FINALLY found it.

First the problem: ActionMailer calls on the ready_to_send function inside TMail when sending using smtp, which in-turn calls the add_message_id function which overrides anything you put there.

Solution: there's an undocumented (as far as I can tell) method in TMail called enforced_message_id=(val). using this INSTEAD of message_id ensures that add_message_id won't overwrite your values. For example, you could:

mail = MyMailer.create_mail_function(values)
mail.enforced_message_id = '<my_not_proper_message_id>'
MyMailer.deliver(mail)

You need to be careful with this, because message_id's can be tricky. They must be unique and valid. I assume there's a reason TMail made it a bit of a pain to override the default.

Hopefully this saves someone a wasted afternoon (speaking from experience here ;-)

Ryan
  • 668
  • 5
  • 12
0

Note that enforced_message_id is only for TMail >= 1.2.7 (shipped with Rails >= 2.3.6). The function does not exist for Tmail <= 1.2.3 (for Rails <= 2.3.5). A workaround for Rails 2.3.6 is to change net.rb's add_message_id to the following:

def add_message_id( fqdn = nil )
  self.message_id = ::TMail::new_message_id(fqdn) if self.message_id.nil?
end

That's the "vendor" copy of TMail in ActionMailer in your Rails installation. (Find the root of the Rails installation using "gem environment").

4DV
  • 1