使用 mailgun-ruby 在 Rails 中设置 erb 模板
setting erb template in Rails with mailgun-ruby
我想使用 mailgun-ruby MessageBuilder API 在我的生产环境中构建和发送应用程序电子邮件。文档建议我做这样的事情:
def confirmation_instructions(record, token, opts={})
mg_client = Mailgun::Client.new ENV['MAILGUN_API_KEY']
mb_obj = Mailgun::MessageBuilder.new
mb_obj.from("from@site.com", {"first" => "First", "last" => "Last"})
mb_obj.add_recipient(:to, record.email)
mb_obj.subject("Please confirm your account")
mb_obj.body_html("<p>how would i pass the default confirmation_instructions erb template as an argument to this method?</p>")
mg_client.send_message("mail.site.com", mb_obj)
end
问题是,一旦我开始使用 Mailgun,我也停止使用 ActionMailer 的默认 mail()
语法。这似乎可以防止 Rails 手动 selecting 匹配方法名称的模板。
我的第一个想法是我需要手动 select 它。回答 here 说我可以像这样更改模板:
mail(to: user.email, subject: "New Projects") do |format|
format.html { render layout: layout_name }
format.text { render layout: layout_name }
end
但此语法与 mailgun-ruby
的预期冲突。我不能离开 body/text 设置方法,如果我这样做,它会抛出一个错误:Mailgun::CommunicationError (400 Bad Request: Need at least one of 'text' or 'html' parameters specified)
。
在上面的第一个示例中,我如何将正确的布局传递给 body_html
?也就是说,不直接将 html 作为参数写入?
更新:我的 rake routes
确认
new_user_confirmation GET /users/confirmation/new(.:format) users/confirmations#new
user_confirmation GET /users/confirmation(.:format) users/confirmations#show
POST /users/confirmation(.:format) users/confirmations#create
update_user_confirmation PATCH /users/confirmation(.:format) users/confirmations#update
查看 gem 的问题,似乎不受支持。
方法是使用您喜欢的模板引擎并将输出提供给 body_html
。
你不是在告诉它,而是看方法名称,我猜你正在使用 Devise gem,并且你想发送它的内容。
以下是如何让它工作(没试过):
def confirmation_instructions(record, token, opts={})
email_html_body = ERB.new(File.read('devise/mailer/confirmation_instructions.html.erb'))
.result_with_hash(
email: current_user.email,
resource: resource,
token: @token
)
# ...
mb_obj.body_html(email_html_body)
# ...
end
哇,所以...Rails 默认 mail()
语法 仍然适用于 Mailgun。我不知道为什么不是第一次尝试,但我认为这与我没有将 production.rb 配置设置为 config.action_mailer.delivery_method = :mailgun
.