Как просматривать электронные письма в Rails?

Это может быть глупый вопрос, но когда я собираю HTML-адрес электронной почты в Rails, есть ли особенно простой встроенный способ предварительного просмотра шаблона в браузере или мне нужно написать какой-то пользовательский контроллер который втягивает его в свою точку зрения?

Ответ 2

Daniel answer - это хорошее начало, но если ваши шаблоны электронной почты содержат любые динамические данные, это не сработает. Например. предположим, что ваша электронная почта - это квитанция ордера и внутри нее вы печатаете @order.total_price - используя предыдущий метод, переменная @order будет равна nil.

Вот немного рецепта, который я использую:

Во-первых, поскольку эта функция предварительного просмотра электронной почты определенно предназначена только для внутреннего использования, я установил несколько общих маршрутов в пространстве имен admin:

#routes.rb

MySite::Application.routes.draw do
  namespace :admin do
    match 'mailer(/:action(/:id(.:format)))' => 'mailer#:action'
  end
end

Затем я создаю контроллер. В этом контроллере я создаю один метод для каждого шаблона электронной почты. Поскольку большинство писем содержат динамические данные, нам нужно заполнить все переменные-члены, которые ожидает шаблон.

Это можно сделать с помощью светильников, но я обычно предпочитаю просто захватывать некоторые псевдослучайные реальные данные. Помните - это НЕ unit test - это чисто средство развития. Он не должен давать один и тот же результат каждый раз - на самом деле - возможно, лучше, если он этого не сделает!

#app/controllers/admin/mailer_controller.rb
class Admin::MailerController < Admin::ApplicationController

  def preview_welcome()
    @user = User.last
    render :file => 'mailer/welcome.html.erb', :layout => 'mailer'
  end

end

Обратите внимание, что при визуализации шаблона мы используем layout=>:mailer. Это вставляет тело вашей электронной почты внутри макета электронной почты HTML, который вы создали, а не внутри типичного макета веб-приложения (например, application.html.erb).

И это в значительной степени. Теперь я могу посетить http://example.com/admin/mailer/preview_welcome для предварительного просмотра моего приветственного шаблона электронной почты.

Ответ 3

37Signals также имеют свой собственный почтовый ящик для тестирования, называемый mail_view. Это довольно фантастично.

Ответ 4

Самая простая настройка, которую я видел, - MailCatcher. Установка заняла 2 минуты, и она работает для новых почтовых программ из коробки.

Ответ 5

Я использую email_preview. Попробуйте.

Ответ 6

Недавно я написал драгоценный камень с именем Maily для предварительного просмотра, редактирования (файла шаблона) и доставки электронных писем приложения через браузер. Он также обеспечивает удобный способ привязки данных, гибкую систему авторизации и минималистический интерфейс.

Я планирую добавить новые функции в ближайшем будущем, например:

  • Несколько крючков по электронной почте
  • Параметрировать электронные письма через пользовательский интерфейс (аргументы метода mailer)
  • Играйте с клавишами перевода (список, выделение,...)

Я надеюсь, что это может вам помочь.

Ответ 7

Вы можете использовать Rails Предварительный просмотр электронной почты

rails-email-preview screenshot

REP - это движок rails для предварительного просмотра и тестирования отправки электронных писем с поддержкой I18n, легкой интеграции с предварительным запуском и дополнительным редактированием CMS с comfort_mexican_sofa.

Ответ 8

Предварительный просмотр электронной почты Rails позволяет быстро просмотреть электронную почту в веб-браузере в режиме разработки.

1) Добавьте "gem ‘rails_email_preview’, ‘~> 0.2.29’ " в gem файл и установите пакет.

2) Запустите "rails g rails_email_preview:install", чтобы создать инициализатор в папке конфигурации и добавить маршруты.

3) Запустите "rails g rails_email_preview:update_previews", который разбивает папку mailer_previews в каталоге приложения.

Генератор добавит заглушку к каждому из ваших писем, а затем запишет заглушку с помощью mock data.

Пример:

class UserMailerPreview
def invitation
UserMailer.invitation mock_user(‘Alice’), mock_user(‘Bob’)
end
def welcome
UserMailer.welcome mock_user
end
private
def mock_user(name = ‘Bill Gates’)
fake_id User.new(name: name, email: "user#{rand 100}@test.com")
end
def fake_id(obj)
obj.define_singleton_method(:id) { 123 + rand(100) }
obj
end
end

4) Параметры в поисковом запросе будут доступны в качестве переменной экземпляра для предварительного просмотра класса. Пример: если у нас есть URL-адрес, например "/emails/user_mailer_preview-welcome?user_id=1" @user_id определяется в приветственном методе UserMailerPreview, он помогает нам отправлять почту конкретному пользователю.

class UserMailerPreview
def welcome
user = @user_id ? User.find(@user_id) : mock_user
UserMailer.welcome(user)
end
end

5) Чтобы получить доступ к таким URL-адресам REP

rails_email_preview.rep_root_url
rails_email_preview.rep_emails_url
rails_email_preview.rep_email_url(‘user_mailer-welcome’)

6) Мы можем отправлять электронные письма через REP, это будет использовать настройки почтовой программы. Раскомментируйте эту строку в инициализаторе, чтобы отключить отправку почты в тестовой среде.

config.enable_send_email = false

Источник: Блог RailsCarma: Предварительный просмотр писем в Rails-приложениях с помощью Mail_View Gem

Ответ 9

Невозможно просмотреть его прямо из Mailer. Но, как вы писали, вы можете написать контроллер, который выглядит примерно так.

class EmailPreviewsControllers < ActionController::Base
  def show
    render "#{params[:mailer]}_mailer/#{params[:method]}"
  end
end

Но я думаю, что это не лучший способ проверить электронные письма, если они выглядят правильно.

Ответ 10

Я предпочитаю mails_viewer gem. Этот камень весьма полезен, поскольку он сохраняет шаблон HTML в папку tmp.

Ответ 11

Я удивлен, что никто не упомянул letter_opener. Это драгоценный камень, который будет отображать и открывать электронные письма в качестве страницы браузера всякий раз, когда электронное письмо отправляется в dev.

Ответ 12

rails генерирует предварительный просмотр почты, если вы используете rails g mailer CustomMailer. Вы получите файл CustomMailerPreview внутри spec/mailers/previews.

Здесь вы можете написать свой метод, который вызовет почтовый ящик, и он будет генерировать предварительный просмотр.

Для ex -

class CustomMailerPreview < ActionMailer::Preview
  def contact_us_mail_preview
    CustomMailer.my_mail(user: User.first)
  end
end

Предварительный просмотр всех сообщений электронной почты на http://localhost:3000/rails/mailers/custom_mailer