我正在开发一个应用程序,需要能够发送电子邮件更新,然后将回复路由回原始项目。
所有电子邮件都会到达一个地址(不幸的是,这不会改变),我需要能够确定它们的去向。我最初的想法是为项目设置message-id,以便它作为References标题返回。
有关如何使用ActionMailer实现此目的的任何想法?
答案 0 :(得分:2)
终于找到了。
首先是问题: 当使用smtp发送时,ActionMailer调用TMail中的ready_to_send函数,smtp又调用add_message_id函数,该函数会覆盖你放在那里的任何内容。
解决方案:
在TMail中有一个名为enforced_message_id=(val)
的无证(据我所知)方法。使用此消息的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使覆盖默认值有点痛苦。
希望这可以节省一个人浪费的下午(从这里的经验来讲; - )
答案 1 :(得分:0)
请注意,enforced_message_id仅适用于TMail&gt; = 1.2.7(随Rails&gt;一起提供= 2.3.6)。对于Tmail&lt; = 1.2.3(对于Rails&lt; = 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的“供应商”副本。 (使用“gem environment”查找Rails安装的根目录)。