130 votes

Comment prévisualiser les emails dans Rails?

C'est peut-être une question idiote, mais lorsque je rédige 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 à son avis?

153voto

benjaminjosephw Points 1544

Action Mailer dispose désormais d'un moyen intégré de prévisualisation des e-mails 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
 

75voto

cailinanne Points 4737

La réponse précédente est un bon début, mais si vos modèles de courrier contiennent des données dynamiques, il ne fonctionnera pas. E. g. supposons que votre e-mail est une confirmation de commande et, en son sein, vous imprimez @order.total_price - à l'aide de la méthode précédente de l' @order variable sera nul.

Voici une petite recette que j'utilise:

Tout d'abord, depuis cet e-mail d'aperçu de la fonctionnalité est certainement pour usage interne seulement, j'ai mis en place quelques génériques de routes dans l'admin de l'espace de noms:

#routes.rb

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

Ensuite, j'ai créer le contrôleur. Dans ce contrôleur, j'ai créer une méthode par modèle d'e-mail. Puisque la plupart des e-mails contiennent des données dynamiques, nous avons besoin de remplir quoi que membre des variables du modèle s'attend.

Cela pourrait être fait avec accessoires, mais en général, je préfère simplement de prendre quelques pseudo-aléatoire réelle de données. Rappelez - vous: ce n'est PAS un test unitaire - c'est purement une aide au développement. Il n'est pas nécessaire pour produire le même résultat à chaque fois, en fait, il est probablement mieux si ça ne marche pas!

#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 avons rendu le modèle, nous utilisons layout=>:mailer. Il incorpore le corps de votre e-mail à l'intérieur de l'e-mail en HTML mise en page que vous avez créé au lieu de l'intérieur de votre application web standard de mise en page (par exemple, application.html.erb).

Et c'est assez bien. Maintenant, je peux visiter http://mysite.com/admin/mailer/preview_welcome pour un aperçu des changements à mon e-mail de bienvenue modèle.

18voto

Marc Points 1077

37Signals possède également son propre joyau de test de messagerie appelé mail_view . C'est assez fantastique.

16voto

Galen Points 184

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.

11voto

pisaruk Points 483

J'utilise email_preview . Essaie.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X