2012-02-15 3 views
6

Sto lavorando alle e-mail per la mia app per i binari. In questo momento, l'unico modo che conosco per visualizzare l'e-mail è di inviarlo a me stesso. Come posso ottenere "daily_summary.html.haml", che si trova nella cartella "notifications" nella cartella "views", per eseguire il rendering nel browser? Stavo pensando che dovrei aggiungere il percorso:Come visualizzare le visualizzazioni e-mail nel browser utilizzando le guide

match 'notifications' => 'notifications/daily_summary' 

Ma poi io non so come gestire la parte del controller/azione delle cose.

+1

possibile duplicato di [Come visualizzare in anteprima le e-mail in Rails?] (Http://stackoverflow.com/questions/7165064/how-do-i-preview-emails-in-rails) –

risposta

1

Dare un'occhiata a actionmailer_extensions. Fa in modo che ActionMailer scriva e-mail in uscita sul disco come file .eml. Questo potrebbe essere sufficiente per i tuoi scopi (basta impostare uno script per guardare la directory di output per i nuovi file e aprirli nel tuo client di posta preferito), oppure puoi inserire il gioiello e modificarlo direttamente (la sua origine è semplice) per scrivere file .html e aprirli invece nel browser.

Spero che questo aiuti!

8

C'è un gioiello chiamato Letter Opener che sembra fare esattamente quello che stai cercando. Anticipa i messaggi di posta elettronica nel browser anziché inviarli. Non l'ho usato da solo. Se funziona, mi piacerebbe saperlo, comunque!

https://github.com/ryanb/letter_opener

C'è un altro chiamato Mail Viewer ma non è stato sviluppato attivamente po 'di tempo. Probabilmente meglio stare alla larga:

https://github.com/37signals/mail_view

+0

Letter Opener sembra funzionare . L'unica cosa è che sta aprendo le versioni 'plain.html' della e-mail invece delle versioni 'rich.html' (la plain sembra corrispondere alla versione testuale della mia e-mail e alla versione html). Qualche idea su come potrei cambiarlo? – John

+0

Sembra che all'interno del blocco 'deliver' sia possibile specificare sia un blocco' text_part' che un blocco 'html_part'. E devi impostare 'content_type' su' 'text/html'' nel blocco html_part. Vedi se funziona. –

+0

Sono un po 'ignorante qui. . dove vedi questi blocchi e dove posso impostare content_type? – John

10

Dal Rails 4.1, e-mail di anteprima è originaria. Tutto quello che devi fare è creare una classe in questa directory:

test/mailers/previews/ 

La classe deve estendere i metodi ActionMailer::Preview

class WeeklyReportPreview < ActionMailer::Preview 
    def weekly_report 
     WeeklyReport.weekly_report(User.first) 
    end 
end 

Write che restituiscono Mail::Message oggetti. Essi sono accessibili nell'ambiente di sviluppo utilizzando questo URL:

http://localhost:3000/rails/mailers/[preview_class_name]/[method_name] 

Nel mio caso:

http://localhost:3000/rails/mailers/weekly_report/weekly_report 

Maggiori informazioni si possono trovare nel ActionMailer API documentation

+0

Per chiunque finisse qui - ho notato il fatto che molti fanno riferimento alla creazione di anteprime in test/mailer ecc. Tuttavia, se si hanno test specifici in spec/mailers ... altrimenti funziona bene! – Ben

1

per Rails 3 v'è ora una gemma, mail_view, incluso in Rails 4.1. Ecco un collegamento a set-up. È abbastanza facile

1.) Aggiungi a Gemfile:

gem 'mail_view', :git => https://github.com/basecamp/mail_view.git' 
# or 
gem "mail_view", "~> 2.0.4" 

2.) in routes.rb:

# config/routes.rb 
if Rails.env.development? 
    mount MailPreview => 'mail_view' 
end 

3.) Creare un modello MailPreview:

# app/mailers/mail_preview.rb or lib/mail_preview.rb 
class MailPreview < MailView 
... 
def forgot_password 
    user = Struct.new(:email, :name).new('[email protected]', 'Jill Smith') 
    mail = UserMailer.forgot_password(user) 
end 
end 

In questo modello puoi nominare i metodi come vuoi, ma ha senso che corrispondano ai metodi UserMailer.

4.) Per visualizzare passare a /mail_view per un elenco di tutti i metodi in MailPreview. Fare clic su uno per vedere l'anteprima HTML proprio lì nel browser.