Попытка установить идентификатор сообщения, in-reply-to и т. Д. В ActionMailer
Я работаю над приложением, которое должно иметь возможность отправлять обновления по электронной почте и затем направлять ответ обратно на исходный элемент.
Все электронные письма будут приходить на один адрес (к сожалению, это не может измениться), и мне нужно иметь возможность определить, куда они отправляются. Моей первоначальной мыслью было установить идентификатор сообщения для элемента, чтобы он возвращался в качестве заголовка References.
какие-нибудь идеи о том, как сделать это с ActionMailer?
2 ответа
НАКОНЕЦ нашел это.
Во-первых, проблема: ActionMailer вызывает функцию ready_to_send внутри TMail при отправке с использованием smtp, которая, в свою очередь, вызывает функцию add_message_id, которая переопределяет все, что вы там помещаете.
Решение: в TMail есть недокументированный (насколько я могу судить) метод enforced_message_id=(val)
, использование этого INSTEAD для message_id гарантирует, что add_message_id не перезапишет ваши значения. Например, вы могли бы:
mail = MyMailer.create_mail_function(values)
mail.enforced_message_id = '<my_not_proper_message_id>'
MyMailer.deliver(mail)
Вы должны быть осторожны с этим, потому что message_id может быть хитрым. Они должны быть уникальными и действительными. Я предполагаю, что есть причина, по которой TMail немного усложнил переопределение настроек по умолчанию.
Надеюсь, это спасет кого-то от потраченного впустую дня (если судить по опыту;
Обратите внимание, что принудительный_применение_id используется только для TMail >= 1.2.7 (поставляется с Rails >= 2.3.6). Функция не существует для Tmail <= 1.2.3 (для Rails <= 2.3.5). Обходной путь для Rails 2.3.6 - изменить add_message_id net.rb следующим образом:
def add_message_id( fqdn = nil )
self.message_id = ::TMail::new_message_id(fqdn) if self.message_id.nil?
end
Это копия "вендора" TMail в ActionMailer в вашей установке Rails. (Найдите корень установки Rails, используя "gem environment").