मैं रेल में ईमेल का पूर्वावलोकन कैसे करूँ?


116

यह एक गूंगा प्रश्न हो सकता है, लेकिन जब मैं एक HTML ईमेल रेल में डाल रहा हूं, तो क्या यह ब्राउज़र में टेम्पलेट का पूर्वावलोकन करने का एक विशेष रूप से आसान तरीका है या क्या मुझे किसी प्रकार के कस्टम नियंत्रक को लिखने की आवश्यकता है जो इसे खींचता है इसके विचार में?


2
स्पष्ट रूप से कोई गूंगा प्रश्न नहीं हैं: D
knagode

जवाबों:


133

एक्शन मेलर के पास अब रेल्स 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

5
@andres यकीन है कि डिजाइन से - आप उपयोगकर्ताओं को उत्पादन सर्वर पर अपने मेल का पूर्वावलोकन नहीं करना चाहते हैं, यह केवल स्थानीय विकास के लिए है।
बजकर 45 मिनट

1
@ बाधित और क्या होगा यदि मैं चाहता हूं कि उपयोगकर्ता मेल भेजने / संशोधित करने में सक्षम हों, जो वे भेजने वाले हैं? (पूर्व: एक प्रबंधक एक उपयोगकर्ता के आवेदन को अस्वीकार कर देता है, और आवेदक को चेतावनी देने के लिए एक ईमेल भेजा जाता है)
सिरिल डचोन-डोरिस

2
@CyrilDD आपको खुद कुछ ऐसा बनाना होगा, मुझे नहीं लगता कि यह उस काम के लिए उपकरण होगा।
बेंजामिनजोसेफ


8
यदि आप Rspec का उपयोग कर रहे हैं, तो आपके पूर्वावलोकन में चले जाते हैंspec/mailers/previews
आकर्षित किया स्टीफेंस

73

डैनियल का जवाब एक अच्छी शुरुआत है, लेकिन अगर आपके ईमेल टेम्प्लेट में कोई गतिशील डेटा है, तो यह काम नहीं करेगा। उदाहरण के लिए, आपका ईमेल एक ऑर्डर रसीद है और इसके भीतर आप प्रिंट आउट करते हैं @order.total_price- पिछली विधि का उपयोग करके @orderचर शून्य हो जाएगा।

यहाँ एक छोटा नुस्खा है जिसका मैं उपयोग करता हूँ:

सबसे पहले, चूंकि यह ईमेल पूर्वावलोकन कार्यक्षमता निश्चित रूप से केवल आंतरिक उपयोग के लिए है, मैंने व्यवस्थापक नामस्थान में कुछ सामान्य मार्ग सेट किए हैं:

#routes.rb

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

अगला, मैं नियंत्रक बनाता हूं। इस नियंत्रक में, मैं प्रति ईमेल टेम्पलेट में एक विधि बनाता हूं। चूँकि अधिकांश ईमेल में डायनेमिक डेटा होता है, इसलिए हमें यह अपेक्षा करनी होगी कि जो भी सदस्य टेम्पलेट की अपेक्षा करता है, वह चर हो जाए।

यह जुड़नार के साथ किया जा सकता है, लेकिन मैं आमतौर पर कुछ छद्म यादृच्छिक वास्तविक डेटा को हथियाने के लिए पसंद करता हूं। याद रखें - यह एक इकाई परीक्षण नहीं है - यह विशुद्ध रूप से एक विकास सहायता है। यह हर बार एक ही परिणाम का उत्पादन करने की जरूरत नहीं है - वास्तव में - यह शायद बेहतर है अगर यह नहीं करता है!

#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_w Welcome पर जा सकता हूं।


यह वास्तव में मेरे द्वारा लिया गया दृष्टिकोण था और जैसा कि मैंने आपके उत्तर को पढ़ने के लिए शुरू किया था, ठीक है, धन्यवाद
पीटर निक्से

बहुत बढ़िया जवाब! वास्तव में मुझे क्या चाहिए!
कुलगर

अब यह एक स्वादिष्ट नुस्खा है! शानदार उत्तर के लिए धन्यवाद!
रॉब कूपर

यह एक कमाल का जवाब है! धन्यवाद!
ओजबंडिट

5
मार्ग get 'mailer...अब के बजाय होना चाहिए match
पैट्रिक बर्कले

18

37Signals का अपना स्वयं का मेल परीक्षण रत्न भी है जिसे mail_view कहा जाता है । यह बहुत शानदार है।


कोई दिक्कत नहीं है। आपने किस तरह का उपयोग करके समाप्त किया?
मार्क

जब मैंने इसे पोस्ट किया तो मैंने एक कस्टम नियंत्रक के साथ समस्या को हल किया जो मैंने खुद लिखा था, लेकिन जल्द ही इसे फिर से हिट करने जा रहा हूं, इसलिए इस के साथ प्रयोग किया जाएगा
पीटर निक्स

16

सबसे आसान सेटअप मैंने देखा है MailCatcher । सेटअप में 2 मिनट का समय लगा, और यह नए मेलर्स के लिए कार्य करता है।


यह वास्तव में बहुत अच्छा है। सेटअप बहुत तेज़ है और सभी मेलर्स के लिए काम करता है! महान टिप!
REPT


5

मैंने हाल ही में Maily नामक एक मणि को पूर्वावलोकन, संपादित करने (टेम्पलेट फ़ाइल) और एक ब्राउज़र के माध्यम से एप्लिकेशन ईमेल वितरित करने के लिए लिखा था । यह हुक डेटा, एक लचीला प्राधिकरण प्रणाली और एक न्यूनतम यूआई को एक अनुकूल तरीका प्रदान करता है।

मैंने निकट भविष्य में नई सुविधाओं को जोड़ने की योजना बनाई है, जैसे:

  • प्रति ईमेल कई हुक
  • UI के माध्यम से पैरामीटर मेल करें (मेलर विधि के तर्क)
  • अनुवाद कुंजियों के साथ खेलें (सूची, हाइलाइट, ...)

उम्मीद है यह आपकी मदद कर सकता है।


4

आप रेल ईमेल पूर्वावलोकन का उपयोग कर सकते हैं

रेल-ईमेल-पूर्वावलोकन स्क्रीनशॉट

आरईपी I18n समर्थन, आसान प्रीमियरर एकीकरण, और वैकल्पिक CMS एडिटिंग के साथ comfortable_mexican_sofa के साथ पूर्वावलोकन और परीक्षण ईमेल भेजने के लिए एक रेल इंजन है ।


क्या वास्तव में एकीकरण बीईपी आरईपी और सीएमएस पर कोई नमूने हैं?
danieldekay

मैं किसी भी डेमो अनुप्रयोगों के बारे में नहीं जानता, लेकिन विकि पर
glebm

4

railsयदि आप उपयोग करते हैं तो एक मेल पूर्वावलोकन उत्पन्न करता है rails g mailer CustomMailer। आपको फ़ोल्डर के CustomMailerPreviewअंदर एक फ़ाइल मिलेगी spec/mailers/previews

यहां आप अपनी विधि लिख सकते हैं जो मेलर को बुलाएगा और यह एक पूर्वावलोकन उत्पन्न करेगा।

पूर्व के लिए -

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

Http: // localhost: 3000 / रेल / मेलर्स / custom_mailer पर सभी ईमेल का पूर्वावलोकन करें


Rspec के साथ अपने ऐप के लिए मैंने जोड़ा config.action_mailer.preview_path = "#{Rails.root}/spec/mailers/previews"
Mauro

3

रेल ईमेल पूर्वावलोकन हमें विकास मोड में वेब ब्राउज़र में ईमेल को जल्दी से देखने में मदद करता है।

1) “gem ‘rails_email_preview’, ‘~> 0.2.29’ “मणि फ़ाइल में जोड़ें और बंडल इंस्टॉल करें।

2) इसे चलाएं “rails g rails_email_preview:install”कॉन्फ़िगर फ़ोल्डर में इनिशियलाइज़र बनाता है और मार्गों को जोड़ता है।

3) “rails g rails_email_preview:update_previews”ऐप डायरेक्टरी में इस क्रेट मेलर_प्रव्यू फ़ोल्डर को चलाएं ।

जनरेटर आपके प्रत्येक ईमेल में एक स्टब जोड़ देगा, फिर आप स्टॉक को मॉक डेटा के साथ पॉप्युलेट करेंगे।

उदाहरण के लिए:

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) खोज क्वेरी में पैरामीटर पूर्वावलोकन वर्ग के लिए एक उदाहरण चर के रूप में उपलब्ध होंगे। Ex: यदि हमारे पास एक 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) इस तरह REP url को एक्सेस करना

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

6) हम आरईपी के माध्यम से ईमेल भेज सकते हैं, यह पर्यावरण मेलर सेटिंग्स का उपयोग करेगा। परीक्षण वातावरण में मेल भेजने को अक्षम करने के लिए इनिशियलाइज़र में इस लाइन को हटा दें।

config.enable_send_email = false

स्रोत: रेल्सकर्मा ब्लॉग: मेल एप्लिकेशन में मेलों के साथ रेल अनुप्रयोगों का पूर्वावलोकन करना


3

मुझे आश्चर्य है कि किसी का भी उल्लेख पत्र_प्राप्तकर्ता नहीं है । यह एक ऐसा रत्न है जो ईमेल को एक ब्राउज़र पेज के रूप में प्रस्तुत करेगा और जब भी कोई ईमेल देव में वितरित किया जाएगा।


1
letter_opener एक शांत रत्न है और यह एक होना चाहिए। लेकिन कभी-कभी मेल विशेष घटनाओं से शुरू होता है जो आप मेल के शुद्ध रूप से HTML / css की जाँच करने के लिए खेलने से बचना चाहते हैं।
मौरो

2

मेलर से सीधे इसका पूर्वावलोकन करने का कोई तरीका नहीं है। लेकिन जैसा कि आपने लिखा है, आप एक नियंत्रक लिख सकते हैं, जो कुछ इस तरह दिखता है।

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

लेकिन मुझे लगता है, ईमेल का परीक्षण करने का यह सबसे अच्छा तरीका नहीं है, अगर वे सही तरीके से देखते हैं।


3
render "#{params[:mailer]}_mailer/#{params[:method]}", :layout => 'mailer'आपके द्वारा बनाए गए HTML ईमेल लेआउट के अंदर ईमेल का मुख्य भाग एम्बेड करेगा।
डेक्सटर

इसके लिए धन्यवाद - मैं ब्राउज़र संगतता को दोबारा जांचना नहीं चाहता हूं, मैं अलग से इलाज करूंगा, मैं बस इस चीज को जल्दी से बाहर थूकना चाहता हूं और देखें कि यह कैसा दिखता है - मुझे लगता है कि आपका दृष्टिकोण इसके लिए अच्छी तरह से काम करता है
पीटर निक्सी

1

मुझे mails_viewer रत्न पसंद है । यह रत्न काफी उपयोगी है क्योंकि यह HTML टेम्पलेट को tmp फ़ोल्डर में सेव करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.