web-dev-qa-db-fra.com

Comment prévisualiser les emails dans Rails?

C'est peut-être une question idiote, mais lorsque je compose un courrier électronique HTML dans Rails, existe-t-il un moyen intégré particulièrement facile de prévisualiser le modèle dans le navigateur ou dois-je écrire une sorte de contrôleur personnalisé qui le récupère dans sa vue?

111
Peter Nixey

Action Mailer a maintenant une méthode intégrée de prévisualisation des emails dans Rails 4.1 . Par exemple, regardez ceci:

# 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
120
benjaminjosephw

Daniel's answer est un bon début, mais si vos modèles de courrier électronique contiennent des données dynamiques, cela ne fonctionnera pas. Par exemple. supposons que ton email soit un reçu de commande et que tu y imprimes @order.total_price - en utilisant la méthode précédente le @order variable sera nulle.

Voici une petite recette que j'utilise:

Premièrement, comme cette fonctionnalité de prévisualisation d’e-mail est définitivement réservée à un usage interne, j’ai configuré des routes génériques dans l’espace de noms admin:

#routes.rb

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

Ensuite, je crée le contrôleur. Dans ce contrôleur, je crée une méthode par modèle de courrier électronique. Comme la plupart des courriels contiennent des données dynamiques, nous devons renseigner les variables de membre attendues par le modèle.

Cela pourrait être fait avec des fixtures, mais je préfère généralement simplement récupérer des données réelles pseudo-aléatoires. Rappelez-vous - ceci n'est PAS un test unitaire - c'est purement une aide au développement. Il n'est pas nécessaire de produire le même résultat à chaque fois. En fait, c'est probablement mieux si ce n'est pas le cas!

#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

Notez que lorsque nous rendons le modèle, nous utilisons layout=>:mailer. Cela incorpore le corps de votre e-mail dans la structure de messagerie HTML que vous avez créée plutôt que dans celle de votre application Web typique (par exemple, application.html.erb).

Et c'est à peu près tout. Maintenant, je peux visiter http://example.com/admin/mailer/preview_welcome pour prévisualiser les modifications apportées à mon modèle de courrier électronique de bienvenue.

73
cailinanne

37Signals possède également sa propre gemme de test de messagerie appelée mail_view . C'est vraiment fantastique.

18
Marc

La configuration la plus simple que j'ai vue est MailCatcher . L'installation a pris 2 minutes et fonctionne pour les nouveaux expéditeurs qui sortent de la boîte.

16
Galen

J'utilise email_preview . Essaie.

11
pisaruk

J'ai récemment écrit une gemme nommée Maily pour prévisualiser, éditer (fichier de modèle) et livrer les courriels de l'application via un navigateur. Il fournit également un moyen convivial d'accrocher des données, un système d'autorisation flexible et une interface utilisateur minimaliste.

J'ai prévu d'ajouter de nouvelles fonctionnalités dans un proche avenir, telles que:

  • Plusieurs crochets par email
  • Paramétrer les e-mails via l'interface utilisateur (arguments de la méthode mailer)
  • Jouez avec les clés de traduction (liste, surbrillance, ...)

J'espère que cela peut vous aider.

5
markets

Vous pouvez utiliser Rails Email Preview

Rails-email-preview screenshot

REP est un moteur Rails) pour prévisualiser et tester les e-mails envoyés, avec prise en charge I18n, intégration facile avec premailer et modification facultative du CMS avec comfortable_mexican_sofa .

4
glebm

Je suis surpris que personne ne mentionne letter_opener . C'est un joyau qui rendra et ouvrira les emails en tant que page de navigateur chaque fois qu'un email est livré en dev.

3
KurtPreston

Rails Email Preview nous aide à visualiser rapidement l’email dans un navigateur Web en mode développement.

1) Ajouter “gem ‘Rails_email_preview’, ‘~> 0.2.29’ “ pour installer le fichier gem et le bundle.

2) Run “Rails g Rails_email_preview:install” ceci crée un initialiseur dans le dossier de configuration et ajoute des itinéraires.

3) Run “Rails g Rails_email_preview:update_previews” ceci crée un dossier mailer_previews dans le répertoire app.

Generator ajoutera un stub à chacun de vos emails, puis vous renseignerez le stub avec des données fictives.

Ex:

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) Les paramètres de la requête de recherche seront disponibles en tant que variable d'instance pour prévisualiser la classe. Ex: si nous avons une URL comme “/emails/user_mailer_preview-welcome?user_id=1”@user_id est défini dans la méthode de bienvenue de UserMailerPreview il nous aide à envoyer un courrier à un utilisateur spécifique.

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

5) Accéder à l’URL REP comme ceci

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

6) Nous pouvons envoyer des courriels via REP, cela utilisera les paramètres de l'environnement d'envoi. Décommentez cette ligne dans l'initialiseur pour désactiver l'envoi de courrier dans l'environnement de test.

config.enable_send_email = false

Source: Blog RailsCarma: Aperçu des courriers électroniques dans Rails avec la gemme Mail_View

3
Carma Tec

Rails génère un aperçu du courrier si vous utilisez Rails g mailer CustomMailer. Vous obtiendrez un fichier CustomMailerPreview dans le dossier spec/mailers/previews.

Ici, vous pouvez écrire votre méthode qui appellera le mailer et générera un aperçu.

Pour ex -

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

Prévisualisez tous les courriels sur http: // localhost: 3000/Rails/mailers/custom_mailer

3
Swaps

Il n’existe aucun moyen de le prévisualiser directement à partir de la messagerie. Mais comme vous l'avez écrit, vous pouvez écrire un contrôleur, qui ressemble à ceci.

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

Mais je pense que ce n'est pas la meilleure façon de tester les emails, s'ils ont l'air correct.

2
Daniel Spangenberg

Je préfère mails_viewer gem. Ce bijou est très utile car il enregistre le modèle HTML dans un dossier tmp.

1
Trung Lê