【问题标题】:How to see e-mail views in browser using rails如何使用 Rails 在浏览器中查看电子邮件视图
【发布时间】:2026-01-18 08:35:01
【问题描述】:

我正在为我的 rails 应用程序处理电子邮件。现在,我知道查看电子邮件的唯一方法是将其发送给我自己。如何让“views”文件夹下的“notifications”文件夹中的“daily_summary.html.haml”在浏览器中呈现?我在想我应该只添加路线:

match 'notifications' => 'notifications/daily_summary'

但是我不知道如何处理控制器/动作方面的事情。

【问题讨论】:

标签: ruby-on-rails actionmailer


【解决方案1】:

我会看看actionmailer_extensions。它使 ActionMailer 将外发电子邮件作为 .eml 文件写入磁盘。这可能足以满足您的目的(只需设置一个脚本来监视新文件的输出目录并在您首选的电子邮件客户端中打开它们),或者您可以分叉 gem 并直接修改它(它的源代码非常简单)来编写.html 文件,然后在浏览器中打开它们。

希望有帮助!

【讨论】:

    【解决方案2】:

    有一种名为 Letter Opener 的宝石,听起来它可以完全满足您的需求。它在浏览器中预览电子邮件,而不是发送它们。我自己没用过。不过,如果它有效,我很想听听!

    https://github.com/ryanb/letter_opener

    还有一个叫做 Mail Viewer,但它已经有一段时间没有被积极开发了。可能最好避开:

    https://github.com/37signals/mail_view

    【讨论】:

    • Letter Opener 似乎工作正常。唯一的问题是它正在打开电子邮件的“plain.html”版本而不是“rich.html”版本(纯文本似乎对应于我的电子邮件的文本版本,而富文本对应于 html 版本)。知道我该如何改变吗?
    • 看起来,在deliver 块中,您可以同时指定text_part 块和html_part 块。您必须在 html_part 块中将content_type 设置为'text/html'。看看这是否有效。
    • 我这里有点无知。 .您在哪里看到这些块,我可以在哪里设置 content_type?
    • 是的,文档有点稀疏。看看 github repo 中的 rspec 测试:github.com/ryanb/letter_opener/blob/master/spec/letter_opener/…。我认为,第二个测试有一个你正在尝试做的例子。
    • @Murthy,如果我理解正确,您想验证抄送的用户是否也收到了消息?在我看来,这超出了 Letter Opener 的范围。你应该为此编写一个测试。
    【解决方案3】:

    从 Rails 4.1 开始,电子邮件预览是原生的。 您需要做的就是在这个目录中创建一个类:

    test/mailers/previews/
    

    类必须扩展ActionMailer::Preview

    class WeeklyReportPreview < ActionMailer::Preview
        def weekly_report
            WeeklyReport.weekly_report(User.first)
        end
    end
    

    编写返回Mail::Message 对象的方法。可以使用以下 url 在开发环境中访问它们:

    http://localhost:3000/rails/mailers/[preview_class_name]/[method_name]
    

    就我而言:

    http://localhost:3000/rails/mailers/weekly_report/weekly_report
    

    更多信息可以在ActionMailer API documentation找到

    【讨论】:

    • 对于任何最终来到这里的人 - 我被许多参考在测试/邮件等中创建预览的事实所跟踪,但是如果你在规范中有测试,它实际上是规范/邮件......否则工作款待!
    【解决方案4】:

    对于 Rails 3,现在有一个 gem,mail_view,它包含在 Rails 4.1 中。这是set-up 的链接。这很容易。

    1.) 添加到 Gemfile:

    gem 'mail_view', :git => https://github.com/basecamp/mail_view.git'
    # or
    gem "mail_view", "~> 2.0.4"
    

    2.) 在 routes.rb 中:

     # config/routes.rb
     if Rails.env.development?
        mount MailPreview => 'mail_view'
     end
    

    3.) 创建 MailPreview 模型:

     # app/mailers/mail_preview.rb or lib/mail_preview.rb
    class MailPreview < MailView
    ...
     def forgot_password
       user = Struct.new(:email, :name).new('name@example.com', 'Jill Smith')
       mail = UserMailer.forgot_password(user)
     end
    end
    

    在此模型中,您可以随意命名方法,但它们对应于 UserMailer 方法是有意义的。

    4.) 要查看 MailPreview 中所有方法的列表,请转到 /mail_view。单击其中一个即可在浏览器中查看 HTML 预览。

    【讨论】:

      最近更新 更多