【问题标题】:How can I use ActionMailer previews in a Sinatra app?如何在 Sinatra 应用程序中使用 ActionMailer 预览?
【发布时间】:2022-09-23 18:56:51
【问题描述】:

我有一个带有 ActionMailer gem 的 Sinatra Ruby 应用程序,用于发送电子邮件。电子邮件发送功能工作正常,但我不知道如何使用预览功能进行开发。我的邮件mailer.rb 位于lib/companyname/mailers,我的预览mailer_preview.rb 位于spec/companyname/mailers/previews。当我运行我的应用程序并导航到 http://localhost:26250/rails/mailers 时,我得到一个 404“Sinatra 不知道这个小曲子”页面。

我需要做什么才能在浏览器中看到预览?

mailer.rb

module CompanyName
  class Mailer < ActionMailer::Base
    def test_email(recipient_email_address)
      email = mail(to: recipient_email_address, from: \"no-reply@companyname.com\", subject: \"Testing ActionMailer\") do |format|
        format.html { \"<h1>Testing</h1>\" }
      end
      email.deliver_now
    end
  end
end

mailer_preview.rb

module CompanyName
  class MailerPreview < ActionMailer::Preview
    def test_email
      Mailer.test_email(\"test@email.com\")
    end
  end
end

    标签: ruby sinatra actionmailer


    【解决方案1】:

    查看 ActionMailer 的代码后,我找不到任何非 Rails 配置方法,因此目前看来这是不可能的*。我最终设置了一个 Sinatra 端点来从 MailerPreview 类加载 HTML 并在浏览器中显示它:

    mailers_controller.rb

    get "/emails/:email_name" do
      halt 404 unless ENV["ENABLE_MAIL_TEST_ENDPOINT"] == "true"
    
      email_preview = CompanyName::MailerPreview.public_send(params["email_name"])
      email_preview.html_part.decoded # Note: I switched to the Mail gem instead of ActionMailer, so the code may not be identical
    end
    

    *我不是 Rails 专家,因此可能并非如此,但尽我所能,我无法找到解决方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-03
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      相关资源
      最近更新 更多