1

我正在开发一个需要能够发送电子邮件更新然后将回复发送回原始项目的应用程序。

所有电子邮件都将发送到一个地址(不幸的是,这不能改变),我需要能够确定它们的去向。我最初的想法是为该项目设置消息 ID,以便它作为 References 标头返回。

关于如何使用 ActionMailer 完成此任务的任何想法?

4

2 回答 2

2

终于找到了。

首先是问题:使用 smtp 发送时,ActionMailer 会调用 TMail 中的 ready_to_send 函数,而后者又会调用 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 让覆盖默认设置有点痛苦是有原因的。

希望这可以为某人节省一个浪费的下午(从这里的经验说 ;-)

于 2010-05-28T03:03:06.757 回答
0

请注意,forced_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 的“供应商”副本。(使用“gem environment”找到 Rails 安装的根目录)。

于 2011-08-11T09:25:16.083 回答