私は、更新メールを送信してから、返信を元のアイテムに戻すことができる必要があるアプリに取り組んでいます。
すべての電子メールは単一のアドレスに送信され(これは残念ながら変更できません)、私はそれらがどこに行くのかを判断できる必要があります。私の最初の考えは、アイテムのメッセージIDを設定して、参照ヘッダーとして返されるようにすることでした。
ActionMailerでこれを達成する方法について何かアイデアはありますか?
私は、更新メールを送信してから、返信を元のアイテムに戻すことができる必要があるアプリに取り組んでいます。
すべての電子メールは単一のアドレスに送信され(これは残念ながら変更できません)、私はそれらがどこに行くのかを判断できる必要があります。私の最初の考えは、アイテムのメッセージIDを設定して、参照ヘッダーとして返されるようにすることでした。
ActionMailerでこれを達成する方法について何かアイデアはありますか?
ついにそれを見つけました。
最初の問題:ActionMailerは、smtpを使用して送信するときに、TMail内のready_to_send関数を呼び出します。次に、smtpは、そこに配置されたものをすべてオーバーライドするadd_message_id関数を呼び出します。
解決策:TMailには(私が知る限り)文書化されていないメソッドがありenforced_message_id=(val)
ます。このmessage_idのINSTEADを使用すると、add_message_idが値を上書きしないようになります。たとえば、次のことができます。
mail = MyMailer.create_mail_function(values)
mail.enforced_message_id = '<my_not_proper_message_id>'
MyMailer.deliver(mail)
message_idは扱いにくい場合があるため、これには注意する必要があります。それらは一意で有効でなければなりません。TMailがデフォルトを上書きするのに少し苦労したのには理由があると思います。
うまくいけば、これは誰かを無駄な午後に救うでしょう(ここでの経験から言えば;-)
Enforced_message_idは、TMail> = 1.2.7(Rails> = 2.3.6で出荷)専用であることに注意してください。この関数は、Tmail <= 1.2.3(Rails <= 2.3.5の場合)には存在しません。Rails 2.3.6の回避策は、net.rbのadd_message_idを次のように変更することです。
def add_message_id( fqdn = nil )
self.message_id = ::TMail::new_message_id(fqdn) if self.message_id.nil?
end
これは、RailsインストールのActionMailerにあるTMailの「ベンダー」コピーです。(「gemenvironment」を使用してRailsインストールのルートを見つけます)。