Bagaimana cara melihat pratinjau email di Rails?

116

Ini mungkin pertanyaan bodoh tetapi ketika saya menyusun email HTML di Rails, apakah ada cara bawaan yang sangat mudah untuk melihat pratinjau templatnya di browser atau apakah saya perlu menulis semacam pengontrol khusus yang menariknya? dalam pandangannya?

Peter Nixey
sumber
2
Rupanya tidak ada pertanyaan bodoh: D
knagode

Jawaban:

134

Action Mailer sekarang memiliki cara bawaan untuk melihat pratinjau email di Rails 4.1 . Misalnya, lihat ini:

# 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
benjaminjosephw
sumber
5
@andres Cukup yakin itu memang sengaja - Anda tidak ingin pengguna melihat pratinjau email Anda di server produksi, ini dimaksudkan hanya untuk pengembangan lokal.
diberdayakan
1
@mpowered Dan bagaimana jika SAYA ingin pengguna dapat melihat / mengubah email yang akan mereka kirim? (Mis: seorang manajer menolak aplikasi pengguna, dan email dikirim untuk memperingatkan pemohon)
Cyril Duchon-Doris
2
@CyrilDD Anda harus membangun sesuatu seperti itu sendiri, saya rasa ini tidak akan menjadi alat untuk pekerjaan itu.
benjaminjosephw
8
Jika Anda menggunakan Rspec, pratinjau Anda akan masukspec/mailers/previews
Drew Stephens
73

Jawaban Daniel adalah permulaan yang baik, tetapi jika template email Anda berisi data dinamis, itu tidak akan berfungsi. Misalkan email Anda adalah tanda terima pesanan dan di dalamnya Anda mencetak @order.total_price- menggunakan metode sebelumnya, @ordervariabelnya akan menjadi nihil.

Berikut sedikit resep yang saya gunakan:

Pertama, karena fungsi pratinjau email ini pasti hanya untuk penggunaan internal, saya menyiapkan beberapa rute umum di namespace admin:

#routes.rb

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

Selanjutnya, saya membuat pengontrol. Di pengontrol ini, saya membuat satu metode per template email. Karena sebagian besar email berisi data dinamis, kita perlu mengisi variabel anggota apa pun yang diharapkan template.

Ini bisa dilakukan dengan perlengkapan, tetapi saya biasanya lebih suka mengambil beberapa data nyata pseudo-random. Ingat - ini BUKAN tes unit - ini murni bantuan pengembangan. Tidak perlu menghasilkan hasil yang sama setiap saat - pada kenyataannya - mungkin lebih baik jika tidak!

#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

Perhatikan bahwa saat kami merender template, kami menggunakan layout=>:mailer. Ini menyematkan badan email Anda di dalam tata letak email HTML yang telah Anda buat alih-alih di dalam tata letak aplikasi web biasa Anda (mis application.html.erb.).

Dan itu cukup banyak. Sekarang saya dapat mengunjungi http://example.com/admin/mailer/preview_welcome untuk melihat pratinjau perubahan pada template email selamat datang saya.

cailinanne
sumber
Ini sebenarnya adalah pendekatan yang saya ambil dan baru saja saya kodekan ketika saya mulai membaca jawaban Anda - terima kasih :)
Peter Nixey
Jawaban yang bagus! Persis yang saya butuhkan!
Kulgar
Nah, itu resep yang enak! Terima kasih atas jawaban yang bagus!
Rob Cooper
Ini jawaban yang luar biasa! Terima kasih!
OzBandit
5
Rute seharusnya get 'mailer...sekarang, bukan match.
Patrick Berkeley
18

37Signals juga memiliki permata pengujian email mereka sendiri yang disebut mail_view . Ini sangat fantastis.

Marc
sumber
Tidak masalah. Cara apa yang akhirnya Anda gunakan?
Marc
Bac ketika saya memposting ini, saya memecahkan masalah dengan pengontrol khusus yang saya tulis sendiri tetapi akan segera melakukannya lagi jadi saya akan bereksperimen dengan ini
Peter Nixey
16

Penyiapan termudah yang pernah saya lihat adalah MailCatcher . Penyiapan memerlukan waktu 2 menit, dan berfungsi untuk mailer baru di luar kotak.

Galen
sumber
Ini memang bagus. Penyiapannya sangat cepat dan berfungsi untuk semua pengirim email! Tip bagus!
Reptil
5

Saya baru-baru ini menulis permata bernama Maily untuk melihat, mengedit (file template) dan mengirimkan email aplikasi melalui browser. Ini juga menyediakan cara yang ramah untuk menghubungkan data, sistem otorisasi yang fleksibel, dan UI minimalis.

Saya telah merencanakan untuk menambahkan fitur baru dalam waktu dekat, seperti:

  • Beberapa kait per email
  • Parameter email melalui UI (argumen metode mailer)
  • Bermain dengan tombol terjemahan (daftar, sorot, ...)

Saya harap ini dapat membantu Anda.

pasar
sumber
4

Anda dapat menggunakan Pratinjau Email Rails

tangkapan layar rails-email-preview

REP adalah mesin rel untuk melihat dan menguji email pengiriman, dengan dukungan I18n, integrasi premailer yang mudah, dan pengeditan CMS opsional dengan comfortable_mexican_sofa .

glebm
sumber
Apakah ada contoh tentang bagaimana sebenarnya melakukan integrasi antara REP dan CMS?
danieldekay
Saya tidak tahu aplikasi demo apa pun, tetapi ada artikel
glebm
4

railsmenghasilkan pratinjau email jika Anda menggunakan rails g mailer CustomMailer. Anda akan mendapatkan file CustomMailerPreviewdi dalamnyaspec/mailers/previews folder.

Di sini Anda dapat menulis metode Anda yang akan memanggil mailer dan itu akan menghasilkan pratinjau.

Untuk mantan -

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

Pratinjau semua email di http: // localhost: 3000 / rails / mailers / custom_mailer

Swaps
sumber
Untuk aplikasi saya dengan rspec saya menambahkan config.action_mailer.preview_path = "#{Rails.root}/spec/mailers/previews"
Mauro
3

Pratinjau Email Rails membantu kita melihat email dengan cepat di browser web dalam mode pengembangan.

1) Tambahkan “gem ‘rails_email_preview’, ‘~> 0.2.29’ “ke file permata dan instal bundel.

2) Jalankan “rails g rails_email_preview:install” ini membuat penginisialisasi di folder config dan menambahkan rute.

3) Jalankan “rails g rails_email_preview:update_previews”folder crates mailer_previews ini di direktori aplikasi.

Generator akan menambahkan stub ke setiap email Anda, lalu Anda mengisi stub dengan data tiruan.

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) Parameter dalam permintaan pencarian akan tersedia sebagai variabel instan untuk melihat kelas. Mis: jika kita memiliki URL seperti “/emails/user_mailer_preview-welcome?user_id=1” @user_idyang didefinisikan dalam metode selamat datang UserMailerPreviewitu membantu kita untuk mengirim email ke pengguna tertentu.

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

5) Untuk mengakses url REP seperti ini

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

6) Kami dapat mengirim email melalui REP, ini akan menggunakan pengaturan mailer lingkungan. Batalkan komentar baris ini di penginisialisasi untuk menonaktifkan pengiriman email di lingkungan pengujian.

config.enable_send_email = false

Sumber: Blog RailsCarma : Melihat Pratinjau Email di Aplikasi Rails Dengan Permata Mail_View

Carma Tec
sumber
3

Saya terkejut tidak ada yang menyebutkan letter_opener . Ini adalah permata yang akan merender dan membuka email sebagai halaman browser setiap kali email dikirim dalam dev.

KurtPreston
sumber
1
letter_opener adalah permata yang keren dan harus dimiliki. Tetapi kadang-kadang surat dimulai dari acara khusus yang ingin Anda hindari untuk hanya memeriksa html / css surat tersebut.
Mauro
2

Tidak ada cara untuk melihatnya langsung dari Mailer. Tetapi saat Anda menulis, Anda dapat menulis pengontrol, yang terlihat seperti ini.

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

Namun menurut saya, itu bukan cara terbaik untuk menguji email, jika terlihat benar.

Daniel Spangenberg
sumber
3
render "#{params[:mailer]}_mailer/#{params[:method]}", :layout => 'mailer'akan menyematkan badan email di dalam tata letak email HTML yang telah Anda buat untuk aplikasi Anda.
dexter
Terima kasih untuk itu - Saya tidak ingin memeriksa ulang kompatibilitas browser, saya akan memperlakukannya secara terpisah, saya hanya ingin meludahkannya dengan cepat dan melihat tampilannya - saya pikir pendekatan Anda berfungsi dengan baik untuk itu
Peter Nixey
1

Saya lebih suka permata mails_viewer . Permata ini cukup berguna karena menyimpan template HTML ke folder tmp.

Trung Lê
sumber