[Rails 3.2.13]我有一個郵件發送基於.text.erb
和.html.haml
模板的隱式多部分電子郵件。那裏沒有問題。ActionMailer after_filter破解content_type
我想添加一個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
編輯:更多的修修補補之後,似乎調用mail
對象在after_filter所有關閉多,即使是這樣的:
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'
..但後來我缺少邊界和字符集參數。
其他的事情我已經試過了不起作用:
- 設置默認CONTENT_TYPE中的environment.rb
- 設置默認CONTENT_TYPE在郵件