2014-01-30 6 views
8

Ich möchte ActionMailer in meiner Rake-Aufgabe verwenden, um E-Mails zu bestimmten Zeiten an Personen zu senden.Wie man die ActionMailer-Klasse in die Rake-Aufgabe einbezieht?

ich ein Mailer-Klasse in app geschrieben haben/Mailer Ordner wie folgt aus:

class AlertsMailer < ActionMailer::Base 
    default from: '[email protected]' 

    def mail_alert(email_addresses, subject, url) 
    @url = '#{url}' 
    mail(to: email_addresses, subject: 'Alert') do |format| 
     format.html { render '/alerts/list' } 
    end 
    end 
end 

Dann enthalten ich die folgende Zeile in meinem Rechen-Aufgabe:

AlertsMailer.mail_alert(email_addresses, subject) 

Wenn ich versuche, den Rechen zu laufen Aufgabe:

rake update_db 

ich die folgende Fehlermeldung erhalten:

uninitialized constant AlertsMailer 

Ich denke, ich muss irgendwie die Mailer-Klasse in meine Rake-Aufgabe laden, aber ich habe keine Ahnung, wie das geht.

Bitte helfen.

Antwort

6

Ich habe folgende und es funktioniert:

# in lib/tasks/mailme.rake 
task :mailme => :environment do 
    UserMailer.test_email(1).deliver 
end 

Und

# in app/mailers/user_mailer.rb 
class UserMailer < ActionMailer::Base 
    def test_email(user_id) 
    @user = User.find_by_id user_id 

    if (@user) 
     to = @user.email 

     mail(:to => to, :subject => "test email", :from => "[email protected]") do |format| 
     format.text(:content_type => "text/plain", :charset => "UTF-8", :content_transfer_encoding => "7bit") 
     end 
    end 
    end 
end 
+0

Aber wie füge ich Vorschau meiner Webseite hier in der Post? – Joy

+0

In den Ansichten/user_mailer/test_email.text.erb im obigen Beispiel – Abdo

7

Von Ihrem Tag, ich glaube, Sie Rails verwenden.

Sie können eine Abhängigkeit für die Umwelt Aufgabe Ihre Rails-Umgebung laden, indem Sie erfordern wie folgt:

task :my_task => :environment do 
    ... 
end 

statt

task :my_task do 
    ... 
end 

Lassen Sie mich wissen, ob es hilft.

Verwandte Themen