gpt4 book ai didi

ruby-on-rails - ActionMailer after_filter 打破 content_type

转载 作者:行者123 更新时间:2023-12-04 06:09:59 29 4
gpt4 key购买 nike

[Rails 3.2.13] 我有一个基于 .text.erb.html.haml 模板发送隐式多部分电子邮件的邮件程序。那里没有问题。

我正在尝试添加一个 after_filter 以有条件地防止发送到无效电子邮件。基于this answer以及我阅读过的所有文档,这看起来非常简单。

但是,包括此 after_filter 会将内容类型从 multipart/alternative 更改为 text/plain即使电子邮件有效。在文档中:“如果任何附件或部分已添加到电子邮件,则不执行隐式模板呈现”。这适用于此吗?这是预期的行为,还是我做错了什么?

用头撞墙,因为这看起来很简单。

class Notify < ActionMailer::Base

include AbstractController::Callbacks

after_filter :ensure_valid

def some_email(user_id)
@user = User.find(user_id)
mail(to: @user.email)
end

...

private

def ensure_valid
if User.where(email: mail.to, invalid_email: true).any?
mail.perform_deliveries = false
end
true
end

end

编辑:经过更多修改后,似乎在 after_filter 中调用 mail 对象at all 会关闭多部分,即使是这样的:

def ensure_valid
puts "mail: #{mail}"
true
end

这是怎么回事?


尝试在 after_filter 中手动添加 content_type + params,例如

mail.content_type = 'multipart/alternative'
mail.header['Content-Type'].parameters[:boundary] = mail.body.boundary
mail.header['Content-Type'].parameters[:charset] = 'UTF-8'

但无论出于何种原因,这似乎都不起作用。如果我只包含它,它确实会设置 content_type

mail.content_type = 'multipart/alternative'

.. 但是我缺少边界和字符集参数。

其他我试过但不起作用的东西:

  • 在 environment.rb 中设置默认的 content_type
  • 在邮件程序中设置默认的 content_type

最佳答案

仍然不完全确定这里发生了什么,但似乎在 after_filter 中使用 message 对象而不是 mail 解决了这个问题:

def ensure_valid
if User.where(email: message.to, invalid_email: true).any?
message.perform_deliveries = false
end
true
end

这会正确设置 perform_deliveries 而不会影响 content_type(将其保留为 multipart/alternative)。奇怪的是,所有示例都使用了 mail 对象而不是 message

关于ruby-on-rails - ActionMailer after_filter 打破 content_type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21667686/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com