Bu aptalca bir soru olabilir, ancak Rails'de bir HTML e-postasını bir araya getirdiğimde, şablonu tarayıcıda önizlemenin özellikle kolay yerleşik bir yolu var mı yoksa onu çeken bir tür özel denetleyici yazmam mı gerekiyor? onun görüşüne göre?
Bu aptalca bir soru olabilir, ancak Rails'de bir HTML e-postasını bir araya getirdiğimde, şablonu tarayıcıda önizlemenin özellikle kolay yerleşik bir yolu var mı yoksa onu çeken bir tür özel denetleyici yazmam mı gerekiyor? onun görüşüne göre?
Yanıtlar:
Action Mailer artık Rails 4.1'de e-postaları önizlemek için yerleşik bir yola sahip . Örneğin, şuna bir bakın:
# 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
spec/mailers/previews
Daniel'in cevabı iyi bir başlangıç, ancak e-posta şablonlarınız herhangi bir dinamik veri içeriyorsa işe yaramayacaktır. Örneğin, e-postanızın bir sipariş makbuzu olduğunu ve bunun içinde yazdırdığınızı varsayalım @order.total_price
- önceki yöntemi kullanarak @order
değişken sıfır olacaktır.
İşte kullandığım küçük bir tarif:
İlk olarak, bu e-posta önizleme işlevi kesinlikle yalnızca dahili kullanım için olduğundan, yönetici ad alanında bazı genel yollar ayarladım:
#routes.rb
MySite::Application.routes.draw do
namespace :admin do
match 'mailer(/:action(/:id(.:format)))' => 'mailer#:action'
end
end
Sonra, denetleyiciyi oluşturuyorum. Bu denetleyicide, e-posta şablonu başına bir yöntem oluşturuyorum. Çoğu e-posta dinamik veri içerdiğinden, şablonun beklediği üye değişkenlerini doldurmamız gerekir.
Bu, armatürlerle yapılabilir, ancak ben genellikle sadece bazı sahte rastgele gerçek verileri almayı tercih ederim. Unutmayın - bu bir birim testi DEĞİLDİR - bu tamamen bir geliştirme yardımıdır. Her seferinde aynı sonucu üretmesi gerekmez - aslında - yapmaması muhtemelen daha iyidir!
#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
Şablonu oluşturduğumuzda kullandığımızı unutmayın layout=>:mailer
. Bu, e-postanızın gövdesini tipik web uygulaması düzeninizin (ör. application.html.erb
) Yerine oluşturduğunuz HTML e-posta düzeninin içine yerleştirir .
Ve hemen hemen bu kadar. Şimdi hoş geldiniz e-posta şablonumdaki değişikliği önizlemek için http://example.com/admin/mailer/preview_welcome adresini ziyaret edebilirim .
get 'mailer...
yerine şimdi olmalıdır match
.
37Signals ayrıca mail_view adında kendi posta test gemisine sahiptir. . Oldukça harika.
Gördüğüm en kolay kurulum MailCatcher . Kurulum 2 dakika sürdü ve kutudan çıkar çıkmaz yeni postalar için çalışıyor.
Kullandığım email_preview . Bir şans ver.
Kısa bir süre önce , uygulama e-postalarını bir tarayıcı aracılığıyla önizlemek, düzenlemek (şablon dosyası) ve teslim etmek için Maily adında bir mücevher yazdım . Ayrıca, verileri bağlamak için kolay bir yol, esnek bir yetkilendirme sistemi ve minimalist bir kullanıcı arayüzü sağlar.
Yakın gelecekte aşağıdakiler gibi yeni özellikler eklemeyi planladım:
Umarım size yardımcı olabilir.
Rails E-posta Önizlemesini kullanabilirsiniz
REP bir I18n desteği, kolay premailer entegrasyon ve birlikte düzenleme isteğe bağlı CMS ile, önizleme ve test gönderme e-postalara motoru raylar olduğunu comfortable_mexican_sofa .
rails
kullanırsanız bir posta önizlemesi oluşturur rails g mailer CustomMailer
. Bir dosya alacak CustomMailerPreview
içinispec/mailers/previews
Klasörün .
Burada, postayı çağıracak ve bir önizleme oluşturacak yönteminizi yazabilirsiniz.
Örneğin -
class CustomMailerPreview < ActionMailer::Preview
def contact_us_mail_preview
CustomMailer.my_mail(user: User.first)
end
end
Tüm e-postaları http: // localhost: 3000 / rails / mailers / custom_mailer adresinde önizleyin
config.action_mailer.preview_path = "#{Rails.root}/spec/mailers/previews"
Rails Email Preview, e-postayı geliştirme modunda web tarayıcısında hızlı bir şekilde görüntülememize yardımcı olur.
1) “gem ‘rails_email_preview’, ‘~> 0.2.29’ “
Gem dosyasına ve paket kurulumuna ekleyin .
2) Çalıştır “rails g rails_email_preview:install”
Bunu , yapılandırma klasöründe başlatıcı oluşturur ve rotalar ekler.
3) “rails g rails_email_preview:update_previews”
Bu crates mailer_previews klasörünü uygulama dizininde çalıştırın.
Generator, e-postalarınızın her birine bir saplama ekleyecek, ardından saplamayı sahte verilerle dolduracaktır.
Ör:
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) Arama sorgusundaki parametreler, sınıfın önizlemesi için bir örnek değişken olarak mevcut olacaktır. Ör: “/emails/user_mailer_preview-welcome?user_id=1”
@user_id
Hoşgeldin yönteminde tanımlandığı gibi bir URL'miz varsa
UserMailerPreview
, belirli bir kullanıcıya posta göndermemize yardımcı olur.
class UserMailerPreview
def welcome
user = @user_id ? User.find(@user_id) : mock_user
UserMailer.welcome(user)
end
end
5) Bunun gibi REP url'lerine erişmek için
rails_email_preview.rep_root_url
rails_email_preview.rep_emails_url
rails_email_preview.rep_email_url(‘user_mailer-welcome’)
6) REP yoluyla e-posta gönderebiliriz, bu ortam posta ayarlarını kullanacaktır. Test ortamında posta göndermeyi devre dışı bırakmak için başlatıcıdaki bu satırın açıklamasını kaldırın.
config.enable_send_email = false
Kaynak: RailsCarma Blog: Mail_View Gem ile Rails Uygulamalarında E-postaları Önizleme
Hiç kimsenin letter_opener'dan bahsetmemesine şaşırdım . Dev'de bir e-posta teslim edildiğinde e-postaları bir tarayıcı sayfası olarak işleyecek ve açacak bir mücevher.
Doğrudan Postadan önizlemenin bir yolu yoktur. Ama yazdığınız gibi, buna benzer bir kontrolör yazabilirsiniz.
class EmailPreviewsControllers < ActionController::Base
def show
render "#{params[:mailer]}_mailer/#{params[:method]}"
end
end
Ama bence, doğru görünüyorlarsa, e-postaları test etmenin en iyi yolu bu değil.
render "#{params[:mailer]}_mailer/#{params[:method]}", :layout => 'mailer'
e-postanın gövdesini uygulamanız için oluşturduğunuz HTML e-posta düzeninin içine yerleştirir.
tercih ederim Mails_viewer gem'i . Bu mücevher, HTML şablonunu tmp klasörüne kaydettiği için oldukça kullanışlıdır.