Это может быть глупый вопрос, но когда я собираю HTML-адрес электронной почты в Rails, есть ли особенно простой встроенный способ предварительного просмотра шаблона в браузере или мне нужно написать какой-то пользовательский контроллер который втягивает его в свою точку зрения?
Как просматривать электронные письма в Rails?
Ответ 1
Action Mailer теперь имеет встроенный способ предварительного просмотра электронных писем в Rails 4.1. Например, проверьте это:
# located in test/mailers/previews/notifier_mailer_preview.rb
class NotifierPreview < ActionMailer::Preview
# Accessible from http://localhost:3000/rails/mailers/notifier/welcome
def welcome
Notifier.welcome(User.first)
end
end
Ответ 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 Предварительный просмотр электронной почты
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